Чому Linux називають монолітним ядром?


208

Я читав, що Linux - це монолітне ядро. Чи означає монолітне ядро ​​компіляцію та зв’язування повного коду ядра у виконуваний файл?

Якщо Linux здатний підтримувати модулі, чому б не розбити всі підсистеми на модулі та завантажити їх при необхідності? У цьому випадку ядро ​​не повинно завантажувати всі модулі спочатку і може підтримувати індекс функцій у модулі та завантажувати їх при необхідності.

Відповіді:


290

Монолітне ядро ​​- це ядро, де всі сервіси (файлова система, VFS, драйвери пристроїв тощо), а також основна функціональність (планування, розподіл пам’яті тощо) - це тісна в’язана група, що розділяє один і той же простір. Це прямо протистоїть мікроядер .

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

Не плутайте термін модульне ядро як будь-що, крім монолітного. Деякі монолітні ядра можуть бути складені модульними (наприклад, Linux). Важливо те, що модуль вставляється і працює з того самого простору, який обробляє основні функціональні можливості (простір ядра).

Перевага мікрокереля полягає в тому, що будь-яка невдала служба може бути легко перезапущена, наприклад, немає зупинки ядра, якщо коренева файлова система кидає аборт. Це також може розглядатися як недолік, оскільки він може приховати досить критичні помилки (або зробити їх здатися не дуже критичними, оскільки проблема, здається, постійно виправляється). Це сприймається як велика перевага в сценаріях, коли ви просто не можете зручно щось виправити після його розгортання.

Недоліком мікроядра є те, що асинхронний обмін повідомленнями IPC може стати дуже важким для налагодження, особливо якщо реалізовані фібрили . Крім того, лише відстежувати проблему FS / write означає вивчення процесу простору користувача, служби блокового пристрою, послуги VFS, сервісу файлової системи та (можливо) послуги PCI. Якщо у вас з’явилося пробіл, настав час переглянути послугу IPC. Це часто простіше в монолітному ядрі. GNU Hurd страждає від цих проблем налагодження ( посилання ). Я навіть не збираюся вступати в контрольну точку, коли маю справу зі складними чергами повідомлень. Мікрохвильовки не для слабкого серця.

Найкоротший шлях до працездатного стабільного ядра - це монолітний підхід. Будь-який підхід може запропонувати POSIX-інтерфейс, де дизайн ядра стає малоцікавим для когось, хто просто хоче написати код для роботи на будь-якій заданій конструкції.

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

Редагувати

Якщо ви отримали це далеко через мою дуже завзяту відповідь, вам, мабуть, буде весело, читаючи " Велику дискусію Торвальда-Таненбаума про дизайн ядра ". Це навіть смішніше читати у 2013 році, через 20 років після того, як це вийшло. Найсмішнішою частиною був підпис Лінуса в одному з останніх повідомлень:

Linus "my first, and hopefully last flamefest" Torvalds

Очевидно, що це не справдилося більше, ніж передбачення Таненбаума, що x86 скоро застаріє.

Примітка:

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


5
Цікаво, що на Лінуса Торвальда був сильно вплинутий MINIX Andewa Tanenbaum, коли він створив Linux. Однак MINIX базується на дизайні мікроядра, тоді як Linux використовує монолітне ядро.
Мартін Ліверсайз

2
@ Мартін Ліверсанс: Більше засмучений, ніж вплинув :) Я змінив свою відповідь, щоб це відобразити.
Tim Post

25
@DigitalRoss: Вам слід побачити мою папку "Вхідні" після відповіді на це, Лінус приручений в порівнянні з ентузіастами Minix і Mach.
Тім Пост


3
@p_l Я думаю, що це досить близько до часу, коли нам потрібно поговорити про відмінності між мікро, монолітом та гібридом. Це може бути досить хорошим питанням :)
Tim Post

15

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

У немонолітних операційних системах ядра, таких як Windows, велика частина самої ОС працює в режимі користувача.

У будь-якому випадку ОС може бути високомодульною.


9
Windows, безумовно, є монолітним ядром.
Адам Розенфілд,

7
@Adam: Я не згоден. 16-бітна Windows 16-бітного типу була монолітним ядром, як і Windows 95 тощо. Але випуски Windows на базі NT, включаючи всі версії сервера плюс Vista та 7, явно є мікроядерними або, можливо, гібридними, залежно від того, яке визначення поняття "microkernel" ви використовуєте.
CesarGon

8
Тільки тому, що драйвери принтерів не працюють у ring0, це не робить мікроядер :)
caf

