Ноу Інти, лекція, введення 2

Архітектурні особливості ОС

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

Монолітне ядро

По суті справи, операційна система - це звичайна програма, тому було б логічно і організувати її так само, як влаштовано більшість програм, тобто скласти з процедур і функцій. В цьому випадку компоненти операційної системи є не самостійними модулями, а складовими частинами однієї великої програми. Така структура операційної системи називається монолітним ядром (monolithic kernel). Монолітне ядро ​​являє собою набір процедур, кожна з яких може викликати кожну. Всі процедури працюють в привілейованому режимі. Таким чином, монолітне ядро ​​- це така схема операційної системи. при якій всі її компоненти є складовими частинами однієї програми, використовують загальні структури даних і взаємодіють один з одним шляхом безпосереднього виклику процедур. Для монолітної операційної системи ядро ​​збігається з усією системою.

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

Монолітне ядро ​​- найстаріший спосіб організації операційних систем. Прикладом систем з монолітним ядром є більшість Unix-систем.

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

Багаторівневі системи (Layered systems)

Продовжуючи структуризацію, можна розбити всю обчислювальну систему на ряд більш дрібних рівнів з добре визначеними зв'язками між ними, так щоб об'єкти рівня N могли викликати тільки об'єкти рівня N-1. Нижнім рівнем в таких системах зазвичай є hardware, верхнім рівнем - інтерфейс користувача. Чим нижче рівень, тим більше привілейовані команди і дії може виконувати модуль, що знаходиться на цьому рівні. Вперше такий підхід був застосований при створенні системи THE (Technishe Hogeschool Eindhoven) Дейкстрой (Dijkstra) і його студентами в 1968 р Ця система мала такі рівні:


Мал. 1.2. Листкова система THE

Листкові системи добре реалізуються. При використанні операцій нижнього шару не потрібно знати, як вони реалізовані, потрібно лише розуміти, що вони роблять. Листкові системи добре тестуються. Налагодження починається з нижнього шару і проводиться пошарово. При виникненні помилки ми можемо бути впевнені, що вона знаходиться в тестованому шарі. Листкові системи добре модифікуються. При необхідності можна замінити лише один шар, не чіпаючи інші. Але листкові системи складні для розробки: важко правильно визначити порядок шарів і що до якогось прошарку належить. Листкові системи менш ефективні, ніж монолітні. Так, наприклад, для виконання операцій введення-виведення програмі користувача доведеться послідовно проходити всі шари від верхнього до нижнього.

Віртуальні машини

На початку лекції ми говорили про погляді на операційну систему як на віртуальну машину. коли користувачеві не потрібно знати деталі внутрішнього устрою комп'ютера. Він працює з файлами, а не з магнітними головками і двигуном; він працює з величезною віртуальної, а не обмеженої реальної оперативної пам'яттю; його мало хвилює, єдиний він на машині користувач чи ні. Розглянемо дещо інший підхід. Нехай операційна система реалізує віртуальну машину для кожного користувача, але не спрощуючи йому життя, а, навпаки, ускладнюючи. Кожна така віртуальна машина постає перед користувачем як голе залізо - копія всього hardware в обчислювальній системі, включаючи процесор. привілейовані і непривілейованих команди, пристрої введення-виведення, переривання і т.д. І він залишається з цим залізом один на один. При спробі звернутися до такого віртуального залозу на рівні привілейованих команд в дійсності відбувається системний виклик реальної операційної системи. яка і робить всі необхідні дії. Такий підхід дозволяє кожному користувачеві завантажити свою операційну систему на віртуальну машину і робити з нею все, що душа забажає.


Мал. 1.3. Варіант віртуальної машини

Першою реальною системою такого роду була система CP / CMS, або VM / 370, як її називають зараз, для сімейства машин IBM / 370.

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

мікроядерна архітектура

Сучасна тенденція в розробці операційних систем полягає в перенесенні значної частини системного коду на рівень користувача і одночасної мінімізації ядра. Йдеться про підхід до побудови ядра, званому микроядерной архітектурою (microkernel architecture) операційної системи. коли більшість її складових є самостійними програмами. У цьому випадку взаємодія між ними забезпечує спеціальний модуль ядра, званий мікроядром. Микроядро працює в привілейованому режимі і забезпечує взаємодію між програмами, планування використання процесора. первинну обробку переривань. операції введення-виведення і базове управління пам'яттю.


Мал. 1.4. Мікроядерна архітектура операційної системи

Інші компоненти системи взаємодіють один з одним шляхом передачі повідомлень через микроядро.

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

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

змішані системи

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

Іншим прикладом змішаного підходу може служити можливість запуску операційної системи з монолітним ядром під керуванням мікроядра. Так влаштовані 4.4BSD і MkLinux, засновані на мікроядрі Mach. Микроядро забезпечує управління віртуальною пам'яттю і роботу низькорівневих драйверів. Всі інші функції, в тому числі взаємодія з прикладними програмами, здійснюється монолітним ядром. Даний підхід сформувався в результаті спроб використовувати переваги микроядерной архітектури. зберігаючи по можливості добре налагоджений код монолітного ядра.

Таким чином, Windows NT можна з повним правом назвати гібридної операційною системою.