Мікроядерна архітектура
Концепція. Мікроядерна архітектура є альтернативою класичному способу побудови операційної системи. Під класичною архітектурою в даному випадку розуміють розглянуту вище структурну організацію ОС, відповідно до якої всі основні функції операційної системи, що складають багатошарове ядро, виконуються в привілейованому режимі. При цьому деякі допоміжні функції ОС оформляються у вигяді застосувань (ужитків) і виконуються в користувацькому режимі поряд зі звичайними користувацькими програмами (стаючи системними утилітами або обробними програмами). Кожне застосування користувацького режиму працює у власному адресному просторі і захищений тим самим від якого-небудь втручання інших застосувань. Код ядра, що виконується у привілейованому режимі, має доступ до областей пам'яті всіх застосувань, але сам цілком від них захищений. Застосування звертаються до ядра з запитами на виконання системних функцій.
Суть мікроядерної архітектури полягає в наступному. У привілейованому режимі залишається працювати тільки дуже невелика частина ОС, що називається мікроядром (рис. 4.1). Мікроядро захищене від інших частин ОС і застосувань. До складу мікроядра входять машинно-залежні модулі, а також модулі, що виконують базові (але не всі!) функції ядра по керуванню процесами, обробці переривань, керуванню віртуальною пам'яттю, пересиланню повідомлень і керуванню пристроями введення/виведення, зв'язані з завантаженням або читанням регістрів пристроїв. Набір функцій мікроядра звичайно відповідає функціям шару базових механізмів звичайного ядра. Такі функції операційної системи важко, якщо не неможливо, виконати в просторі користувача.

Рис, 4.1 Перенос основного обсягу функцій ядра в користувацький простір
Всі інші більш высокорівневі функції ядра оформляються у вигляді застосувань, що працюють у користувацькому режимі. Однозначного рішення про те, які із системних функцій потрібно залишити в привілейованому режимі, а які перенести в користувацький, не існує. У загальному випадку багато менеджерів ресурсів, що є невід'ємними частинами звичайного ядра — файлова система, підсистеми керування віртуальною пам'яттю і процесами, менеджер безпеки і т.п., — стають «периферійними» модулями, що працюють у користувацькому режимі.
Працюючі в користувацькому режимі менеджери ресурсів мають принципові відмінності від традиційних утиліт і обробних програм операційної системи, хоча при мікроядерній архітектурі всі ці програмні компоненти також оформлені у вигляді застосувань. Утиліти й обробні програми викликаються в основному користувачами. Ситуації, коли одному застосуванні потрібно виконання функції (процедури) іншого застосування, виникають украй рідко. Тому в операційних системах із класичною архітектурою відсутній механізм, за допомогою якого одне з застосувань могло б викликати функці-іншого.
Зовсім інша ситуація виникає, коли у формі застосування оформляється частина операційної системи. По визначенню, основним призначенням такого застосування є обслуговування запитів інших застосувань, наприклад створення процесу, виділення пам'яті, перевірка прав доступу до ресурсу і т.д. Саме тому менеджери ресурсів, винесені в користувацький режим, називаються серверами ОС, тобто модулями, основним призначенням яких є обслуговування запитів локальних застосувань і інших модулів ОС. Очевидно, що для реалізації мікроядерної архітектури необхідною умовою є наявність в операційній системі зручного й ефективного способу виклику процедур одного процесу з іншого. Підтримка такого механізму і є однієї з головних задач мікроядра.
Схематично механізм звертання до функцій ОС, оформленим у вигляді серверів, виглядає в такий спосіб (рис. 4.2). Клієнт, яким може бути або прикладна програма, або інший компонент ОС, запитує виконання деякої функції у відповідного сервера, посилаючи йому повідомлення. Безпосередня передача повідомлень між застосуваннями неможлива, тому що їхні адресні простори ізольовані один від одного. Мікроядро, що виконується в привілейованому режимі, має доступ до адресних просторів кожного з цих застосувань і тому може працювати як посередник. Мікроядро спочатку передає повідомлення, що містить ім'я і параметри викликуваної процедури потрібному серверу, потім сервер виконує запитану операцію, після чого ядро повертає результати клієнту за допомогою іншого повідомлення. Таким чином, робота мікроядерної операційної системи відповідає відомій моделі клієнт-сервер, у якій роль транспортних засобів виконує мікроядро.

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

