Основні положення микроядерной архітектури

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

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

Що не увійшли до складу мікроядра високорівневі функції та модулі ядра оформляються у вигляді звичайних додатків, що працюють в режимі користувача. При цьому на розробника ОС лягає далеко не однозначна завдання прийняття рішення про те, який з модулів буде працювати в привілейованому режимі, а який в призначеному для користувача. Як правило, на це рішення сильно впливає специфіка застосування даної ОС і критерії, яким вона повинна задовольняти. У загальному випадку багато менеджерів ресурсів, які є невід'ємною частиною ядра ОС з класичною архітектурою, залишаються за межами мікроядра і працюють в режимі користувача. На малюнку можна бачити основні відмінності в побудові ОС з монолітним ядром (див. Рис. 5а) і з микроядерной архітектурою (див. Рис. 5б).

Мал. 5. Будова операційних систем з монолітним ядром і з микроядерной архітектурою

Працюючі в призначеному для користувача режимі менеджери ресурсів мають принципові відмінності від традиційних утиліт ОС і системних обробних програм ОС, хоча при микроядерной архітектурі всі ці програмні компоненти також оформлені у вигляді додатків. Утиліти і обробні програми викликаються, в основному, користувачами. Ситуації, коли одному з додатком слід дотримуватися функції іншої програми, виникають вкрай рідко, тому в ОС із класичною архітектурою відсутній механізм, за допомогою якого один додаток могло б викликати функції іншого. Принципово інша ситуація виникає в тому випадку, якщо в формі звичайного застосування оформляється частина ОС. За визначенням основним призначенням такого додатка є обслуговування запитів інших додатків, наприклад, створення процесу, виділення пам'яті, перевірка прав доступу до ресурсу і т.д. Внаслідок цього винесені в призначений для користувача режим менеджери ресурсів є серверами ОС. тобто модулями, основне призначення яких - обслуговування запитів локальних додатків і інших модулів ОС. Цілком очевидно, що при реалізації микроядерной архітектури необхідно забезпечити наявність в ОС зручного та ефективного способу виклику процедур одного процесу з іншого. Підтримка такого механізму є одним із головних завдань, покладених на микроядро ОС.

Розглянемо типовий приклад організації механізму звернення додатків до функцій ОС, оформленим у вигляді серверів (див. Рис. 6).

Рис.6. Реалізація системного виклику в операційній системі з микроядерной архітектурою

Розглянемо, як на практиці застосовується концепція микроядерной архітектури побудови ОС.

Однією з перших представила поняття мікроядра фірма Next, яка використовувала в своїх комп'ютерах систему Mach, що пройшла великий шлях розвитку в університеті Карнегі-Меллона за сприяння Міністерства оборони США. Теоретично її невелике привілейоване ядро, оточене службами призначеного для користувача режиму, повинно було забезпечити безпрецедентну гнучкість і модульність. Але на практиці ця перевага дещо зменшилася через наявність монолітного сервера ОС UNIX BSD 4.3, який виконувався в просторі користувача над мікроядром Mach. Однак Mach дав Next можливість надати службу обміну повідомленнями та об'єктно-орієнтовані засоби, які постали перед споживачами у вигляді елегантного інтерфейсу користувача з графічною підтримкою конфігурації мережі, системного адміністрування і розробки програмного забезпечення.

Більш сучасні архітектури мікроядра були запропоновані Novell, USL, Open Software Foundation, IBM, Apple і ін. Одним з основних суперників NT в частині мікроядер є микроядро Mach 3.0, яке і IBM, і OSF взялися привести до комерційного виду. Основний суперник Mach - микроядро Chorus 3.0 фірми Chorus Systems, обраний USL за основу своїх пропозицій. Це ж микроядро буде використовуватися в SpringOS фірми Sun - об'єктно-орієнтованому наступника ОС Solaris.

Сьогодні стало ясно, що існує тенденція руху від монолітних систем в бік використання невеликих ядер. Саме такий підхід вже використовувався компаніями QNX Software і Unisys, протягом декількох років успішно поставляють ОС на основі мікроядра. ОС QNX фірми QNX Software обслуговує ринок систем реального часу, а ОС CTOS фірми Unisys популярна в області банківської справи.

Тепер розглянемо основні концепції побудови двох найбільш популярних систем: Windows NT і UNIX-системи, заснованої на мікроядрі Mach.

У багатьох UNIX-подібних системах як основа для побудови вибрано микроядро Mach. Розробка прообразу такої структури почалася в 1975 році в університеті Карнегі-Меллона. На базі мікроядра Mach емулюватися UNIX та інші ОС. Ядро Mach забезпечує управління пам'яттю, процесами комунікації і функції введення-виведення. Ідея побудови ядра Mach складається в забезпеченні механізмів, необхідних для роботи системи, але стратегія використання цих механізмів реалізується на рівні користувача процесів. Ядро керує п'ятьма головними абстракціями:

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

