Микроядро

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 13:41, 15 мая 2019.
Рисунок 1 — Архитектура микроядра, основанная на программах-серверах, работающих в пользовательском режиме

Микроядро (англ. microkernel) или μ-ядро (англ. μ‑kernel) — ядро операционной системы, реализующее минимальный набор функций.

История

Микроядра типа ядра ОС MINIX и GNU Hurd развиваются гораздо медленнее, чем Linux и ядро систем семейства BSD. По словам создателя MINIX 3, Эндрю Таненбаума, он пытается «построить сверхнадёжную систему, которая может использоваться в том числе на серверах, которым необходимы годы безотказной работы»[Примечания 1].

Классическим примером микроядерной ОС является Symbian OS. Это пример распространенной и отработанной микроядерной (a начиная c версии Symbian OS v8.1, и наноядерной) операционной системы.

Создателям Symbian OS удалось совместить эффективность и концептуальную стройность, несмотря на то, что современные версии этой системы предоставляют обширные возможности, в том числе средства для работы c потоковыми данными, стеками протоколов, критичными к латентности ядра, графикой и видео высокого разрешения. Разработчики Symbian вынесли практически все прикладные (т. e. выходящие за пределы компетенции ядра) задачи в модули-серверы, функционирующие в пользовательском адресном пространстве.

В ОС Windows NT версий 3.х микроядерная архитектура с сервисным процессом использовалась для подсистемы графики и пользовательского интерфейса. В частности, драйвер графической аппаратуры загружался в контекст сервисного процесса, а не ядра. Начиная с версии 4, от этого отказались, сервисный процесс сохранился только для управления консольными окнами командной строки, а собственно графическая подсистема вместе с драйвером аппаратуры (в том числе трёхмерной графики) переместилась в специально обособленный регион ядра ОС.

ОС Windows CE (и созданные на её основе сборки, такие, как Windows Mobile), будучи практически полностью совместимой (как подмножество) с Windows NT по вызовам и методам программирования приложений, тем не менее полностью отличается от Windows NT по внутренней архитектуре и является микроядерной ОС с выносом всех драйверов устройств, сетевых стеков и графической подсистемы в сервисные процессы.

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

Устройство

Работа с микроядром осуществляется так же, как и с монолитным ядром — через системные вызовы.

Микроядра предоставляют лишь небольшой набор низкоуровневых примитивов/механизмов/компонентов/сервисов/модулей (см. рисунок 1), например:

Остальные примитивы/функции/компоненты/сервисы/модули, например:

работают в пространстве пользователя в виде отдельных процессов, взаимодействуют с ядром с помощью системных вызовов, взаимодействуют друг с другом с помощью IPC. В операционной системе с монолитным ядром эти компоненты работают в пространстве ядра в виде потоков ядра.

На процессорах архитектуры x86 используется так называемая кольцевая защита. Процессы пространства пользователя работают на третьем кольце (англ. ring 3), не могут выполнять некоторые действия, доступные на нулевом кольце (англ. ring 0). Ошибка в процессе пространства пользователя в худшем случае приведёт к завершению процесса.

Достоинства и недостатки

Преимущества ОС, построенной на микроядре, по сравнению с ОС, построенной на монолитном ядре:

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

Недостатки ОС, построенной на микроядре, по сравнению с ОС, построенной на монолитном ядре:

  • более низкая производительность (из-за накладных расходов на IPC).

Для того чтобы микроядерная ОС по скорости не уступала ОС, построенной на базе монолитного ядра, требуется очень аккуратно проектировать разбиение системы на компоненты и стараться минимизировать взаимодействие между ними. Таким образом, основная сложность при создании микроядерных ОС — необходимость очень аккуратного проектирования.

Поколения

Микроядра условно делят на поколения. Микроядра разных поколений отличаются устройством и технологическими решениями.

Микроядра первого поколения
  • Микроядро Mach от университета Карнеги — Меллон (CMU).
  • Микроядро ОС ChorusOS от института INRIA.
Микроядра второго поколения
  • Микроядро из ОС Minix от Эндрю Таненбаума (свободный университет Амстердама).
  • L3 от Йохена Лидтке.
  • L4/x86 от Йохена Лидтке.
Микроядра третьего поколения

Драйвер устройства как элемент микроядра

Драйверы устройств часто выполняют прямой доступ к памяти (DMA) и поэтому могут выполнять запись в произвольные места физической памяти, включая различные структуры данных ядра. Хотя запуск драйвера устройства в пользовательском пространстве не обязательно уменьшает ущерб, который может причинить неправильный драйвер, на практике это выгодно для стабильности системы при наличии неисправных (а не злонамеренных) драйверов: нарушения доступа к памяти со стороны самого кода драйвера ( в отличие от устройства) все еще может быть перехвачено аппаратным обеспечением управления памятью. Кроме того, многие устройства не поддерживают DMA, их драйверы нельзя доверять, запустив их в пространстве пользователя. В последнее время все большее количество компьютеров оснащаются IOMMU , многие из которых можно использовать для ограничения доступа устройства к физической памяти. Это также позволяет ненадежным драйверам пользовательского режима.

