Логотип коледжу
Оптико-механічний фаховий коледж

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

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

Цілі лекції

Після опрацювання матеріалу ви зможете:

  • пояснювати відмінність між User Mode і Kernel Mode;
  • описувати роль привілейованих інструкцій, захисту пам'яті та контрольованого переходу до ядра;
  • співвідносити режими ОС із кільцями привілеїв x86 без хибного ототожнення цих понять;
  • пояснювати, чому кільця 1 і 2 рідко використовуються сучасними універсальними ОС;
  • розрізняти монолітну, мікроядерну, гібридну та екзоядерну моделі;
  • порівнювати моделі за продуктивністю, ізоляцією, надійністю та складністю;
  • обирати аргументовану модель для заданого сценарію, не шукаючи універсального переможця.

Передумови

Потрібно розуміти роль ОС як менеджера ресурсів, знати поняття ядра, процесу, пам'яті, драйвера та API на оглядовому рівні. Адміністративні права й зміна налаштувань системи не потрібні.

1. Навіщо процесору рівні привілеїв

Уявімо, що будь-яка прикладна програма може довільно:

  • змінювати таблиці відображення пам'яті;
  • вимикати обробку переривань;
  • безпосередньо програмувати контролер накопичувача;
  • читати пам'ять іншого процесу;
  • зупиняти процесор.

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

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

Захист не базується на ввічливості програми. Він має апаратне підґрунтя: поточний рівень привілеїв, контроль доступу до сторінок пам'яті та правила виконання інструкцій.

2. User Mode і Kernel Mode

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

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

ВластивістьUser ModeKernel Mode
типова рользастосунки та частина системних службядро й привілейовані драйвери
доступ до пам'ятілише дозволені відображення процесудоступ до системної пам'яті за правилами ядра
привілейовані інструкціїзабороненідозволені
прямий доступ до пристроївзазвичай через ядроконтролюється ядром і драйверами
наслідок помилкичасто завершується окремий процесможливий збій або компрометація всієї системи

Поділ режимів реалізує принцип найменших привілеїв: компонент отримує лише ті повноваження, які потрібні для його роботи.

3. Контрольований перехід до ядра

Програма в User Mode не може самостійно виконати привілейовану операцію, як-от прочитати файл або створити процес. Вона просить ядро через системний виклик (system call) - контрольовану передачу керування до визначеної точки входу ядра. Програма не обирає довільну адресу всередині ядра, а потрапляє туди, де ядро перевіряє запит і права.

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

Межа User Mode і Kernel Mode та порівняння моделей ядра

4. Кільця привілеїв x86

Архітектура x86 описує чотири кільця привілеїв від 0 до 3:

  • Ring 0 має найвищі привілеї;
  • Ring 1 і Ring 2 мають проміжні рівні;
  • Ring 3 має найменші привілеї.

У поширеній моделі сучасних універсальних x86-ОС ядро працює в Ring 0, а застосунки - у Ring 3. Ring 1 і Ring 2 зазвичай не використовуються для звичайного поділу компонентів. Одна з причин полягає в тому, що переносна ОС має працювати й на архітектурах з іншою моделлю привілеїв; інша - двох основних рівнів достатньо для поширеної межі «ядро - користувацький процес».

Не слід вважати, що Kernel Mode завжди буквально означає Ring 0 на будь-якому процесорі. User Mode і Kernel Mode - поняття моделі ОС, а rings - конкретний механізм x86. ARM, наприклад, використовує рівні винятків EL0, EL1 та інші.

Віртуалізація додає окремі механізми, наприклад VMX root/non-root на Intel. Їх не варто спрощено називати «Ring -1» у формальному описі: це популярна метафора, а не номер кільця в базовій моделі x86.

5. Що саме називають архітектурою ядра

Архітектурна модель відповідає на запитання:

  • які служби входять до привілейованого ядра;
  • у яких адресних просторах виконуються драйвери й системні сервери;
  • як компоненти обмінюються запитами;
  • де проходять межі відмови й довіри;
  • як систему розширюють та оновлюють.

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

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

У монолітній моделі основні служби ОС працюють у спільному привілейованому адресному просторі: планувальник, керування пам'яттю, файлові системи, мережевий стек і багато драйверів. Компоненти можуть викликати один одного як звичайні внутрішні функції.

Переваги:

  • короткий шлях виклику між підсистемами;
  • низькі накладні витрати на обмін усередині ядра;
  • зручний спільний доступ до внутрішніх структур;
  • висока продуктивність для багатьох навантажень.

Обмеження:

  • велика довірена кодова база;
  • помилка драйвера може пошкодити стан ядра;
  • сильні внутрішні залежності ускладнюють перевірку;
  • межа відмови часто охоплює всю систему.

Linux класифікують як модульне монолітне ядро. Завантажувані модулі дозволяють додавати частину драйверів і функцій під час роботи, але модуль у Kernel Mode не отримує ізоляцію user-space процесу. Модульність покращує структуру й розгортання, але сама по собі не перетворює ядро на мікроядро.

7. Мікроядро

Мікроядро залишає в привілейованому ядрі мінімальний набір механізмів, зазвичай планування, базове керування адресними просторами, переривання та міжпроцесну взаємодію. Файлові системи, мережеві служби й частина драйверів можуть працювати як окремі сервери в User Mode.

Переваги:

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

Обмеження:

  • більше IPC і переходів між адресними просторами;
  • складніше спроєктувати ефективні протоколи серверів;
  • діагностика розподіленої взаємодії може бути складною;
  • погано реалізований IPC створює суттєві накладні витрати.

