Хелпикс

Главная

Контакты

Случайная статья





2. Основные функции ядра. 2.1 Монолитное ядро



2. Основные функции ядра

Ядро операционной системы, как правило, содержит программы для реализации следующих функций:

· обработка прерываний;

· создание и уничтожение процессов;

· переключение процессов из состояния в состояние;

· диспетчирование;

· приостановка и активизация процессов;

· синхронизация процессов;

· организация взаимодействия между процессами;

· манипулирование блоками управления процессами;

· поддержка операций ввода-вывода;

· поддержка распределения и перераспределения памяти;

· поддержка работы файловой системы;

· поддержка механизма вызова-возврата при обращении к процедурам;

· поддержка определенных функций по ведению учета работы машины.

 

 

2. 1 Монолитное ядро

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

Достоинства такого подхода разработки ядра:

· Скорость работы

· Упрощённая разработка модулей.

 

Недостатки такого подхода разработки ядра:

· Поскольку всё ядро работает в одном адресном пространстве, сбой в одном из компонентов может нарушить работоспособность всей системы.

В этом случае компоненты операционной системы являются не самостоятельными модулями, а составными частями одной большой программы. Такая структура операционной системы называется монолитным ядром (monolithic kernel). Монолитное ядро операционной системы представляет собой набор процедур, каждая из которых может вызвать каждую. Все процедуры работают в привилегированном режиме.

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

Если в ОС с таким ядром вылетит какой-либо процесс, то он может быть автоматически перезапущен, а с цельным ядром в случае вылетания процесса, входящего в состав ядра, надо перезапускать всё ядро. В частности, монолитное ядро операционной системы более производительно, чем микроядро, поскольку состоит не из множества процессов, «общающихся» между собой, а работает как один большой процесс.

Монолитным ядром является еще и Linux. Оно оптимизировано для более высокой производительности с минимальными контекстными переключениями. Такая архитектура упрощает поддержку кода ядра для разработчиков, но требует перекомпиляции ядра при добавлении новых устройств. Следует отметить, что описанные здесь различия являются «классическими», на практике монолитные ядра могут поддерживать модульность (что зачастую и происходит), а микроядра могут требовать перекомпиляции.

Примеры операционных систем, использующих ядро данного типа:

· Традиционные ядра UNIX(сетевые операционные системы), такие как BSD и Linux;

· MS-DOS.

 

 

2. 2 Модульное ядро

Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем компьютеров.

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

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

Достоинства такого подхода разработки ядра:

· Устойчивость:

1. к сбоям оборудования

2. к ошибкам в компонентах системы.

Недостатки такого подхода разработки ядра:

· Передача данных между процессами требует дополнительных расходов процессорного времени.

Остальные компоненты системы взаимодействуют друг с другом путем передачи сообщений через микроядро.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.