Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Linus "my first, and hopefully last flamefest" Torvalds

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

Примечание:

Когда я говорю "Minix", я не имею в виду Minix 3.Кроме того, когда я упоминаю HURD, я имею в виду (в основном) микроядро Mach.В мои намерения не входит принижать недавнюю работу других людей.

Другие советы

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

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

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

От Википедия:

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top