Какой тип ядра является Windows NT более вероятным: монолитное или микроядро

Обновлено: 03.07.2024

> > Эта страница основана на статье в Википедии, написанной участниками (прочитано/отредактировано).
Текст доступен по лицензии CC BY-SA 4.0; могут применяться дополнительные условия.
Изображения, видео и аудио доступны по соответствующим лицензиям.

Расскажите друзьям о Wikiwand!

  • Введение
  • Оперативная память
  • Устройства ввода/вывода
  • Управление ресурсами
  • Управление памятью
  • Управление устройствами
  • Системные вызовы
  • Решения по проектированию ядра
    1. Защита
    2. Сотрудничество в процессе
    3. Управление устройствами ввода-вывода
  • Подходы к проектированию на уровне ядра
    1. Монолитные ядра
    2. Микроядра
    3. Монолитные ядра и микроядра
    4. Гибридные (или модульные) ядра
    5. Наноядра
    6. Экзоядра
  • История разработки ядра
    1. Ядра ранних операционных систем
    2. Операционные системы с разделением времени
    3. Амига
    4. Юникс
    5. ОС Mac
    6. Майкрософт Windows
    7. Инспектор IBM
    8. Разработка микроядер
  • См. также
  • Примечания
  • Ссылки
  • Источники
  • Дополнительная литература
  • Внешние ссылки

Предложить в качестве обложки

Вы хотите предложить это фото в качестве обложки для этой статьи?

Спасибо за помощь!

Ваши данные повлияют на выбор фото для обложки, а также данные других пользователей.

Спасибо, что сообщили об этом видео!

