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

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

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

Цілі лекції

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

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

Передумови

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

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 (англ. Advanced RISC Machine — архітектура процесорів ARM), наприклад, використовує рівні винятків EL0, EL1 та інші.

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

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

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

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

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

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

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

Переваги:

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

Обмеження:

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

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

7. Мікроядро

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

Переваги:

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

Обмеження:

  • більше IPC (англ. Inter-Process Communication — міжпроцесна взаємодія) і переходів між адресними просторами;
  • складніше спроєктувати ефективні протоколи серверів;
  • діагностика розподіленої взаємодії може бути складною;
  • погано реалізований 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 (англ. New Technology — сімейство операційних систем Windows), XNU (англ. X is Not Unix — ядро macOS)MIT 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. Який принцип є центральним для екзоядра?