Почему Linux называют монолитным ядром? - PullRequest
188 голосов
/ 27 ноября 2009

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

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

Ответы [ 7 ]

263 голосов
/ 27 ноября 2009

Монолитное ядро ​​- это ядро, в котором все службы (файловая система, VFS, драйверы устройств и т. Д.), А также основные функции (планирование, распределение памяти и т. Д.) Представляют собой сплоченную группу, разделяющую одно пространство. Это прямо противоположно микроядру .

Микроядро предпочитает подход, в котором основные функции изолированы от системных служб и драйверов устройств (которые в основном являются просто системными службами). Например, VFS (виртуальная файловая система) и файловые системы блочных устройств (например, minixfs) - это отдельные процессы, которые выполняются за пределами пространства ядра и используют IPC для связи с ядром, другими службами и пользовательскими процессами. Короче говоря, если это модуль в Linux, то это служба в микроядре, что указывает на изолированный процесс.

Не путайте термин modular kernel с чем-либо, кроме монолитного. Некоторые монолитные ядра могут быть скомпилированы для модульности (например, Linux), важно то, что модуль вставляется и запускается из того же пространства, которое обрабатывает функциональность ядра (пространство ядра).

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

Недостаток микроядра в том, что асинхронный обмен сообщениями IPC может стать очень трудным для отладки, особенно если реализовано fibrils . Кроме того, просто отслеживание проблемы FS / записи означает проверку процесса пользовательского пространства, службы блочных устройств, службы VFS, службы файловой системы и (возможно) службы PCI. Если вы ничего не знаете, самое время взглянуть на сервис IPC. Это часто проще в монолитном ядре. GNU Hurd страдает от этих проблем отладки ( ссылка ). Я даже не собираюсь вдаваться в контрольные точки при работе со сложными очередями сообщений. Микроядра не для слабонервных.

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

Я использую Linux (монолитный) в производстве. Тем не менее, большая часть моего обучения, взлома или возни с разработкой ядра идет в микроядро, в частности HelenOS .

Редактировать

Если вы добрались до этого из-за моего очень многословного ответа, вам, вероятно, будет интересно почитать дискуссию « Великий Торвальдс-Таненбаум о дизайне ядра ». Это даже смешнее читать в 2013 году, более чем через 20 лет после его появления. Самой смешной была подпись Линуса в одном из последних сообщений:

Linus "my first, and hopefully last flamefest" Torvalds

Очевидно, что это сбылось не больше, чем предсказание Таненбаума о том, что x86 скоро устареет.

Примечание:

Когда я говорю «Minix», я не имею в виду Minix 3. Кроме того, когда я упоминаю The HURD, я ссылаюсь (главным образом) на микроядро Маха. Я не намерен унижать недавнюю работу других.

21 голосов
/ 19 февраля 2016

Вот мой короткий ответ ... Найдите изображение ниже.Вы получите четкое представление о ядре обоих типов

enter image description here

13 голосов
/ 27 ноября 2009

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

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

В любом случае ОС может быть очень модульной.

8 голосов
/ 27 ноября 2009

Из Википедия :

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

В последних версиях Windows, с другой стороны, используется Гибридное ядро ​​.

Гибридное ядро ​​- это архитектура ядра, основанная на сочетании аспектов архитектуры микроядра и монолитного ядра, используемых в компьютерных операционных системах. Категория является спорным из-за сходства с монолитным ядром; термин был отклонен некоторыми как простой маркетинг. Традиционные категории ядер - это монолитные ядра и микроядра (с наноядрами и экзокернами, которые рассматриваются как более экстремальные версии микроядер).

7 голосов
/ 27 октября 2014

; tl-dr - нет, Linux всегда монолитен.

Linux modules может означать modular в некотором смысле. Как уже отмечалось, монолитное обычно представляет собой микроядро против монолитного ядра. Традиционное микроядро имеет только эти функции,

  1. Планирование
  2. Управление памятью
  3. Межпроцессное взаимодействие

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


предсказания Таненбаума

  1. Микроядра - это будущее
  2. x86 вымрет, а архитектуры RISC будут доминировать на рынке
  3. (через 5 лет) все будут использовать бесплатную ОС GNU

Программисты для ПК и серверов могут смеяться, но два и три, безусловно, верны для большинства существующих сотовых телефонов. Таненбаум был бы прав во всех отношениях, если бы BlackBerry QNX был успешным.

Кроме того, многие L1-гипервизоры имеют микроядро снизу. Это потому, что гипервизор обычно мало что делает с переключателем context .

Видимо, три предсказывают успех Linux. ; -)


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

Основным достижением является использование программирования без блокировки , чтобы избежать конфликтов в монолитном ядре. Это позволяет избежать блокировки в монолитном ядре, а также снижает накладные расходы IPC. В последнее время все процессоры расширяют свои ISA для включения лучших примитивов для алгоритмов без блокировки . Таким образом, Linux, вероятно, останется монолитным ядром в течение некоторого времени.

5 голосов
/ 27 ноября 2009

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

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

2 голосов
/ 09 марта 2014

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

Думаю, этот пост поможет вам лучше понять концепцию.

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html

...