користувача
Режим привілеєвій Режим привілеєвій
а б
Рис. 39 Переніс основного обсягу функцій ядра в користувацький простір
Всі інші більш високорівневі функції ядра оформляються у вигляді додатків, що працюють у користувацькому режимі. Однозначного рішення про те, які із системних функцій потрібно залишити в привілейованому режимі, а які перенести в користувацький, не існує. У загальному випадку багато менеджерів ресурсів, що є невід'ємними частинами звичайного ядра — ФС, підсистеми керування ВП і процесами, менеджер безпеки і т.п., — стають «периферійними» модулями, що працюють у користувацькому режимі.
Працюючі в користувацькому режимі менеджери ресурсів мають принципові відмінності від традиційних утиліт і обробних програм ОС, хоча при мікроядерній архітектурі всі ці програмні компоненти також оформлені у виді додатків. Утиліти й обробні програми викликаються в основному користувачами. Ситуації, коли одному додатку потрібно виконання функції (процедури) іншого додатка, виникають украй рідко. Тому в ОС із класичною архітектурою відсутній механізм, за допомогою якого один додаток міг би викликати функції іншого.
Зовсім інша ситуація виникає, коли у формі додатка оформляється частина ОС. По визначенню, основним призначенням такого додатка є обслуговування запитів інших додатків, наприклад створення процесу, виділення пам'яті, перевірка прав доступу до ресурсу і т.д. Саме тому менеджери ресурсів, внесені в користувацький режим, називаються серверами ОС, тобто модулями, основним призначенням яких є обслуговування запитів локальних додатків і інших модулів ОС. Очевидно, що для реалізації мікроядерної архітектури необхідною умовою є наявність в ОС зручного й ефективного способу виклику процедур одного процесу з іншого. Підтримка такого механізму і є однієї з головних задач мікроядра.
Схематично механізм звертання до функцій ОС, оформленим у виді серверів, виглядає в такий спосіб (мал. 40). Клієнт, яким може бути або ПП, або інший компонент ОС, запитує виконання деякої функції у відповідного сервера, посилаючи йому повідомлення. Безпосередня передача повідомлень між додатками неможлива, тому що їхні адресні простори ізольовані один від одного. Мікроядро, що виконується в привілейованому режимі, має доступ до адресних просторів кожного з цих додатків і тому може працювати як посередник. Мікроядро спочатку передає повідомлення, що містить ім'я і параметри викликаючої процедури потрібному серверу, потім сервер виконує запитану операцію, після чого ядро повертає результати клієнту за допомогою іншого повідомлення. Таким чином, робота мікроядерної ОС відповідає відомої моделі клієнт-сервер, у якій роль транспортних засобів виконує мікроядро.
Програми користувачів
Зв’язана Зв’язаний запит
відповідь
Режим користувача
Режим привілеїв
Рис. 40. Реалізація системного виклику в мікроядерній архітектурі
4.2. Переваги і недоліки мікроядерної архітектури
ОС, засновані на концепції мікроядра, у високому ступені задовольняють більшості вимог, пропонованих до сучасних ОС, володіючи переносимістю, розширюваністю, надійністю і створюючи гарні передумови для підтримки розподілених додатків. За ці переваги приходиться платити зниженням продуктивності, і це є основним недоліком мікроядерної архітектури.
Високий ступінь переносимості обумовлений тим, що весь машинно-залежний код ізольований у мікроядрі, тому для переносу системи на новий процесор потрібно менше змін і усі вони логічно згруповані разом.
Розширюваність присутня в мікроядерній ОС у дуже високому ступені. У традиційних системах навіть при наявності багатошарової структури нелегко видалити один шар і поміняти його на іншій через множинність і розмитість інтерфейсів між шарами. Додавання нових функцій і зміна існуючих вимагає гарного знання ОС і великих витрат часу. У той же час обмежений набір чітко визначених інтерфейсів мікроядра відкриває шлях до упорядкованого росту й еволюції ОС. Додавання нової підсистеми вимагає розробки нового додатка, що ніяк не торкає цілісності мікроядра. Мікроядерна структура дозволяє не тільки додавати, але і скорочувати число компонентів ОС, що також буває дуже корисно. Наприклад, не всім користувачам потрібні засоби безпеки чи підтримки розподілених обчислень, а видалення їх із традиційного ядра найчастіше неможливо. Звичайно традиційні ОС дозволяють динамічно додавати в ядро чи видаляти з ядра тільки драйвери зовнішніх пристроїв — через часті зміни в конфігурації підключених до комп'ютера зовнішніх пристроїв підсистема в/в ядра допускає завантаження і вивантаження драйверів «на ходу», але для цього вона розробляється особливим чином (наприклад, середовище STREAMS у UNIX чи менеджер в/в в Windows NT). При мікроядерному підході конфігурованість ОС не викликає ніяких проблем і не вимагає особливих мір — досить змінити файл із настроюваннями початкової конфігурації системи чи ж зупинити не потрібні більше сервери в ході роботи звичайними для зупинки додатків засобами.
Використання мікроядерної моделі підвищує надійність ОС. Кожен сервер виконується у виді окремого процесу у своїй власній області пам'яті й у такий спосіб захищений від інших серверів ОС, що не спостерігається в традиційної ОС, де всі модулі ядра можуть впливати один на одного. І якщо окремий сервер терпить крах, то він може бути перезапущений без зупинки чи ушкодження інших серверів ОС. Більш того, оскільки сервери виконуються в користувацькому режимі, вони не мають безпосереднього доступу до апаратури і не можуть модифікувати пам'ять, у якій зберігається і працює мікроядро. Іншим потенційним джерелом підвищення надійності ОС є зменшений обсяг коду мікроядра в порівнянні з традиційним ядром — це знижує імовірність появи помилок програмування.
Модель з мікроядром добре підходить для підтримки розподілених обчислень, тому що використовує механізми, аналогічні мережним: взаємодія клієнтів і серверів шляхом обміну повідомленнями. Сервери мікроядерної ОС можуть працювати як на одному, так і на різних комп'ютерах. У цьому випадку при одержанні повідомлення від додатка мікроядро може обробити його самостійно і передати локальному серверу чи