2011. Машбук (1114722), страница 26
Текст из файла (страница 26)
Итак, по определению ядро обеспечиваетреализацию некоторого набора функций операционной системы. Это может быть оченьбольшой набор функций, а может быть маленький — все зависит от конкретнойреализации системы. Ядро может включать в свой состав драйверы основных физическихили виртуальных устройств.Над уровнем ядра может надстраиваться следующий уровень — это уровеньдинамически подгружаемых драйверов физических и виртуальных устройств. Поддинамически подгружаемыми понимается то, что в зависимости от ситуации составэтих драйверов при инсталляции и загрузке системы может меняться.
Соответственно, этидрайверы можно поделить на две категории: резидентные драйверы и нерезидентные.Резидентные драйверы подгружаются в систему в процессе ее загрузки и находятся в нейдо завершения ее работы. Примером резидентного драйвера может быть драйверфизического диска. Нерезидентные драйверы вызываются операционной системой насеанс работы с соответствующими устройствами (например, драйвер флэш-памяти).Отметим, что большинство современных операционных систем имеют в своемсоставе набор драйверов широкого спектра конкретных физических устройств и, в90частности, физических дисков. Поэтому зачастую при смене устройства драйвер менятьне надо: он уже есть в системе. Но при этом системе незачем держать драйвера всехустройств в оперативной памяти. Соответственно, следуя той или иной стратегии, будутзагружаться драйверы тех физических устройств, которые реально будут обслуживатьсясистемой.
Стратегии могут быть различными, одной из них: может быть явное указаниесистеме списка драйверов, которые необходимо подгрузить (в этом случае, если в спискечто-то будет указано неправильно, то соответствующее устройство, возможно, просто небудет работать). Вторая стратегия предполагает, что система при загрузке самостоятельносканирует подключенное к ней оборудование и выбирает те драйверы, которые должныбыть подгружены для обслуживания найденного оборудования.Итак, примером резидентного драйвера может служить драйвер физического диска.Это объясняется тем, что диск является устройством оперативного доступа, поэтому кмоменту полной загрузки системы все должно быть готово для работы. А, например, всистемах, где пользователи редко используют сканер, держать соответствующий драйверрезидентно не имеет смысла, поскольку скорость работы самого устройства многомедленнее, чем скорость загрузки драйвера из внешней памяти в оперативную.Соответственно, драйвер сканера в этом случае служит одним из примеров нерезидентныхдрайверов, т.е.
тех драйверов, которые могут находиться в ОЗУ, а могут быть иотключенными, но они также динамически подгружаемые.В общем случае драйверы могут работать как в привилегированном режиме, так ив пользовательском.И, наконец, некоторой логической вершиной рассматриваемой структуры ОСбудут являться интерфейсы системных вызовов (API — Application Program Interface).Под системным вызовом будем понимать средство обращения процесса к ядруоперационной системы за выполнением той или иной функции (возможности, услуги,сервиса). Примерами системных вызовов являются открытие файла, чтение/запись в него,порождение процесса и т.д.
Отличие обращения к системному вызову от обращения кбиблиотеке программ заключается в том, что библиотечная программа присоединяется кисполняемому коду процесса, поэтому вычисление библиотечных функций будетпроисходить в рамках процесса. Обращение к системному вызову — это вызов техкоманд, которые инициируют обращение к системе.
Как уже отмечалось выше,инициацией обращения к операционной системе может служить либо прерывание, либоисполнение специальной команды. Следует понимать различие между системнымвызовом и библиотечной функцией. Например, осуществляя работу с файлом, имеетсявозможность работы с ним посредством обращения к системным вызовам либопосредством использования библиотеки ввода-вывода. В последнем случае в телопроцесса включаются дополнительные функции из данной библиотеки, а уже внутриданных функций происходит обращение к необходимым системным вызовам.Итак, существует несколько подходов к структурной организации операционныхсистем. Один из них можно назвать классическим: он использовался в первыхоперационных системах и используется до сих пор — это подход, основанный наиспользовании монолитного ядра.
В этом случае ядро ОС представляет собою единуюмонолитную программу, в которой отсутствует явная структуризация, хотя, конечно, вней есть логическая структуризация. Это означает, что монолитное ядро содержитфиксированное число реализованных в нем базовых функций, поэтому модификацияфункционального набора достаточно затруднительна (необходима практически полнаяпеределка ядра). Устройство монолитного ядра напоминает физическую организациюпервых компьютеров: в них также нельзя было выделить отдельные физическиефункциональные блоки — все было единым, монолитным и интегрированным друг сдругом.
Аналогичными свойствами обладают одноплатные компьютеры, у которых всенеобходимые компоненты (ЦПУ, ОЗУ и пр.) расположены на одной плате, и, чтобы что-тоизменить в этой конфигурации, требуются соответствующие инженерные знания.91На Рис. 73 проиллюстрирована структурная организация классической системыUnix. В данном случае ядро имеет фиксированный интерфейс системных вызовов.
В немреализовано управление процессами, а также драйвер файловой системы, реализована всялогика системы по организации работы с устройствами (которые можно разделить набайт-ориентированные и блок-ориентированные) и пр.УровеньпользователяПрограммы пользователяБиблиотекиИнтерфейс системных вызововФайловая подсистемаВзаимодействие междупроцессамиБуферПланировщикБайтБлокориентированные ориентированныеустройстваустройстваУправление памятьюДрайверы устройствУровень аппаратного обеспеченияМонолитное ядроАппаратное обеспечениеРис. 73. Структура ОС с монолитным ядром.Что касается достоинств данного подхода, то можно утверждать, что дляконкретного состава функциональности и логики ядра это будет наиболее эффективноерешение (т.к.
оно имеет минимальное количество интерфейсных сочленений, связанныхсо структуризацией). Однако при таком подходе отсутствует универсальность, ивнутренняя организация ядра рассчитана на конкретную реализацию. Недостаток в этомслучае заключается в необходимости перепрограммировать ядро при внесении изменений,и это является прерогативой разработчика. Соответственно, для внесения новойфункциональности пользователю системы приходится обращаться к разработчику, чтозачастую ведет к материальным затратам.Альтернативу данному подходу предлагают многослойные операционныесистемы.
В этом случае все уровни разделяются на некоторые функциональные слои.Здесь можно провести аналогию с моделью сетевых протоколов. Между слоями имеютсяфиксированные интерфейсы. Управление происходит посредством взаимодействиясоседних слоев. Поскольку любая структуризация снижает эффективность (программа,написанная в виде одной большой функции, работает быстрее, чем аналогичнаяпрограмма, разбитая на подпрограммы, т.к. любое обращение к подпрограмме ведет кнакладным расходам), то подобные системы обладают более низкой эффективностью.Итак, каждый слой предоставляет определенный сервис вышестоящему слою.Деление на слои является индивидуальным для каждой конкретной операционнойсистемы.
Это может быть слой файловой системы, слой управления внешнимиустройствами и т.д. Тогда модернизация подобных систем сводится к модернизациисоответствующих слоев. Вследствие чего проблема несколько упрощается, но при этомостаются ограничения на структурную организацию (например, имея слой файловой92…Файловая системаУправлениепроцессами…Драйвер устройстваДрайвер устройствасистемы, можно заменить его другим вариантом этого слоя, но использоватьодновременно две различные файловые системы не представляется возможным).Третий подход предлагает использовать микроядерную архитектуру (Рис. 74).Функционирование операционных систем подобного типа основывается на использованиит.н. микроядра. В этом случае выделяется минимальный набор функций (например,первичная обработка прерываний и некоторые функции управления процессами), которыевключаются в ядро.
Вся остальная функциональность представляются в виде драйверов,которые подключаются к ядру посредством некоторого стандартного интерфейса.…МикроядроАппаратураРис. 74. Структура ОС с микроядерной архитектурой.Такая архитектура получается хорошо расширяемой, она почти не имеет никакихограничений по количеству подключаемых драйверов и их функциональномунаполнению; требуется только соблюдение драйвером интерфейса для обращения кмикроядру.
Таким образом, данная архитектура представляется высоко технологичной,хорошо подходит для применения в современных многопроцессорных вычислительныхсистемах (например, в SMP-системах, тогда можно распределять драйверы по различнымпроцессорами и получать соответствующую эффективность).Микроядерная система может служить основой для надстройки над микроядромразных операционных систем. В частности, такой подход используется в ряде систем, воснове которых используется микроядро системы Mach.Итак, только что были продемонстрированы достоинства данного подхода.