Драйверы пользовательского режима на самом деле предшествуют микроядрам. Система Michigan Terminal System (MTS), в 1967 году, при поддержке пользовательских драйверов (включая поддержку файловой системы), первую операционную систему , которая будет разработана с этой возможностью. Исторически сложилось так, что драйверы были меньшей проблемой, так как число устройств было небольшим и в любом случае им доверяли, поэтому их размещение в ядре упростило конструкцию и позволило избежать потенциальных проблем с производительностью. Это привело к традиционному стилю «драйвер в ядре» в Unix, Linux и Windows NT. С распространением различных видов периферийных устройств объем кода драйвера возрос и в современных операционных системах доминирует в ядре по размеру кода.

Современные микроядра

  • Fiasco.OC микроядро реализованное на языке программирования C++, построенное по концепции Everything Is Object. Поддерживает архитектуры ARM, x86, ppc, sparc v8, а так же современные отладочные средства и платформы на подобие Pandaboard и Beagleboard. Самостоятельно микроядро функционировать не может как следствие у него должно быть окружение - набор прикладных программ и модулей реализующих полезный функционал. Таким окружением для микроядра Fiasco.OC является L4Re[8] (L4 Runtime Environment). В его состав входят паравиртуализированный L4Linux - позволяющий использовать скомпилированное для Linux прикладное ПО, DDEKit - набор исходного кода (wrapper), позволяющий использовать драйвера ОС Linux, а так же большой набор библиотек и прикладных программ, адаптированных для запуска поверх микроядра. Среди таких приложений стоит выделить TCP/IP Стек LwIP с набором драйверов сетевых устройств, доверенный графический интерфейс (GUI) Nitpicker и графическую подсистему Mag. Это все позволяет создавать на основе микроядра Fiasco.OC современные аппаратно-программные комплексы.
  • Genode Framework является Open Source проектом выпускников TUD. Его разработчики ставили перед собой задачу создания унифицированного окружения для множества разных микроядерных проектов. Важными качествами этого проекта является наличие доверенного графического интерфейса пользователя (GUI), поддержка Qt, а так же специальных возможностей микроядер. Например, для микроядра Fiasco.OC разработан паравиртуализированный L4Linux, представляющий собой ядро Linux запускаемое в пространстве пользователя. Фреймворк Geode позволяет использовать L4Linux в свое окружении. Аналогично присутствует поддержка L4Linux для ядра OKL4. Кроме того Genode Фреймворк содержит в себе DDE_Kit для использования исходного кода драйверов Linux. Genode поддерживает разнообразное количество ядер, таких как Fiasco, Fiasco.OC, OKL4, Pistachio, HelenOS, Linux. Кроме того оно содержит собственное ядро с минимальным функционалом называемым base-hw. С недавних пор Genode стал способен заменить полностью Linux для сборки, то есть сборку и отладку окружения можно полностью производить на Genode. Помимо этого Genode поддерживает механизмы аппаратной виртуализации ARM TrustZone, что позволяет использовать этот фреймворк для создания доверенных решений.
  • Микро гипервизор NOVA (NOVA OS Virtualization Architecture) является гипервизором первого порядка (bare metal), то есть запускается напрямую на аппаратной платформе. Он разработан выпускниками TUD и сейчас развивается в Intel. В основе этого микрогипервизора находится микроядерная ОС архитектуры L4. Архитектура системы такова, что позволяет исполнять прикладное ПО параллельно с виртуальными машинами. Благодаря этому на основе гипервизора NOVA можно создавать доверенные решения, в которых доверенное ПО (например криптография) будет исполняться в отдельном, жестко отделенном от виртуальных машин окружении. Таким окружением например может быть фреймворк Geode, так как в Genode есть поддержка этого гипервизора. Помимо Genode NOVA поддерживает собственное окружение NOVA User Land (NUL).

Наноядро

Термин "микроядро" иногда используют вместо термина "наноядро" или "пикоядро". Это не совсем правильно. Термин наноядро (нанокернел) или пикоядро (пикокернел) исторически называют:

  • Ядро, в котором общий объем кода ядра, то есть кода, выполняемого в привилегированном режиме оборудования, очень мал. Термин picokernel иногда использовался, чтобы подчеркнуть малый размер. Термин наноядро был введен Джонатаном С. Шапиро в статье The KeyKOS NanoKernel Architecture. Это был сардонический ответ Маху, который утверждал, что является микроядром, в то время как Шапиро считал его монолитным, по существу неструктурированным и более медленным, чем системы, которые он стремился заменить. Последующее повторное использование термина и реакция на него, включая чеканку пикокерна, позволяют предположить, что этот пункт был в значительной степени упущен. Оба наноядро и пикокернел (пикоядро) впоследствии стали иметь то же значение, которое выражено термином микроядро.
  • Уровень виртуализации под операционной системой, который более правильно называется гипервизором .
  • Уровень аппаратной абстракции, который формирует низший уровень ядра, иногда используется, чтобы обеспечить в реальном времени функциональность обычных операционных систем, как, например, ОС ADEOS. [Источники 1]

См. также

Виды ядер
Операционные системы, построенные на основе микроядер

Примечания

Ссылки

  • Интервью с Эндрю Таненбаумом [Электронный реcурс]: Интервью / Дата обращения: 10.12.2016. - Режим доступа: http://ylsoftware.com/?action=news&na=viewfull&news=222
  • Микроядерные Операционные Системы [Электронный реcурс]: Современные микроядра / Дата обращения: 10.12.2016. - Режим доступа: http://bourabai.ru/os/microkernel.htm

Источники

  1. Microkernel // Wikimedia Foundation, Inc. [2019]. Дата обновления: 06.03.2019. URL: https://en.wikipedia.org/wiki/Microkernel (дата обращения: 13.05.2019).