Этот браузер не поддерживается Wikiwand :(
Wikiwand требуется браузер с современными возможностями, чтобы обеспечить наилучшее качество чтения.
Пожалуйста, загрузите и используйте один из следующих браузеров:

Используемое вами расширение может препятствовать правильной загрузке статей Wikiwand.

Используемое вами расширение может препятствовать правильной загрузке статей Wikiwand.

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

Нажмите значок "Загрузки" на панели инструментов Safari, откройте первую загрузку в списке,
затем нажмите "Установить"

Хотя большинство современных операционных систем имеют много общих идей и концепций, философия, лежащая в основе ядер, часто различается. Linux использует более монолитное ядро ​​с некоторыми дополнениями пользовательского пространства, MacOS использует ядро ​​Mach, которое является микроядром, а Windows обеспечивает баланс с гибридным ядром.

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

Монолитные ядра

Самый старый и наиболее проверенный тип ядра — это монолитное ядро. Это означает, что процесс ядра в ОС (во всех смыслах и целях) представляет собой единый процесс, работающий в режиме ядра. Один процесс обрабатывает память, планирование, драйверы, системные вызовы и т. д.

Этот процесс может быть быстрым, но некоторые операции часто замедляются, так как в конечном счете это один процесс, управляющий операциями. Монолитные ядра также чрезвычайно чувствительны к сбоям. Если вы знакомы со старыми временами Windows 98 и подобными ей, вы помните «синие экраны смерти» (BSoD), которые возникали, когда вы подключали не то устройство или выполняли неправильную операцию с неправильным драйвером.

Современные системы, использующие монолитное ядро, как правило, требуют более тщательного тестирования, чтобы убедиться, что ядро ​​достаточно отказоустойчиво. Философия этих систем заключается в том, что вы дважды отмеряете и один раз вырезаете код ядра. Разумная работа не должна заставлять вас достигать условий, при которых система может сломаться. На практике это хорошо работает для чего-то вроде основного ядра Linux, но если сделать неправильно или установить неправильный драйвер, это может привести к крайне нестабильной работе системы.

Расширение монолитных ядер

Многие монолитные архитектуры работают с расширяемыми модулями. В Linux есть модули ядра, которые можно загружать и выгружать по мере необходимости. Эти модули по-прежнему существуют в режиме ядра и могут вывести из строя всю систему, если что-то пойдет не так.

Микроядра

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

Еще одним преимуществом этой системы является то, что каждый элемент является более модульным и более отказоустойчивым.Вы можете просто отключить или удалить процесс, если он слишком влияет на систему или дает сбой. Недостатком является то, что это увеличивает задержку связи между ядром и неядерными процессами, что может повлиять на удобство использования системы.

MacOS использует ядро ​​Mach, которое представляет собой микроядро. Моя настроенная система Linux может обеспечить примерно на 10% лучшую задержку звука по сравнению с моей машиной MacOS во время записи, несмотря на то, что аппаратное обеспечение машины Linux значительно менее мощное, но это достигается за счет гибкости. На современном оборудовании это улучшение не так уж заметно, за исключением очень специфических операций.

Гибридные ядра

Микроядра обладают рядом замечательных функций по сравнению с традиционными монолитными ядрами, но имеют свои особенности. Компромисс заключается в построении гибридного ядра. Ядро NT для Windows является примером настоящего гибридного ядра.

Гибридные ядра объединяют больше, чем микроядро, в монолитный процесс ядра, но используют сервисы в стиле микроядра для расширяемости. Некоторые чувствительные к сбоям части ядра находятся в пользовательском пространстве. Чтение неправильного файла из общего сетевого ресурса больше не может привести к остановке всего ядра в случае BSoD или паники ядра.

Нахождение баланса

Гибридные ядра пытаются сбалансировать функции обоих типов ядер, чтобы создать что-то более пригодное для обычного варианта использования. Микроядра, как правило, имеют более высокую отказоустойчивость за счет более высокой задержки. Микроядра также имеют определенные условия, которые могут привести к нестабильности или замедлению в большей степени, чем традиционные монолитные ядра (условия гонки). Что делает ядро, когда что-то вроде системы очередей переполняется двумя конфликтующими классами операций?

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

Современные проблемы требуют современных решений

Несмотря на то, что ядро ​​Linux представляет собой монолитное ядро, в нем реализованы некоторые идеи микроядер и гибридных ядер. Линус традиционно открыто высказывался о своих взглядах на ядра, но они подходят для текущей архитектуры ядра. Когда Linux появился, он не был построен с избытком ресурсов, которые у нас есть в настоящее время. Монолитное ядро ​​было дешевле в вычислительном отношении за счет того, что некоторые задачи были немного сложнее.

Многие задачи ядра в Linux были тем или иным образом выгружены из ядра, в то время как другие остались. FUSE позволяет реализовать множество файловых систем в пользовательском пространстве, что означает, что сбой является проблемой приложения, а не проблемы ядра. Эта странная проблема с версиями NTFS теперь является ошибкой сегментации, а не паникой ядра.

MacOS взяла Mac OS 9 и полностью переделала ее с новым микроядром (тот, который, возможно, не был прославленным эмулятором Motorola 68000 с дополнительными шагами) и новым пользовательским пространством на основе BSD. У старой системы были свои достоинства, но она просто не могла угнаться за ней. Даже Microsoft переместила типы ядра с переходом от Windows 98 и Windows ME к Windows 2000, что ознаменовало начало современной эры NT.

Что работает лучше всего?

Микроядра гораздо более устойчивы к сбоям, чем монолитные ядра, при прочих равных условиях. Хорошее микроядро устойчиво к сбою драйвера, который приведет к выходу из строя Windows или Linux. С другой стороны, микроядро также медленнее и менее эффективно при вводе-выводе и других операциях. В современных системах это влияние обычно не так заметно.

Мой компьютер с Linux записывает звук с задержкой на 10 % меньше, чем у моего Mac, при той же скорости буферизации, поскольку между ядром и аудиодрайвером меньше перекрестных помех. Когда все оптимизировано, я не вижу никаких изменений в общей стабильности. Если ваше ядро ​​​​постоянно дает сбой, у вас, вероятно, есть проблемы похуже, чем отказоустойчивость. Система MacOS достаточно хороша для работы со звуком, и усилия, необходимые для того, чтобы довести мою машину с Linux до нужного уровня, не окупятся для большинства обычных пользователей.

Гибридные ядра пытаются найти баланс между двумя подходами. Я использую Windows только для работы, но я снова и снова наблюдал, как драйверы зависали, в то время как остальная часть ОС восстанавливала свою работоспособность без сбоев. Баланс означает меньшую задержку в определенных операциях, с которыми Mac может столкнуться, но с немного большей стабильностью, чем у машины Linux с экспериментальными драйверами.

Значения типов

Монолитные ядра по своей сути требуют лучшего тестирования и лучшего подхода, чтобы избежать остановок. Микроядра требуют лучшего тестирования на задержку и попадание в пропускную способность, чем другие типы. Гибридные ядра могут наклоняться как в лучшую, так и в худшую сторону. Каждый тип требует уравновешивания, но некоторые части действия проще, чем другие.

Linux требует, чтобы код был лучше за счет разработчиков, которые должны быть гораздо более осторожными в отношении типов драйверов, которые они используют. Экспериментальные драйверы могут легко вывести из строя всю операционную систему. Компьютеры Mac более устойчивы к сбоям, но имеют условия, при которых они также могут давать сбои из-за спин-блокировок между конфликтующими драйверами и приложениями, попирающими одни и те же операции ядра. На компьютерах с Windows эти подходы смешиваются, и в результате одни операции имеют преимущества как монолитного, так и микроядерного подхода, а другие имеют недостатки обоих.

Ни один тип не является правильным решением для каждой проблемы, но монолитное ядро ​​обеспечивает скорость в большинстве ситуаций, микроядра обеспечивают надежность, а гибридное ядро ​​обеспечивает сочетание. Другая сторона этого заключается в том, что монолитные ядра могут быть менее стабильными, микроядра, как правило, медленнее, а гибридные ядра могут быть немного более изменчивыми в зависимости от того, приносит ли монолитное или микроядерное преимущество или вредит отдельному процессу.

Монолитные ядра поощряют более консервативный подход к драйверам и программированию ядра, в то время как микроядра позволяют экспериментировать с неудобными незначительными ошибками, а не с паникой ядра. Гибридные ядра зависят от того, какая часть ядра передается на аутсорсинг, а какая остается основным компонентом. У каждого типа ядра есть свой набор преимуществ и недостатков.

У Windows есть микроядро или монолитное ядро?

Как и большинство систем Unix, Windows является монолитной операционной системой. Почему? Поскольку пространство памяти, защищенное режимом ядра, совместно используется операционной системой и кодом драйвера устройства.

Но не верьте мне на слово, из Microsoft Curriculum Resource Kit (написанного Марком Руссиновичем и Дейвом Соломоном, авторами Windows Internals):

Является ли Windows ОС на основе микроядра?

  • Нет — не используется академическое определение (компоненты ОС и драйверы работают в своих собственных частных адресных пространствах, расположенных на уровне примитивного микроядра)
  • Все компоненты ядра находятся в общем общем адресном пространстве
  • Поэтому нет защиты между ОС и драйверами

Почему не чистое микроядро?

  • Производительность: отдельные адресные пространства означают переключение контекста для вызова основных служб ОС.
  • Большинство других коммерческих ОС (Unix, Linux, VMS и т. д.) имеют одинаковую структуру.

Но у нее есть некоторые атрибуты микроядерной ОС

  • Персонажи ОС, работающие в пользовательском пространстве как отдельные процессы
  • Компоненты режима ядра не взаимодействуют со структурами данных друг друга.
  • Использовать формальные интерфейсы для передачи параметров и доступа и/или изменения структур данных

Поэтому термин «модифицированное микроядро»

Дополнительная информация о ядре Windows NT 3.51 на сайте TechNet содержит более важную информацию:

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

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

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

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

Может ли кто-нибудь объяснить на примерах разницу между монолитным и микроядром? Также другие классификации ядра?

7 ответов 7

Монолитное ядро ​​— это один большой процесс, работающий полностью в одном адресном пространстве. Это один статический двоичный файл. Все службы ядра существуют и выполняются в адресном пространстве ядра. Ядро может напрямую вызывать функции. Примеры ОС на основе монолитного ядра: Unix, Linux.

В микроядрах ядро ​​разбито на отдельные процессы, называемые серверами. Некоторые из серверов работают в пространстве ядра, а некоторые — в пространстве пользователя. Все серверы хранятся отдельно и работают в разных адресных пространствах. Серверы вызывают «сервисы» друг у друга, отправляя сообщения через IPC (межпроцессное взаимодействие). Такое разделение имеет то преимущество, что в случае сбоя одного сервера другие серверы могут работать эффективно. Примеры ОС на базе микроядра: Mac OS X и Windows NT.

И Mac OS X, и Windows представляют собой гибридное ядро, поскольку они более тесно связаны с монолитным ядром. примерами микроядер могут быть: Mach QNX AmigaOS Minix

GNU Hurd — отличный пример ОС, работающей на микроядре. Он все еще находится в активной разработке, и некоторые популярные дистрибутивы Linux имеют порт Hurd (Debian/Hurd, Arch Hurd и т. д.).

Монолитный дизайн ядра намного старше идеи микроядра, появившейся в конце 1980-х годов.

Ядра Unix и Linux являются монолитными, а QNX, L4 и Hurd — микроядрами. Mach изначально был микроядром (не Mac OS X), но позже был преобразован в гибридное ядро. Minix (до версии 3) не был чистым микроядром, поскольку драйверы устройств компилировались как часть ядра.

Монолитные ядра обычно быстрее микроядер. Первое микроядро Mach было на 50 % медленнее, чем большинство монолитных ядер, а более поздние, такие как L4, были только на 2 % или 4 % медленнее, чем монолитные конструкции.

Монолитные ядра имеют большой размер, а микроядра небольшие по размеру — обычно они помещаются в кэш L1 процессора (микроядра первого поколения).

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

Поскольку драйверы устройств монолитных ядер находятся в пространстве ядра, монолитные ядра менее безопасны, чем микроядра, а сбои (исключения) в драйверах могут привести к сбоям (отображаемым в Windows как BSOD). Микроядра более безопасны, чем монолитные ядра, поэтому чаще используются в военных устройствах.

Монолитные ядра используют сигналы и сокеты для реализации межпроцессного взаимодействия (IPC), микроядра используют очереди сообщений. Микроядра 1-го поколения не очень хорошо реализовывали IPC и были медленными при переключении контекста — вот что вызывало их низкую производительность.

Добавление новой функции в монолитную систему означает перекомпиляцию всего ядра или соответствующего модуля ядра (для модульных монолитных ядер), тогда как с микроядрами вы можете добавлять новые функции или исправления без перекомпиляции.

упоминая MINIX, какую версию вы имеете в виду? В третьей версии драйверы устройств и файловая система отделены от ядра.

@Nik-Lz: Не программа, а функции. Программы обычно работают в пользовательском пространстве. Если вы хотите выполнять код в пространстве ядра, у вас есть два варианта: встроить его в ядро ​​или загрузить с помощью модуля ядра. ссылка

Монолитное ядро

Все части ядра, такие как планировщик, файловая система, управление памятью, сетевые стеки, драйверы устройств и т. д., поддерживаются в одном модуле в ядре в монолитном ядре

Преимущества

Недостатки

• Небезопасность при сбоях • Отсутствие гибкости при переносе • Взрывной рост размера ядра

Примеры • MS-DOS, Unix, Linux

Микроядро

В ядро ​​помещаются только очень важные части, такие как IPC (межпроцессное взаимодействие), базовый планировщик, базовая обработка памяти, базовые примитивы ввода-вывода и т. д. Коммуникация происходит посредством передачи сообщений. Другие поддерживаются как серверные процессы в пространстве пользователя

Преимущества

• Устойчивость к сбоям, портативность, меньший размер

Недостатки

• Медленная обработка из-за дополнительной передачи сообщений

Примеры •Windows NT

1. Монолитное ядро ​​(чисто монолитное): все

Все службы ядра из одного компонента

(-) добавление/удаление невозможно, меньше/нулевая гибкость

(+) улучшена межкомпонентная коммуникация

например. :- Традиционный Unix

2. Микроядро: несколько

несколько служб (управление памятью, управление ЦП, IPC и т. д.) из основного ядра, другие службы (управление файлами, управление вводом-выводом и т. д.) из разных уровней/компонентов

Раздельный подход [Некоторые службы находятся в привилегированном (ядерном) режиме, а некоторые — в обычном (пользовательском) режиме]

(+)гибкий для изменений/обновлений

3.Модульное ядро ​​(модульное монолитное): большинство

Сочетание микро- и монолитного ядра

Набор модулей -- модули могут быть --> статическими + динамическими

Драйверы представлены в виде модулей

например. :- Современная ОС Linux

Двумя крайними точками в спектре конструкций ядер являются монолитные ядра и микроядра.

Например, (классическое) ядро ​​​​Linux является монолитным ядром (как и все коммерческие ОС на сегодняшний день, хотя они могут утверждать обратное);

В том смысле, что его код представляет собой один файл C, порождающий единый процесс, реализующий все вышеперечисленные сервисы.
Чтобы проиллюстрировать инкапсуляцию ядра Linux, отметим, что ядро ​​Linux даже не имеет доступа ни к одной из стандартных библиотек C. Действительно, ядро ​​Linux не может использовать элементарные функции библиотеки C, такие как printf. Вместо этого он реализует собственную функцию печати (называемую печатью).

Изолированность ядра Linux и самодостаточность обеспечивают ядру Linux его главное преимущество: ядро ​​находится в едином адресном пространстве1, что позволяет всем функциям взаимодействовать максимально быстро, не прибегая к передаче сообщений любого типа. В частности, монолитное ядро ​​реализует все драйверы устройств системы.

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

Читайте также: