Чи може хто-небудь пояснити на прикладах різницю між монолітним та мікроядерним? Також інші класифікації ядра?
Чи може хто-небудь пояснити на прикладах різницю між монолітним та мікроядерним? Також інші класифікації ядра?
Відповіді:
Монолітичне ядро - це єдиний великий процес, який повністю працює в одному адресному просторі. Це єдиний статичний бінарний файл. Усі служби ядра існують та виконуються в адресному просторі ядра. Ядро може викликати функції безпосередньо. Приклади ОС на основі монолітних ядер: Unix, Linux.
У мікроядрах ядро розбивається на окремі процеси, відомі як сервери. Деякі сервери працюють у просторі ядра, а деякі - у просторі користувача. Усі сервери зберігаються окремо і працюють у різних адресних просторах. Сервери викликають "послуги" один від одного, надсилаючи повідомлення через IPC (Interprocess Communication). Це розділення має ту перевагу, що якщо один сервер виходить з ладу, інші сервери все ще можуть працювати ефективно. Приклади ОС на основі мікроядер: Mac OS X та Windows NT.
Монолітна конструкція ядра набагато старша за ідею про мікроядер, яка з’явилася наприкінці 1980-х років.
Ядра Unix і Linux є монолітними, тоді як QNX, L4 і Hurd - мікроядра. Мах спочатку був мікроядром (не Mac OS X), але згодом перетворився на гібридне ядро. Minix (до версії 3) не був чистим мікроядром, оскільки драйвери пристроїв були складені як частина ядра.
Монолітні ядра, як правило, швидші, ніж мікроядра. Перший мікроядер Мах був на 50% повільніше, ніж більшість монолітних ядер, тоді як пізніші, як L4, були лише на 2% або на 4% повільніше, ніж монолітні конструкції.
Монолітні ядра мають великі розміри, в той час як мікроядра мають невеликі розміри - вони зазвичай вписуються в кеш-пам'ять L1 процесора (мікроклетки першого покоління).
У монолітних ядрах драйвери пристроїв перебувають у просторі ядра, тоді як у мікроядерних драйверах пристрою є простір користувача.
Оскільки драйвери пристроїв монолітних ядер перебувають у просторі ядра, монолітні ядра менш захищені, ніж мікроядра, а відмови (винятки) у драйверах можуть призвести до збоїв (відображаються як BSOD у Windows). Мікрохвилі більш безпечні, ніж монолітні ядра, тому частіше застосовуються у військових пристроях.
Монолітні ядра використовують сигнали та розетки для здійснення міжпроцесорної комунікації (IPC), мікроелементи використовують черги повідомлень. Мікропроводи 1-го покоління недостатньо добре реалізували IPC і були повільними в контекстних комутаторах - саме це спричинило їх низьку ефективність.
Додавання нової функції до монолітної системи означає перекомпіляцію всього ядра або відповідного модуля ядра (для модульних монолітних ядер), тоді як за допомогою мікроядер можна додавати нові функції або патчі без перекомпіляції.
Монолітне ядро
Усі частини ядра, такі як Планувальник, Файлова система, Управління пам'яттю, Мережеві стеки, Драйвери пристроїв тощо, підтримуються в одному блоці в ядрі в Monolithic Kernel
Переваги
• Швидша обробка
Недоліки
• Небезпечні аварії • Нерухомість до перенесення • Вибух розміру ядра
Приклади • MS-DOS, Unix, Linux
Мікро ядро
В ядро вкладаються лише такі важливі частини, як IPC (Inter Process Communication), основний планувальник, основна обробка пам'яті, основні примітивні введення / виведення тощо. Спілкування відбувається через передачу повідомлення. Інші підтримуються як серверні процеси в просторі користувачів
Переваги
• Стійкий до аварій, портативний, менший розмір
Недоліки
• Повільна обробка завдяки додатковій передачі повідомлень
Приклади • Windows NT
1.Монолітне ядро (чистий моноліт):all
Усі сервіси ядра з одного компонента
(-) додавання / видалення неможливо, менше / нульовий гнучкості
(+) Міжкомпонентна комунікація краща
наприклад: - Традиційний Unix
2.Мікро ядро:few
кілька сервісів (управління пам’яттю, управління процесором, IPC тощо) з ядра ядра, інші послуги (управління файлами, управління введенням-виведенням тощо) з різних рівнів / компонентів
Сплит-підхід [Деякі служби перебувають у привілейованому режимі (ядро), а деякі - у звичайному (користувальницькому) режимі]
(+) гнучка для змін / надбавок
(-) комунікації накладні
наприклад: - QNX і т.д.
3.Модулярне ядро (Модульний моноліт):most
Поєднання ядра мікро та моноліту
Колекція модулів - модулі можуть бути -> статичні + динамічні
Драйвери випускаються у вигляді модулів
наприклад: - Linux Modern OS
У спектрі конструкцій ядра дві крайні точки - це монолітні ядра та мікроядра.
Наприклад, (класичне) ядро Linux - це монолітне ядро (і так це є і у всіх комерційних ОС на сьогоднішній день - хоча вони можуть заявити інакше);
При цьому його код являє собою єдиний файл C, що породжує єдиний процес, який реалізує всі перераховані вище служби.
Для прикладу інкапсуляції ядра Linux зауважимо, що ядро Linux навіть не має доступу до жодної зі стандартних бібліотек C. Дійсно, ядро Linux не може використовувати рудиментарні функції бібліотеки С, такі як printf. Натомість він реалізує власну функцію друку (так звані відбитки).
Це відокремлення ядра Linux та самообмеження забезпечують ядро Linux головним його перевагою: ядро знаходиться в одному адресному просторі1, що дозволяє всім можливостям спілкуватися якомога швидше, не вдаючись до будь-якого типу передачі повідомлення. Зокрема, монолітне ядро реалізує всі драйвери пристроїв системи.
Однак це головний недолік монолітного ядра: впровадження будь-якого нового непідтримуваного обладнання вимагає перезапису ядра (у відповідних частинах), його перекомпіляції та повторної інсталяції всієї ОС.
Що ще важливіше, якщо якийсь драйвер пристрою виходить з ладу, все ядро страждає в результаті. Цей немодульний підхід до доповнень до апаратних засобів та збоїв в роботі обладнання є головним аргументом для підтримки іншого екстремального підходу до дизайну ядер. Мікрокерель є в певному сенсі мінімалістичним ядром, в якому розміщуються лише самі основні служби ОС (наприклад, управління процесами та управління файловою системою). У мікрокерелі драйвери пристрою лежать поза ядром, що дозволяє додавати та видаляти драйвери пристроїв під час роботи ОС і не потребує чергування ядра.
Монолітичне ядро має всі послуги ядра разом із основною частиною ядра, тому важкі та негативно впливають на швидкість та продуктивність. З іншого боку, мікроядра легка, що сприяє підвищенню продуктивності та швидкості.
Я відповів на те саме питання на сайті Wordpress. Для різниці між монолітним, мікрокернельним та екзокернельним у табличній формі ви можете відвідати тут