Интернет магазин китайских планшетных компьютеров



Компьютеры - Mach - Концепция

13 мая 2011


Оглавление:
1. Mach
2. Концепция
3. Разработка
4. Проблемы с производительностью
5. Возможные решения
6. Следующее поколение
7. Операционные системы и ядра, основанные на Mach



Так как Mach был спроектирован как быстрая замена традиционному ядру Unix, мы рассмотрим в основном отличия Mach от Unix. Стало понятным, что Unix-концепция «всё — файл» больше не работает на современных системах, но такие системы, как Plan 9 от Bell Labs, всё же пытаются следовать по этому пути. Разработчики Mach заметили негибкость такого подхода, и предположили, что другой уровень виртуализации может заставить систему «работать» снова.

Одна из важнейших абстракций в Unix — это конвейеры. Что похоже на конвейеры и позволит на более общем уровне сделать доступным различные перемещения информации между программами? Такая система может существовать, используя межпроцессное взаимодействие — похожий на конвейеры принцип организации взаимодействия процессов, позволяющий перемещать любую файлоподобную информацию между двумя программами. В то время как во многих системах, включая различные Unix, уже несколько лет существовали различные реализации IPC, но они были предназначены для специальных целей и не могли обеспечить то, что создатели Mach от них ждали.

В Carnegie Mellon University начали разработку ядра Accent, используя IPC, базирующийся на разделяемой памяти. Accent был экспериментальной системой со множеством возможностей, разрабатываемых по веянию моды за всё время разработки. Дополнительно, полезность Accent для исследования была ограничена, потому что он не был Unix-совместимым, а Unix был уже стандартом де-факто во всех исследовательских ОС. Кроме того, Accent был жёстко привязан к платформе, на которой разрабатывался. Но в начале 1980-х казалось, что вскоре появится множество новых платформ, многие из которых будут поддерживать массовый параллелизм.

В начале разработка Mach рассматривалась, в основном, как попытка создать концептуально «чистый», основанный на Unix, легко портируемый Accent. Были сформулированы следующие основные концепции:

  • «задача» — набор ресурсов которые позволяют «потокам» исполняться
  • «поток» — единица, исполняющаяся на процессоре
  • «порт» определяет защищённый конвейер для IPC между задачами
  • «сообщение» перемещается между программами через порт

Mach разработан на концепциях IPC Accent’а, но сделан системой, больше похожей на Unix, которая позволяет запускать Unix-программы с минимальными изменениями или вовсе без них. Для достижения этой цели в Mach появилась концепция «порта», представляющего конец в двухстороннем IPC. Порты были защищены и имели права, подобные правам доступа на файлы в Unix, а также использовали очень похожую на Unix модель защиты. Дополнительно Mach разрешал любой программе владеть привилегиями, которыми обычно владеет только ядро, позволяя непривилегированному уровню обращаться к аппаратному обеспечению.

В Mach, как в Unix, ОС опять стала главным образом набором утилит. Как и Unix, в Mach есть концепция «драйвера» как посредника между собственно ядром и аппаратным обеспечением. Однако все драйверы для существующего аппаратного обеспечения должны быть включены в микроядро. Другие архитектуры, базирующиеся на слоях абстракции от оборудования или экзоядрах могут отделять драйверы из микроядра.

Главным отличием от Unix было то, что утилиты должны были работать не с файлами, а с задачами. Больше кода было перемещено из ядра в непривилегированный режим. Ядро за счёт этого стало существенно меньше, отсюда термин микроядро для обозначения ядра Mach. В отличие от традиционных систем, под Mach процесс может состоять из набора потоков. Mach был первой ОС, которая определила понятие поток в этом смысле. Задачи ядра были сведены к работе с оборудованием и поддержке утилит.

Существование портов и использование IPC определяет большинство различий между Mach и традиционными ядрами. В Unix для обращения к ядру используются «системные вызовы» или «сигнал». Программа использует библиотеку, чтобы разместить данные в известном месте в памяти, и затем вызывает специальное программное прерывание. Когда система впервые запускает ядро, она устанавливает обработчик этого прерывания, поэтому программа, порождающая прерывание, вызывает ядро, которое исследует пришедшую информацию и совершает действия.

В Mach для этой цели используется IPC. Программа запрашивает у ядра доступ к порту, а затем использует механизм IPC для посылки сообщений в порт. В других ядрах эти сообщения обрабатываются системными вызовами; в Mach практически все запросы обрабатываются другой программой.

Использование IPC для передачи сообщений поддерживает потоки и конкуренцию. Так как задачи состоят из множества потоков, и их код в потоках использует механизм IPC. Mach может заморозить или разморозить поток, пока сообщение обрабатывается. Это позволяет системе быть распределённой на множество процессоров, используя разделяемую память прямо в большинстве сообщений Mach, или путём добавления кода для копирования сообщения в другой процессор, если требуется. В традиционном ядре это трудно реализовать, потому что система должна быть уверена, что различные программы не пытаются писать в туже самую память на различных процессорах. В Mach это хорошо определено и легко реализуется; процесс совершающий доступ к памяти, портам делается гражданином системы.

Система IPC имеет проблемы с производительностью, для преодоления которых было разработано несколько стратегий. В частности, Mach использует единый механизм разделения памяти для физической передачи сообщений от одной программы к другой. Физически копирования сообщения будет медленным, поэтому Mach обращается к блоку управления памятью для быстрого соотнесения данных в одной программе и в другой. Только если данные записываются они будут физически скопированы, процесс называющийся «копирование при записи».

Сообщения также проверяются на целостность ядром, чтобы избежать плохих данных, которые выведут из строя одну из программ, составляющих систему. Порты были разработаны на основе файловой системы Unix. Это позволило портам использовать существующие концепции навигации по файловой системе, а также права доступа.

По сравнению с более традиционными ОС разработка такой системы становится проще. Большая часть системы может быть запущена, отлажена и создана с помощью тех же утилит, что и программы для традиционной системы. С монолитным ядром ошибка в коде требует выключения целой машины и перезагрузки, в то время как в Mach требуется только перезапуск программы. Дополнительно пользователь может указывать системе включить или выключить возможности по своему желанию. Так как ОС — это коллекция программ, разработчики могут добавлять или удалять её части, просто запуская или убивая их, как и любую другую программу.



Просмотров: 5727


<<< Linux oops
System.map >>>