7
@caf: Я пропоную вам поглянути на en.wikipedia.org/wiki/Windows_NT_kernel та en.wikipedia.org/wiki/Comppare_of_operating_system_kernels . Ви побачите, що Windows NT та їхні наступники, включаючи Vista, 7 та сервери, описуються як "гібридне ядро". Дві великі підсистеми ОС повністю працюють у режимі користувача, а не лише драйвер принтера. :-)
CesarGon

7
Мій коментар був дещо чіткий - що "гібридне" позначення здається таким інформаційним, що марним.
caf

10

; tl-dr - Ні, Linux завжди монолітний.

Модулі Linux можуть означати модульний в деякому сенсі. Як зазначають інші, монолітне зазвичай являє собою мікроядро проти монолітного ядра. Традиційний мікроядер має лише ці особливості,

  1. Планування
  2. Управління пам'яттю
  3. Міжпроцесовий зв’язок

У головному ядрі немає драйверів апаратних засобів , стеків протоколів , файлових систем , призупинення / відновлення , керування годинником тощо. Ці речі ідентичні будь-яким завданням користувача (хоча вони можуть мати різні привілеї через MMU / планувальник).


Прогнози Таненбаума

  1. Мікрохвильовки - це майбутнє
  2. x86 вимерти, а архітектура RISC домінуватиме на ринку
  3. (Через 5 років) усі матимуть безкоштовну ОС GNU

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

Також багато L1-гіпервізорів мають під собою мікроядро . Це тому, що гіпервізор зазвичай не робить багато, крім контекстного перемикання.

Мабуть, три прогнозують успіх Linux. ;-)


Аргументом для мікроядер є те, що всі монолітні підсистеми потребують синхронізації декількох значень одночасно. Для цього вони повинні використовувати замки і страждатимуть від закону Амдала, коли він поширюватиметься на паралельні архітектури. Лічильник полягає в тому, що мікроелементи призводять до безлічі повідомлень IPC.

Важливою розробкою є використання програмування без блокування для уникнення суперечок у монолітному ядрі. Це дозволяє уникнути блокування в монолітному ядрі, а також зменшити накладні витрати IPC. Останнім часом усі процесори розширюють свій ISA, щоб включити кращі примітиви для алгоритмів без блокування . Тож Linux, певно, залишиться монолітним ядром ще деякий час.


1
Так, я знаю, що Таненбаум мав на увазі Херда. Але GNU перейшов на Linux, тому формулювання є смішним.
невгамовний шум

Чому не вистачає використання x86 для мобільних пристроїв? Що робить інші архітектури вигіднішими?
Абдул


Так, це важливо. Складно зробити S86 x86 (система на мікросхемі). Існує не стандартний код HDL, щоб зробити x86, який може придбати постачальник SOC (Broadcom, Freescale тощо).
невгамовний шум

9

З Вікіпедії :

Монолітне ядро ​​- це архітектура ядра, де вся операційна система працює в просторі ядра і поодинці як режим супервізора. На відміну від інших архітектур, монолітне ядро ​​визначає лише віртуальний інтерфейс високого рівня над апаратним забезпеченням комп’ютера, з набором примітивів або системних викликів для реалізації всіх служб операційної системи, таких як управління процесами, одночасність і управління пам'яттю, і одне або більше драйвери пристроїв як модулі.

Останні версії Windows, з іншого боку, використовують гібридне ядро .

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


7
Якщо я коли-небудь щось роблю в просторі ядра, я мушу пам’ятати, що десь використовував «гібридний керкель». SCNR ;-)
Юрген А. Ерхард

1
Windows NT завжди була гібридною системою. Ядро може бути не зовсім гібридним, але ви ставите під сумнів, що ви вважаєте його частиною (наприклад, winapi реалізовано як сервіс простору користувачів)
pll

5

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

Прихильники мікроелементів кажуть, що це краще, оскільки менший код означає менше помилок, а помилки, запущені в режимі супервізора, можуть спричинити набагато більше проблем, ніж у кодовому просторі коду (наприклад, більший шанс виникнення вразливості безпеки або повних збоїв у системі у вигляді 'ядра паніки'). Деякі мікроядра достатньо мінімальні, щоб їх можна було "формально перевірити", а це означає, що ви можете математично довести, що ядро ​​"правильне" згідно специфікації. L4 - хороший приклад цього.


Перевірте свої джерела. Вікі-сторінка не вказана. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/…
monksy

2

Монолітичне ядро ​​- це один великий процес, який повністю працює в одному адресному просторі. Це єдиний статичний бінарний файл. Усі служби ядра існують та виконуються в адресному просторі ядра. Ядро може викликати функції безпосередньо. Прикладами ОС на основі монолітних ядер є Linux, Unix.

Я думаю, що ця публікація допоможе вам більше зрозуміти концепцію.

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


Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться.
Скотт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.