QNX є відомим промисловим прикладом мікроядерної системи. seL4 демонструє можливість формальної верифікації важливих властивостей мікроядра. Сам термін «мікроядро» не гарантує безпеки: якість залежить від реалізації, конфігурації та решти системи.

8. Гібридне ядро

Гібридна модель поєднує ідеї монолітних і мікроядерних систем. Архітектура може мати мікроядерне походження або структурні межі, але для продуктивності значну частину служб виконує в Kernel Mode.

Windows NT часто описують як гібридну архітектуру: вона має розділені компоненти, HAL, Kernel та Executive, але багато системних служб і драйверів працюють у привілейованому просторі. XNU у macOS поєднує Mach, BSD і I/O Kit, тому його також класифікують як гібридне ядро.

Перевага гібридного підходу - можливість поєднати структурованість із практичною продуктивністю та сумісністю. Ризик - система може успадкувати складність обох підходів, а назва «гібридна» сама по собі мало говорить про конкретну межу відмови. Потрібно аналізувати компоненти, а не лише етикетку.

9. Екзоядро

Екзоядро (exokernel) мінімізує нав'язані ядром високорівневі абстракції. Ядро безпечно розподіляє та захищає фізичні ресурси, а бібліотечна ОС у просторі застосунку будує потрібні абстракції, наприклад власну політику пам'яті або файлового доступу.

Переваги:

  • застосунок може спеціалізувати політики під конкретне навантаження;
  • менше непотрібних шарів між програмою й ресурсом;
  • зручний простір для дослідження нових абстракцій.

Обмеження:

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

Екзоядро не дає програмам безконтрольного доступу до обладнання. Його ключова роль саме в безпечному мультиплексуванні ресурсів.

10. Порівняння компромісів

КритерійМонолітнаМікроядернаГібриднаЕкзоядерна
обсяг коду в Kernel Modeвеликиймінімальнийзначний, але структурованиймінімум для захисту й розподілу
взаємодія службвнутрішні викликиIPC між серверамипоєднання викликів та IPCбібліотечні абстракції над ресурсами
типова сильна сторонапродуктивність і зріла інтеграціяізоляція та аналізованістьпрактичний баланс і сумісністьспеціалізація політик
типовий ризиквелика межа відмовинакладні витрати та складні протоколивисока загальна складністьскладність розробки й сумісності
прикладиLinux, багато UnixQNX, seL4Windows NT, XNUMIT Exokernel як дослідницька система

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

11. Безпечна модель вибору

Наступна програма не вимірює реальні ядра й не змінює систему. Вона лише робить задані ваги компромісів явними:

models = {
    "монолітна": {"швидкодія": 5, "ізоляція": 2, "гнучкість": 3},
    "мікроядерна": {"швидкодія": 3, "ізоляція": 5, "гнучкість": 4},
    "гібридна": {"швидкодія": 4, "ізоляція": 3, "гнучкість": 4},
    "екзоядерна": {"швидкодія": 4, "ізоляція": 4, "гнучкість": 5},
}

weights = {"швидкодія": 2, "ізоляція": 5, "гнучкість": 1}

for name, scores in models.items():
    total = sum(scores[key] * weights[key] for key in weights)
    print(f"{name}: {total}")

Очікуваний результат для цих навчальних оцінок:

монолітна: 23
мікроядерна: 35
гібридна: 27
екзоядерна: 33

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

12. Поетапна практична робота

Крок 1. Відтворення

Запустіть модель з наведеними вагами. Перевірте кожну суму вручну. Наприклад, для мікроядерної моделі: 3 * 2 + 5 * 5 + 4 * 1 = 35.

Крок 2. Модифікація

Для мультимедійної робочої станції задайте вагу швидкодії 5, ізоляції 2, гнучкості 2. Порівняйте результат, але не називайте найбільшу суму доказом переваги реальної ОС: початкові оцінки навчальні.

Крок 3. Прикладний вибір

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

Підсумок

  • Апаратні привілеї не дозволяють звичайній програмі довільно керувати всією системою.
  • Застосунки переважно працюють у User Mode, а ядро - у Kernel Mode.
  • Системний виклик є контрольованим переходом до служби ядра, а не довільним стрибком у привілейований код.
  • На x86 ядро зазвичай використовує Ring 0, застосунки - Ring 3; поняття rings не є універсальною назвою режимів усіх процесорів.
  • Монолітне ядро забезпечує прямі внутрішні виклики, але має велику привілейовану базу.
  • Мікроядро виносить служби в User Mode, покращуючи ізоляцію ціною додаткових IPC і переходів.
  • Гібридне ядро практично поєднує кілька підходів, але потребує аналізу реальних меж компонентів.
  • Екзоядро захищає й розподіляє ресурси, залишаючи високорівневі абстракції бібліотечним ОС.
  • Архітектуру обирають за вимогами та вимірюваннями; універсально найкращої моделі немає.

Завдання

1. Чому прикладні програми зазвичай виконуються в User Mode?

2. У якому кільці x86 зазвичай виконується ядро сучасної ОС? Запишіть лише номер.

3. Що робить процесор, коли програма в User Mode намагається виконати привілейовану інструкцію?

4. Яку архітектурну модель найточніше пов'язати з Linux?

5. Який типовий компроміс мікроядерної моделі?

6. Який принцип є центральним для екзоядра?