Рис. 4.3. Зміна режимів при виконанні системного виклику
Серйозність цього недоліку добре ілюструє історія розвитку Windows NT. У версіях 3.1 і 3.5 диспетчер вікон, графічна, бібліотека і высокорівневі драйвери графічних пристроїв входили до складу сервера користувацького режиму, і виклик функцій цих модулів здійснювався відповідно до мікроядерної схеми. Однак незабаром розробники Windows NT зрозуміли, що такий механізм звертань до часто використовуваних функцій графічного інтерфейсу істотно сповільнює роботу застосувань і робить дану операційну систему вразливою в умовах гострої конкуренції. В результаті у версію Windows NT 4.0 були внесені істотні зміни — усі перераховані вище модулі були перенесені в ядро, що віддалило цю ОС від ідеальної мікроядерної архітектури, але зате суттєво підвищило її продуктивність.
Цей приклад ілюструє головну проблему, з яким зіштовхуються розробники операційної системи, що вирішили застосувати мікроядерний підхід, -що включати в мікроядро, а що виносити в користувацький простір. В ідеальному випадку мікроядро може складатися тільки з засобів передачі повідомлень, засобів взаємодії з апаратурою, у тому числі засобів доступу до механізмів привілейованого захисту. Однак багато розробників не завжди жорстко дотримують принципу мінімізації функцій ядра, часто жертвуючи цим заради підвищення продуктивності. У результаті реалізації ОС утворять деякий спектр, на одному краю якого знаходяться системи з мінімально можливим мікроядром, а на іншому — системи, подібні Windows NT, у яких мікроядро виконує досить великий обсяг функцій.
Висновки
Найпростіша структуризація ОС полягає в поділі всіх компонентів ОС на модулі, що виконують основні функції ОС (ядро), і модулі, що виконують допоміжні функції ОС. Допоміжні модулі ОС оформляються або у виді застосувань (утиліти і системні оброблювані програми), або у вигляді бібліотек процедур. Допоміжні модулі завантажуються в оперативну пам'ять тільки на час виконання своїх функцій, тобто є транзитними. Модулі ядра постійно знаходяться в оперативній пам'яті, тобто є резидентными.
При наявності апаратної підтримки режимів з різними рівнями повноважень стійкість ОС може бути підвищена шляхом виконання функцій ядра в привілейованому режимі, а допоміжних модулів ОС і застосувань — у користувацькому. Це дає можливість захистити коди і дані ОС і застосувань від несанкціонованого доступу. ОС може виступати в ролі арбітра в суперечках застосувань за ресурси.
Ядро, виступаючи структурним елементом ОС, у свою чергу, може бути логічно розкладене на наступні шари (починаючи із самого нижнього):
машинно-залежні компоненти ОС;
базові механізми ядра;
менеджери ресурсів;
інтерфейс системних викликів.
У багатошаровій системі кожен шар обслуговує вышележачий шар, виконуючи для нього деякий набір функцій, що утворять міжщаровий інтерфейс. На основі функцій нижележачого шарую наступний вгору по ієрархії шар будує свої функції — більш складні і більш потужні, котрі, у свою чергу, виявляються примітивами для створення ще більш потужних функцій вышележачого шару. Багатошарова організація ОС істотно спрощує розробку і модернізацію системи.
Будь-яка ОС для рішення своїх задач взаємодіє з апаратними засобами комп'ютера, а саме: засобами підтримки привілейованого режиму і трансляції адрес, засобами переключення процесів і захисту областей пам'яті, системою переривань і системним таймером. Це робить ОС машинно-залежною, прив'язаною до визначеної апаратної платформи.
Переносимість ОС може бути досягнута при дотриманні наступних правил. По-перше, велика частина коду повинна бути написана мовою, транслятори якої наявні на всіх комп'ютерах, куди передбачається переносити систему. По-друге, обсяг машинно-залежних частин коду, що безпосередньо взаємодіють з апаратними засобами, повинний бути по можливості мінімізований. По-третє, аштаратно-залежний код повинний бути надійно локалізований у декількох модулях.
Мікроядерна архітектура є альтернативою класичному способу побудови операційної системи, відповідно до якого всі основні функції операційної системи, що складають багатошарове ядро, виконуються в привілейованому режимі. У мікроядерних ОС у привілейованому режимі залишається працювати тільки дуже невелика частина ОС, називана мікроядром. Всі інші высокорівневі функції ядра оформляються у вигляді застосувань, що працюють у користувацькому режимі.
Мікроядерні ОС задовольняють більшості вимо сучасних ОС, володіючи переносимістю, розширюваністю, надійністю і створюючи хороші передумови для підтримки розподілених застосувань. За ці достоїнства доводиться розплачуватися зниженням продуктивності, що є основним недоліком мікроядерної архітектури.
Прикладне програмне середовище — сукупність засобів ОС, призначена для організації виконання застосувань, що використовують визначену систему машинних команд, визначений тип API і визначений формат програми, що виконується. Кожна ОС створює як мінімум одне прикладне програмне середовище. Проблема складається в забезпеченні сумісності декількох програмних середовищ у рамках однієї ОС. При побудові множинних прикладних середовищ використовуються різні архітектурні рішення, концепції емуляціїдвійкового коду, трансляції API.