Почему Linux называют монолитным ядром?

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

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


person Boolean    schedule 27.11.2009    source источник


Ответы (6)


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

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

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

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

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

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

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

Изменить

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

Linus "my first, and hopefully last flamefest" Torvalds

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

NB:

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

person Community    schedule 27.11.2009
comment
Интересно, что Линус Торвальдс находился под сильным влиянием MINIX Андю Таненбаума, когда создавал Linux. Однако MINIX основан на структуре микроядра, в то время как Linux использует монолитное ядро. - person Martin Liversage; 27.11.2009
comment
@Martin Liversage: Больше разочарован, чем повлиял :) Я отредактировал свой ответ, чтобы отразить это. - person Tim Post♦; 27.11.2009
comment
@DigitalRoss: Вы должны увидеть мой почтовый ящик после того, как ответите на это, Линус ручной по сравнению с энтузиастами Minix и Mach. - person Tim Post♦; 29.11.2009
comment
Связано по касательной: Почему Таненбаум ошибался в Таненбауме-Торвальдсе дебаты? - person yannis; 22.10.2012
comment
На самом деле Linux в наши дни представляет собой гибридное ядро, хотя с общим (своего рода) единым пространством памяти - IIRC во время 2.5.x, ядро ​​переключилось с гораздо более классического монолита на кучу процессов, запускаемых асинхронно / по событию, работающих в пространстве ядра (то, что было распространены в операционных системах, производных от Mach2.5, и стали официальной частью Mach в 4.0) - person p_l; 09.01.2013
comment
Монолитное ядро ​​энергоэффективно, чем микроядро? - person siva636; 20.02.2014
comment
@p_l Я думаю, что это довольно близко к тому времени, когда нам нужно поговорить о различиях между микро, монолитным и гибридным. Это может быть неплохой вопрос :) - person Tim Post♦; 04.02.2016
comment
Я чувствую, что преимущества и недостатки меняются местами (преимущество, а не преимущество) - person domenukk; 10.01.2017

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

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

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

person CesarGon    schedule 27.11.2009
comment
Можете ли вы объяснить, как монолитное ядро ​​может быть модульным, что, я полагаю, вы имеете в виду, что вы можете убрать некоторые из основных функций (например, драйверы) и сделать их отдельными модулями. - person James Black; 27.11.2009
comment
Windows определенно является монолитным ядром. - person Adam Rosenfield; 27.11.2009
comment
@James: Монолитное ядро ​​ОС может быть модульным, например Linux. Linux состоит из нескольких исполняемых файлов, которые работают как демоны и процессы; вы можете выбрать запускать одни из них или не запускать другие, выбирая разные конфигурации. Это модульность. Из Википедии: Большинство современных монолитных операционных систем, таких как OpenVMS, Linux, BSD и варианты UNIX, такие как FreeBSD, NetBSD, SunOS, AIX и MULTICS, могут динамически загружать (и выгружать) исполняемые модули во время выполнения. - person CesarGon; 27.11.2009
comment
@ Адам: Я не согласен. 16-битная Windows старого стиля была монолитным ядром, как Windows 95 и подобные. Но выпуски Windows на базе NT, включая все версии Server, а также Vista и 7, явно являются микроядром или, возможно, гибридом, в зависимости от того, какое определение микроядра вы используете. - person CesarGon; 27.11.2009
comment
То, что драйверы принтера не запускаются в ring0, не делает его микроядром :) - person caf; 27.11.2009
comment
@caf драйвер, работающий в кольце 0, также не делает его частью монолитного ядра ... Дело в том, имеет ли драйвер собственный процесс (работает с привилегиями или нет) или это функция внутри уникального процесса, который монолитный ядро есть. - person fortran; 27.11.2009
comment
@caf: Предлагаю вам взглянуть на en.wikipedia.org/wiki/Windows_NT_kernel и en.wikipedia.org/wiki/Comparison_of_operating_system_kernels. Вы увидите, что Windows NT и их преемники, включая Vista, 7 и серверы, описываются как гибридное ядро. Две большие подсистемы ОС работают полностью в пользовательском режиме, а не только драйвер принтера. :-) - person CesarGon; 27.11.2009
comment
Мой комментарий был несколько ироничным - гибридное обозначение кажется настолько бессодержательным, что бесполезным. - person caf; 28.11.2009

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

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

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

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


прогнозы Таненбаума

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

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

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

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


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

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

person Community    schedule 27.10.2014
comment
Да, я знаю, что Таненбаум имел в виду Херда. Но GNU перешла на Linux, поэтому формулировка забавная. - person artless noise; 28.10.2014
comment
Почему x86 не используется для мобильных устройств? Что делает другие архитектуры выгодными? - person Abdul; 18.08.2015
comment
Абдул: см. этот вопрос. - person artless noise; 18.08.2015
comment
Да, это важно. Сделать SOC x86 (система на кристалле) сложно. Не существует стандартного кода HDL для создания x86, который может купить поставщик SOC (Broadcom, Freescale и т. Д.). - person artless noise; 18.08.2015

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

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

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

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

person Bob    schedule 27.11.2009
comment
Если я когда-нибудь что-нибудь сделаю в пространстве ядра, я должен не забыть где-нибудь использовать гибридный керкель. ГКНР ;-) - person Jürgen A. Erhard; 26.12.2009
comment
Windows NT всегда была гибридной системой. Ядро может быть не совсем гибридным, но вы задаетесь вопросом, что считать его частью (например, winapi реализован как служба пользовательского пространства) - person p_l; 09.01.2013

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

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

person David Claridge    schedule 27.11.2009
comment
Проверьте свои источники. Википедия не процитирована. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/ - person monksy; 27.11.2009

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

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

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

person JIN007    schedule 09.03.2014
comment
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. - person Scott; 09.03.2014