- •Типы архитектур ядер операционных систем Монолитное ядро
- •Подгружаемые модули
- •Модульное ядро
- •Микроядро
- •Архитектура микроядра, основанная на программах-серверах, работающих в пользовательском режиме
- •Устройство
- •Достоинства и недостатки
- •Поколения
- •История
- •Экзоядро
- •Наноядро
- •Пикоядро
- •Гибридное ядро
- •Примеры
- •Комбинация разных подходов
- •Загружаемый модуль ядра
- •Преимущества
- •Вопросы лицензирования
- •Дело Linuxant
- •Бинарная совместимость
- •Безопасность
- •Основные принципы функционирования
- •Наиболее известные представители данного класса по
- •Идеология построения драйверов
- •Сегментирование памяти
- •Условия и принцип защиты
- •Взаимодействие уровней привилегий
- •Переключение стека
- •Страничная память
- •Механизм ключей защиты
- •Симуляция сегментации Адресация основанная на Capability
- •Режим супервизора
- •Режим гипервизора
- •Режим системного управления (smm)
- •Модель взаимодействия между цп и уровнями абстракции ос
- •Системный вызов
- •Привилегии
- •Интерфейс системных вызовов
- •Промежуточная библиотека
- •Примеры и инструменты
- •Типичные имплементации
- •Категории системных вызовов
- •Режим процессора и переключение контекста
Модульное ядро
Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем.
В отличие от «классических» монолитных ядер, модульные ядра, как правило, не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера. Вместо этого модульные ядра предоставляют тот или иной механизм подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом подгрузка модулей может быть как динамической (выполняемой «на лету», без перезагрузки ОС, в работающей системе), так и статической (выполняемой при перезагрузке ОС после переконфигурирования системы на загрузку тех или иных модулей).
Микроядро
Архитектура микроядра, основанная на программах-серверах, работающих в пользовательском режиме
Микроядро (microkernel) или μ-ядро (μ‑kernel) — ядро операционной системы, реализующее минимальный набор функций.
Устройство
Работа с микроядром осуществляется так же, как и с монолитным ядром — через системные вызовы.
Микроядра предоставляют лишь небольшой набор низкоуровневых примитивов/механизмов/компонентов/сервисов/модулей, например:
механизм для работы со страницами памяти (см. адресация памяти, виртуальная память) (выделение памяти процессам, обеспечение её изоляции/защиты);
механизм для работы с потоками (нитями) процессов (см. планировщик потоков (scheduling)) (выделение процессорного времени потокам процессов);
механизм для взаимодействия процессов (inter process communications, IPC) (обход изоляции памяти для организации обмена данными между процессами; реализуется через синхронный обмен сообщениями).
Остальные примитивы/функции/компоненты/сервисы/модули, например:
драйверы устройств;
реализации файловых систем;
стеки TCP/IP, USB и др.
работают в пространстве пользователя в виде отдельных процессов, взаимодействуют с ядром с помощью системных вызовов, взаимодействуют друг с другом с помощью IPC. В операционной системе с монолитным ядром эти компоненты работают в пространстве ядра в виде потоков ядра.
На процессорах архитектуры x86 используется так называемая кольцевая защита. Процессы пространства пользователя работают на третьем кольце (ring 3), не могут выполнять некоторые действия, доступные на нулевом кольце (ring 0). Ошибка в процессе пространства пользователя в худшем случае приведёт к завершению процесса.
Достоинства и недостатки
Преимущества ОС, построенной на микроядре, по сравнению с ОС, построенной на монолитном ядре:
простота реализации (ядро и компоненты реализуют чётко определённый функционал, поэтому размер их кода невелик);
простота отладки (компоненты — обычные процессы, поэтому могут отлаживаться с помощью инструментов, созданных для отладки процессов);
гарантированная безопасность (код небольшого размера можно проверить на корректность вручную или автоматически — с помощью математических рассуждений);
надёжность (в ОС с микроядерной архитектурой ошибка в одном из компонентов приведёт к завершению процесса компонента; в ОС с монолитным ядром отказ компонента приведёт к отказу ОС);
модульность (в микроядерной ОС большее число компонентов может быть запущено и остановлено по необходимости; например, для исправления ошибки можно внести изменения в код компонента, скомпилировать новый компонент, остановить старый и запустить новый).
Недостатки ОС, построенной на микроядре, по сравнению с ОС, построенной на монолитном ядре:
более низкая производительность (из-за накладных расходов на IPC).
Для того чтобы микроядерная ОС по скорости не уступала ОС, построенной на базе монолитного ядра, требуется очень аккуратно проектировать разбиение системы на компоненты и стараться минимизировать взаимодействие между ними. Таким образом, основная сложность при создании микроядерных ОС — необходимость очень аккуратного проектирования.
