Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Безпека.docx
Скачиваний:
164
Добавлен:
31.08.2019
Размер:
6.2 Mб
Скачать

10.2.3. Трансляція адрес

Трансляцію віртуальних адрес у фізичні може бути виконано в кілька етапів; це залежить від того, яку модель використання пам'яті підтримують апаратні засоби і ОС [92]. Є принципово різні способи трансляції адрес.

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

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

Нa рис. 10.3 показано схему трансляції віртуальної адреси у фізичну для сегментного розподілу пам'яті.

Рис. 10.4. Трансляція віртуальної адреси у разі дворівневої сторінкової організації пам'яті (зміщення у фізичній сторінці збігається із зміщенням у віртуальній сторінці)

Рис. 10.3. Трансляція віртуальної адреси у разі, сегментної організації пам'яті (фізична адреса обчислюється додаванням зміщення до базової адреси сегмента)

На рис. 10.4 показано трансляцію віртуальної адреси у фізичну для сторінкового розподілу пам'яті. Слід звернути увагу на легкість формування фізичної адреси: старші розряди адреси — це номер фізичної сторінки, а молодші розряди зміщення, яке автоматично переноситься з віртуальної адреси, позаяк розміри і межі віртуальних і фізичних сторінок збігаються.

Віртуальна адреса

Розглянемо схему трансляції адрес для сегментно-сторінкового розподілу, яку широко застосовують на практиці, зокрема у процесорах Intel х86 (рис. 10.5). Як видно з наведеної на рисунку схеми, трансляція відбувається у два етапи. Спочатку за схемою сегментного розподілу, обчислюється лінійна віртуальна адреса, яка потім транслюється у фізичну адресу за схемою сторінкового розподілу.

10.3. Підтримка керування процесами

Сучасні ОС виконують такі завдання з керування процесами (задачами) [92, 93]:

  • створення і знищення процесів;

  • забезпечення процесів необхідними ресурсами;

  • планування і диспетчеризація процесів (розподіл процесорного часу між про­цесами);

♦ підтримка взаємодії між процесами.

Деякі із зазначених завдань виконують виключно програмні засоби, а деякі реалізовано частково програмно, а частково апаратно. Наприклад, створення, зни­щення і планування процесів реалізовано програмно, а диспетчеризацію проце­сів — за інтенсивного застосування апаратних засобів. До завдань планування на­лежать такі:

  • визначення часу, коли буде змінено процес, що виконується;

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

Рис. 10.5. Трансляція віртуальної адреси у разі сегментно-сторінкового розподілу пам'яті

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

Виконання всіх цих завдань суттєво впливає на певні аспекти безпеки:

♦ надійність і стабільність роботи ОС;

  • гарантованість забезпечення процесів необхідними ресурсами;

  • здатність ОС протистояти некоректним діям з боку окремих процесів, на приклад, спроб:

  • несанкціонованого доступу до системних ресурсів;

♦ захоплення великих об'ємів ресурсів або їх монополізації;

  • несанкціонованого запуску нових процесів;

  • несанкціонованого доступу до ресурсів інших процесів (програмного коду, пам'яті).

Щоб реалізувати керування процесами, використовують дві структури дескриптор процесу і контекст процесу.

Дескриптор процесу — це структура даних, яка містить необхідну для планування процесів інформацію. Операційна система заносить у дескриптор (різні oпeраційні системи підтримують різні формати цієї структури), зокрема, такі дані:

  • ідентифікатор процесу;

  • відомості про розташування виконуваного модуля в оперативній пам'яті;

  • інформацію щодо привілейованості процесу;

  • дані про пріоритет процесу;

♦ інформацію щодо прав доступу до процесу.

Приклади дескрипторів процесів: у системі UNIX — структура ргос, у систем і Windows — object-process (об'єкт-процес), у системі OS/2 — РСВ (Process Con­

trol Block — блок керування процесом), OS/360 — ТСВ (Task Control Block блок керування задачею).

Контекст процесу — це структура даних, яка містить інформацію, необхідну для диспетчеризації процесів. Основним призначенням контексту є збереження всієї інформації, необхідної для поновлення виконання процесу після його перери­вання. Це, по-перше, стан компонентів комп'ютера в момент переривання процесу, зокрема, вміст регістрів процесора, режим його роботи, прапорці, маски перери­вань, значення лічильника команд і, по-друге, параметри операційного середовища, а саме: посилання на відкриті файли, дані про незавершені операції введення-виведення, коди помилок системних викликів, що виконуються процесом, то­що. Приклади контекстів процесів: у системі UNIX — структура user, у системі Windows — TSS (Task State Segment).

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

♦ контроль за виділенням процесам процесорного часу з метою запобігання перевищенню квот або монополізації процесора;

♦ контроль за викликами одними процесами інших задля забезпечення встановлених правил доступу.

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

Набагато легше реалізувати мандатне керування доступом. Така реалізація значно ефективніша, легко досягається апаратними засобами, тому не лише швид­ка, але й надійна, через що її частіше застосовують. Кожному процесу надається певний рівень виконання, який позначається цілим числом. У найпростішому ви­падку процеси з нижчим рівнем виконання не зможуть викликати програмний код, якому присвоєний вищий рівень, а також отримати доступ до пов'язаних з ним структур даних. Таким чином утворюються так звані кільця захисту. Коли їх реалізують апаратно, максимальна кількість кілець захисту визначається за допо­могою апаратури (центрального процесора), але ОС може і не використовувати ці можливості повною мірою. Більшість RISC- процесорів підтримують лише два рівні виконання процесів, тобто два кільця захисту, — рівень ядра (Kernel Mode) і рівень користувача (User Mode), або рівень прикладних програм. Відповідно й ОС, розроблені для таких процесорів (різні версії UNIX і Windows), підтриму­ють лише два рівні виконання процесів. Популярні процесори Intel х86 (почи­наючи з 80286) підтримують чотири кільця захисту. Є такі ОС, що повністю ви­користовують цю властивість процесорів (найпопулярнішою з них була OS/2).

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