Кожен процес може надати іншому процесу можливість посилати (або отримувати) повідомлення в один з належних йому портів. Така можливість реалізується у вигляді мандата (capability), який включає не тільки покажчик на порт, але і список прав, якими інший процес має по відношенню до даного порту (наприклад, право виконати операцію послати - send). Все коммуника-ції в Mach використовують цей механізм. Основною метою, яку ставили перед собою розробники засобів комунікації ядра Mach, була підтримка різних стилів комунікацій в поєднанні з надійністю і гнучкістю. Комунікаційні засоби ядра Mach підтримують асинхронну передачу повідомлень, механізм для реалізації розподілених обчислень, потоки байт (streams) та інші способи.

Хоча описаний метод виконання програм UNIX та здається заплутаним, численні дослідження показали, що він працює краще, ніж традиційні монолітні реалізації ядра. Надалі роботи над Mach будуть фокусуватися на поділі сервера UNIX на кілька серверів з більш специфічними функціями.

ОС Windows NT з самого початку проектувалася розробниками компанії Microsoft з урахуванням всіх вимог, що пред'являються до сучасних ОС. При розробці її структури в значній мірі була використана концепція мікроядра. Відповідно з цією ідеєю, ОС розділена на кілька підсистем, кожна з яких виконує окремий набір сервісних функцій, наприклад сервіси пам'яті, по створенню процесів або з планування процесів. Кожен сервер працює в режимі користувача, виконуючи цикл перевірки запиту клієнта на одну з його сервісних функцій. Клієнт, яким може бути або інша компонента ОС, або прикладна програма, запитує сервіс, посилаючи повідомлення на сервер. Микроядро ОС, діючи в привілейованому режимі, доставляє повідомлення потрібного сервера, потім сервер виконує операцію, після цього ядро ​​повертає результат клієнту за допомогою іншого повідомлення.

Структурно Windows NT може бути представлена ​​у вигляді двох доданків: частина ОС, яка працює в режимі користувача, і частина ОС в режимі ядра.

Частина, що працює в режимі ядра, називається executive Windows NT - виконавчої частиною. Вона включає ряд компонентів, які керують віртуальної пам'яттю, об'єктами (ресурсами), введенням-висновком, файлової системою (включаючи мережеві драйвери), взаємодією процесів і частково системою безпеки. Ці компоненти контактують між собою за допомогою міжмодульних зв'язків. Кожен компонент викликає інші за допомогою набору ретельно специфікованих внутрішніх процедур.

Другу частину, що працює в режимі користувача, складають сервери - захищені підсистеми Windows NT. Сервери Windows NT називаються захищеними, так як кожен з них виконується в окремому процесі, пам'ять якого відокремлена від інших процесів системою управління віртуальною пам'яттю NT executive. Так як підсистеми автоматично не можуть спільно використовувати пам'ять, вони спілкуються один з одним за допомогою посилки повідомлень. Повідомлення передаються як між клієнтом і сервером, так і між двома серверами. Всі повідомлення проходять через виконавчу частину Windows NT.

Підтримку захищених підсистем забезпечує виконавча частина - Windows NT executive, яка працює в просторі мікроядра і ніколи не скидається на диск. Її складовими частинами є:

1) менеджер об'єктів, що створює, видаляє і керуючий об'єктами NT executive - абстрактними типами даних, що використовуються для представлення ресурсів системи;

2) монітор безпеки, встановлює правила захисту на локальному комп'ютері. Охороняє ресурси ОС, виконує захист і реєстрацію виконуваних об'єктів;

3) менеджер процесів, що створює і завершальний, що припиняє і відновлює процеси, а також зберігає про них інформацію;

4) менеджер віртуальної пам'яті;

5) підсистема вводу-виводу, що включає в себе наступні компоненти:

- менеджер введення-виведення, що надає кошти введення-виведення, незалежні від пристроїв;

- файлові системи - NT-драйвери, які виконують файл-орієнтовані запити на введення-виведення і транслюють їх в виклики звичайних пристроїв;

- мережевий редиректор і мережевий сервер - драйвери файлових систем, що передають віддалені запити на введення-виведення на машини мережі і отримують запити від них;

- драйвери пристроїв NT executive - низькорівневі драйвери, безпосередньо керують пристроєм;

- менеджер кеша, який реалізує кешування диска.

Виконавча частина, в свою чергу, грунтується на службах нижнього рівня мікроядра NT. У функції мікроядра входить:

- обробка переривань і виняткових ситуацій;

- синхронізація процесорів для багатопроцесорних систем;

- відновлення системи після збоїв.

