- •1. Завдання апаратного захисту
- •2. Підтримка керування пам'яттю
- •2.1. Віртуальні адреси
- •2.2. Віртуальна пам'ять
- •1. Завдання апаратного захисту
- •2. Підтримка керування пам'яттю
- •2.1. Віртуальні адреси
- •2.2. Віртуальна пам'ять
- •2.3. Трансляція адрес
- •3. Підтримка керування процесами
- •4. Особливості архітектури процесорів Intel х86
- •4.1. Регістри процесорів х86
- •4.2. Селектори та дескриптори сегментів і сторінок
- •5. Керування оперативною пам'яттю
- •5.1. Сегментний розподіл пам'яті
- •10. Порівнюються cpl, rpl і dpl:
- •5.2. Сегментно-сторінковий розподіл пам'яті
- •6. Керування задачами
- •6.1. Виклик процедур
- •6.2. Виклик задач
- •6.3. Привілейовані команди
2.3. Трансляція адрес
Трансляцію віртуальних адрес у фізичні може бути виконано в кілька етапів; це
залежить від того, яку модель використання пам'яті підтримують апаратні засоби і ОС [92]. Є принципово різні способи трансляції адрес. Один із них передбачає одноразову трансляцію адрес у момент початкового завантаження програми в пам'ять, після чого у програмі використовуються не віртуальні, а фізичні адреси. Перевага цього способу полягає у тому, що програми виконуються набагато швидше; недоліком є унеможливлення перенесення програмного крду і даних з одного місця фізичної пам'яті в інше. Інший спосіб динамічна трансляція адрес. У програмному коді залишаються віртуальні адреси, які транслюються у фізичні під час кожного звернення до оперативної пам'яті. Завдяки динамічній трансляції під час виконання програми црограмний код можна перемістити з одного місця фізичної пам'яті в інше.
На рис. 10.4 показано трансляцію віртуальної адреси у фізичну для сторінкового розподілу пам'яті. Слід звернути увагу на легкість формування фізичної адреси: старші розряди адреси — це номер фізичної сторінки, а молодші розради — зміщення, яке автоматично переноситься з віртуальної адреси, позаяк розміри і межі віртуальних і фізичних сторінок збігаються.

