Архитектура микроядра
На структуру ранних операционных систем, разработанных в средине 50-х годов, обращалось мало внимания. Ни у кого не было опыта в разработке действительно больших программных систем, а проблемы взаимозависимости и взаимодействия сильно недооценивались. В подобных монолитных операционных системах (monolithic operating systems) почти все процедуры могли вызывать одна другую. Такое отсутствие структуры было несовместимо с расширением операционных систем. Первая версия операционной системы OS/360 была создана коллективом программистов из 5000 человек за пять лет и содержала более миллиона строк кода. Разработанная несколько позже операционная система Multics содержала уже 20 миллионов строк. Как отмечалось в разделе 2.3, для разработки программного обеспечения такого масштаба требуется использовать методы модульного программирования. В частности, были разработаны слоистые операционные системы (layered operating systems)3 (рис. 4.10,а) с иерархической организацией функций, взаимодействие в которых возможно только между функциями, находящимися на соседних уровнях. При "многослойном" подходе все уровни или большинство из них выполняются в режиме ядра.
"Слоистый" подход тоже не лишен своих проблем. Каждый слой обладает определенными функциональными возможностями, и значительные изменения одного из уровней могут иметь различное влияние (которое трудно предвидеть) на код в смежных слоях (как верхнем, так и нижнем). Поэтому довольно трудно реализовать согласованные версии операционной системы, имеющие на несколько функций больше или меньше, чем в базовой версии. Многочисленные взаимодействия между соседними уровнями усложняют обеспечение безопасности.
Суть философии, лежащей в основе использования микроядра, заключается в том, что в ядре должны быть только самые важные функции операционной системы. Работа служб и приложений, не являющихся критическими, основана на работе микроядра, но выполняются они в пользовательском режиме. И хотя разделение на то, что находится внутри микроядра, и то, что выносится за его пределы, зависит от архитектуры системы; общая тенденция такова, что многие службы, которые традиционно входили в операционную систему, теперь входят во внешние подсистемы, взаимодействующие с ядром и друг с другом. К ним относятся драйверы устройств, файловые системы, менеджер виртуальной памяти, система управления окнами и службы безопасности.
3 Как обычно, терминология в этой области непоследовательна. Термином монолитная операционная система часто обозначаются операционные системы двух видов, для которых в данной книге употребляются названия монолитные и слоистые.
В архитектуре с микроядром традиционное вертикальное расположение уровней заменяется горизонтальным (рис. 4.10,6). Внешние по отношению к микроядру компоненты операционной системы реализуются как обслуживающие процессы. Между собой они взаимодействуют как равноправные партнеры; обычно взаимодействие реализуется с помощью обмена сообщениями, которые передаются через микроядро. Таким образом, ядро выступает в роли посредника: оно подтверждает правильность сообщений, передает их от одного компонента другому и предоставляет доступ к аппаратному обеспечению. Кроме того, микроядро выполняет защитные функции: оно не пропускает сообщение, если такой обмен не разрешен.
Например, если приложению нужно открыть файл, оно отправляет сообщение серверу файловой системы. Если ему нужно создать процесс или поток, оно отправляет сообщение серверу процессов. Каждый из серверов может отправлять сообщения другим серверам и обращаться к элементарным функциям микроядра. Так в одном компьютере реализуется архитектура типа клиент/сервер.
Дата добавления: 2016-06-05; просмотров: 1957;