Микроядро працює в привілейованому режимі і ніколи не видаляється з пам'яті. Звернутися до нього можна тільки за допомогою переривання. Микроядро розташоване над рівнем апаратних абстракцій (Hardware Abstraction Level, HAL), який концентрує в одному місці велику частину машинно-залежних процедур. HAL розташовується між NT executive і апаратним забезпеченням і містить такі деталі, як контролери переривань, інтерфейси введення-виведення і механізми взаємодії між процесорами. Таке рішення дозволяє легко переносити Windows NT з однієї платформи на іншу шляхом заміни тільки шару HAL.

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

Захищені підсистеми Windows NT працюють в режимі користувача і створюються Windows NT під час завантаження ОС. Відразу після створення вони починають нескінченний цикл свого виконання, відповідаючи на повідомлення, що надходять до них від прикладних процесів та інших підсистем. Серед захищених підсистем можна виділити підклас, званий підсистемами оточення. Підсистеми оточення реалізують інтерфейси додатків ОС (API). Інші типи підсистем, звані інтегральними підсистемами, виконують функції, необхідні для ОС. Наприклад, велика частина системи безпеки Windows NT реалізована у вигляді інтегральної підсистеми, мережеві сервери також виконані як інтегральні підсистеми.

Найбільш важливою підсистемою оточення є Win32 - під-система, яка забезпечує доступ для додатків до 32-розрядної Windows API. Додатково ця система забезпечує графічний інтерфейс користувача і управляє введенням-виведенням даних користувача. Також підтримуються підсистеми POSIX, OS / 2, 16-розрядна Windows і MS-DOS.

Кожна захищена підсистема працює в режимі користувача, викликаючи системний сервіс NT executive для виконання привілейованих дій в режимі ядра. Мережеві сервери можуть виконуватися як в режимі користувача, так і в режимі ядра, в залежності від того, як вони розроблені.

Підсистеми зв'язуються між собою шляхом передачі повідомлень. Коли, наприклад, користувальницький додаток викликає якусь API-процедуру, підсистема оточення, що забезпечує цю процедуру, отримує повідомлення і починає працювати над нею або звертаючись до мікроядра, або посилаючи повідомлення іншій підсистемі. Після завершення процедури підсистема оточення посилає додатком повідомлення, що містить значення, що повертається. Посилка повідомлень і інша діяльність захищених підсистем невидима для користувача.

Основним засобом, який скріплює всі підсистеми Windows NT в єдине ціле, є механізм виклику локальних процедур (Local Procedure Call, LPC). LPC є оптимізований варіант більш загального засобу - віддаленого виклику процедур (Remote Procedure Call, RPC), яке використовується для зв'язку клієнтів і серверів, розташованих на різних машинах мережі.

Засоби LPC підтримують кілька способів передачі даних між клієнтами і серверами: один зазвичай використовується для передачі коротких повідомлень, інший - для довгих повідомлень, а третій оптимізований спеціально для використання підсистемою Win32. Кожна підсистема встановлює порт - канал зв'язку, за допомогою якого з нею можуть зв'язуватися інші процеси.

Windows NT використовує захищені підсистеми для того, щоб:

- забезпечити кілька програмних інтерфейсів (API), по можливості не ускладнюючи при цьому базовий програмний код (NT executive);

- ізолювати базову ОС від змін або розширень в підтримуваних API;

- об'єднати частину глобальних даних, потрібних всім API, і в той же час відокремити дані, що використовуються кожним окремим API від даних інших API;

- захистити оточення кожного API від додатків і оточення інших API, а також захистити базову ОС від різних оточень;

- дозволити ОС розширюватися в майбутньому за рахунок нових API.

Таким чином, реалізація частин ОС у вигляді серверів, що виконуються в режимі користувача, є найважливішою частиною проекту Windows NT, яка надає глибоке вплив на функціонування всієї системи.

Микроядро NT служить, головним чином, засобом підтримки для переносної основної частини ОС - набору призначених для користувача середовищ. Концентрація машинно-залежних програм усередині мікроядра робить перенос NT на різноманітні процесори відносно легким. Але в той час як деякі мікроядра (Mach і Chorus) передбачається поставляти в якості самостійного програмного продукту, з ОС Windows NT ядро ​​навряд чи може бути виокремити для окремого використання. Це є однією з причин того, що деякі фахівці не вважають Windows NT істинно микроядерной ОС в тому сенсі, в якому такими є Mach і Chorus. Ті ж критики відзначають також, що NT не виключає, як це належить, усі надбудовані служби з простору ядра, і що драйвери пристроїв в NT по мінімуму взаємодіють з мікроядром, вважаючи за краще працювати безпосередньо з лежачим нижче шаром апаратної абстракції HAL.

Схожі статті