Рис. 10.4. Трансляція віртуальної адреси у разі дворівневої сторінкової організації пам'яті (зміщення у фізичній сторінці збігається із зміщенням у віртуальній сторінці)
Розглянемо схему трансляції адрес для сегментно-сторінкового розподілу, яку широко застосовують на практиці, зокрема у процесорах Intel х86 (рис. 10.5). Як видно з наведеної на рисунку схеми, трансляція відбувається у два етапи. Спочатку за схемою сегментного розподілу, обчислюється лінійна віртуальна адреса, яка потім транслюється у фізичну адресу за схемою сторінкового розподілу.
3. Підтримка керування процесами
Сучасні ОС виконують такі завдання з керування процесами (задачами) [92, 93]:
створення і знищення процесів;
забезпечення процесів необхідними ресурсами;
планування і диспетчеризація процесів (розподіл процесорного часу між процесами);
+ підтримка взаємодії між процесами.
Деякі із зазначених завдань виконують виключно програмні засоби, а деякі реалізовано частково програмно, а частково апаратно. Наприклад, створення, знищення і планування процесів реалізовано програмно, а диспетчеризацію процесів — за інтенсивного застосування апаратних засобів. До завдань планування належать такі;
визначення часу, коли буде змінено процес, що виконується;
вибирання з черги готових процесів наступного процесу для виконання.
Переключення процесів, тобто звільнення процесора від виконання попереднього процесу і здійснення всіх необхідних дій для початку виконання наступного процесу, є завданням диспетчеризації.
Виконання всіх цих завдань суттєво впливає на певні аспекти безпеки:
надійність і стабільність роботи ОС;
гарантованість забезпечення процесів необхідними ресурсами;
здатність ОС протистояти некоректним діям з боку окремих процесів, наприклад, спроб:
несанкціонованого доступу до системних ресурсів;
захоплення великих об'ємів ресурсів або їх монополізації;
несанкціонованого запуску нових процесів;
несанкціонованого доступу до ресурсів інших процесів (програмного коду, пам'яті).
Щоб реалізувати керування процесами, використовують дві структури — дескриптор процесу і контекст процесу.
Дескриптор процесу — це структура даних, яка містить необхідну для планування процесів інформацію. Операційна система заносить у дескриптор (різні операційні системи підтримують різні формати цієї структури), зокрема, такі дані:
ідентифікатор процесу;
відомості про розташування виконуваного модуля в оперативній пам'яті;
інформацію щодо привілейованості процесу;
дані про пріоритет процесу;
інформацію щодо прав доступу до процесу.
Приклади дескрипторів процесів: у системі UNIX — структура ргос, у системі Windows — object-process (об'єкт-процес), у системі OS/2 — РСВ (Process Control Block — блок керування процесом), OS/360 — ТСВ (Task Control Block — блок керування задачею).
Контекст процесу — це структура даних, яка містить інформацію, необхідау для диспетчеризації процесів. Основним призначенням контексту є збереження всієї інформації, необхідної для поновлення виконання процесу після його переривання. Це, по-перше, стан компонентів комп'ютера в момент переривання процесу, зокрема, вміст регістрів процесора, режим його роботи, прапорці, маски переривань, значення лічильника команд і, по-друге, параметри операційного середовища, а саме: посилання на відкриті файли, дані про незавершені операції введен-ня-виведення, коди помилок системних викликів, що виконуються процесом, тощо. Приклади контекстів процесів: у системі UNIX — структура user, у системі Windows — TSS (Task State Segment).
До функцій захисту, які реалізують за допомогою безпосередньо засобів планування і диспетчеризації процесів, належать:
♦ контроль за виділенням процесам процесорного часу з метою запобігання перевищенню квот або монополізації процесора;
4- контроль за викликами одними процесами інших задля забезпечення встановлених правил доступу.
Здійснювати контроль за викликами процесів можна, застосовуючи дискреційні та мандатні принципи керування доступом. У першому випадку в дескрипторі процесу має бути передбачена область даних, яка визначає права доступу інших процесів на запуск» зміну стану і пріоритету, знищення цього процесу або інші дії, що можуть бути виконані над дескриптором процесу, коли сам процес не виконується (тобто знаходиться у стані готовності або очікування). Права доступу можуть визначатися за допомогою списку керування доступом. Слід зауважити, що список керування доступом є досить великою структурою, і роботу з ним складно (хоча й можливо) організувати на апаратному рівні.
Набагато легше реалізувати мандатне керування доступом. Така реалізація значно ефективніша» легко досягається апаратними засобами, тому не лише швидка, але й надійна, через що її частіше застосовують. Кожному процесу надається певний рівень виконання, який позначається цілим числом. У найпростішому випадку процеси з нижчим рівнем виконання не зможуть викликати програмний код, якому присвоєний вищий рівень, а також отримати доступ до пов'язаних з ним структур даних. Таким чином утворюються так звані кільця захисту. Коли їх реалізують апаратно, максимальна кількість кілець захисту визначається за допомогою апаратури (центрального процесора), але ОС може і не використовувати ці можливості повною мірою. Більшість RISC-процесорів підтримують лише два рівні виконання процесів, тобто два кільця захисту, — рівень ядра (Kernel Mode) і рівень користувача (User Mode), або рівень прикладних програм. Відповідно й ОС, розроблені для таких процесорів (різні версії UNIX і Windows), підтримують лише два рівні виконання процесів. Популярні процесори Intel х86 (починаючи з 80286) підтримують чотири кільця захисту. Є такі ОС, що повністю використовують цю властивість процесорів (найпопулярнішою з них була OS/2).
Захист дескрипторів і контекстів процесів від несанкціонованого доступу здійснюється засобами контролю доступу до областей оперативної пам'яті, оскільки щ структури переважно розташовані саме в системній області оперативної пам'яті.
