Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У. Столлингс ГЛАВА 4 Потоки.doc
Скачиваний:
49
Добавлен:
11.05.2015
Размер:
6.22 Mб
Скачать

4.3. Микроядра

В последнее время большое внимание уделяется концепции микроядер. Микроядро представляет собой остов операционной системы, служащий основой для других ее модулей. Термин не имеет точного определения, и многие вопро­сы, относящиеся к микроядрам, различные группы разработчиков операционных систем трактуют по-разному. В число этих вопросов входят такие: насколько малым должно быть ядро, чтобы его можно было назвать микроядром; как должны быть разработаны драйверы устройств, чтобы достичь максимальной производительности при абстрагировании их функциональности от особенностей аппаратного обеспечения; как следует выполнять не относящиеся к ядру опера­ции — в пространстве ядра или в пользовательском пространстве, и другие.

Подход с использованием микроядра приобрел популярность после его исполь­зования в операционной системе Mach. Теоретически такой подход обеспечивает вы­сокую степень гибкости и модульности. Другим примером удачного использования этого подхода стала операционная система Windows 2000, которая претендует на широкую популярность. Микроядро операционной системы Windows 2000 окружено несколькими компактными подсистемами, что облегчает его реализацию на различ­ных платформах. Некоторые другие программные продукты также реализованы с использованием микроядра. В ближайшем будущем этот подход, по-видимому, будет встречаться в большинстве операционных систем, разрабатываемых для персональ­ных компьютеров, рабочих станций и серверов.

Архитектура микроядра

На структуру ранних операционных систем, разработанных в средине 50-х годов, обращалось мало внимания. Ни у кого не было опыта в разработке дейст­вительно больших программных систем, а проблемы взаимозависимости и взаи­модействия сильно недооценивались. В подобных монолитных операционных системах (monolithic operating systems) почти все процедуры могли вызывать одна другую. Такое отсутствие структуры было несовместимо с расширением операционных систем. Первая версия операционной системы OS/360 была созда­на коллективом программистов из 5000 человек за пять лет и содержала более миллиона строк кода. Разработанная несколько позже операционная система Multics содержала уже 20 миллионов строк. Как отмечалось в разделе 2.3, для разработки программного обеспечения такого масштаба требуется использовать методы модульного программирования. В частности, были разработаны слоистые операционные системы (layered operating systems)3 (рис. 4.10,а) с иерархической организацией функций, взаимодействие в которых возможно только между функциями, находящимися на соседних уровнях. При "многослойном" подходе все уровни или большинство из них выполняются в режиме ядра.

"Слоистый" подход тоже не лишен своих проблем. Каждый слой обладает определенными функциональными возможностями, и значительные изменения одного из уровней могут иметь различное влияние (которое трудно предвидеть) на код в смежных слоях (как верхнем, так и нижнем). Поэтому довольно трудно реализовать согласованные версии операционной системы, имеющие на несколь­ко функций больше или меньше, чем в базовой версии. Многочисленные взаи­модействия между соседними уровнями усложняют обеспечение безопасности.

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

3 Как обычно, терминология в этой области непоследовательна. Термином моно­литная операционная система часто обозначаются операционные системы двух видов, для которых в данной книге употребляются названия монолитные и слоистые.

В архитектуре с микроядром традиционное вертикальное расположение уровней заменяется горизонтальным (рис. 4.10,6). Внешние по отношению к микроядру компоненты операционной системы реализуются как обслуживающие процессы. Между собой они взаимодействуют как равноправные партнеры; обычно взаимодействие реализуется с помощью обмена сообщениями, которые передаются через мик­роядро. Таким образом, ядро выступает в роли посредника: оно подтверждает пра­вильность сообщений, передает их от одного компонента другому и предоставляет доступ к аппаратному обеспечению. Кроме того, микроядро выполняет защитные функции: оно не пропускает сообщение, если такой обмен не разрешен.

Например, если приложению нужно открыть файл, оно отправляет сообще­ние серверу файловой системы. Если ему нужно создать процесс или поток, оно отправляет сообщение серверу процессов. Каждый из серверов может отправлять сообщения другим серверам и обращаться к элементарным функциям микроядра. Так в одном компьютере реализуется архитектура типа клиент/сервер.