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