Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Theme07.doc
Скачиваний:
5
Добавлен:
21.12.2018
Размер:
429.57 Кб
Скачать

Якщо цільовий сегмент є сегментом стека, то правило перевірки має вид

CPL-DPL=RPL.

У випадку його порушення також виникає виключення. Оскільки стек може використовуватися в кожнім сегменті коду і всього є чотири рівні привілеїв коду, то використовуються і чотири стеки. Сегмент стека, адресований регістром SS, повинний мати той же рівень привілеїв, що і поточний сегмент коду.

Правила для передачі керування, тобто коли здійснюється міжсегментний перехід з одного сегмента коду на інший сегмент коду, трохи складніше. Якщо для переходу з одного сегмента даних на інший сегмент даних вважається припустимим обробляти менш привілейовані сегменти, то передача керування з високо привілейованого коду на менш привілейований код повинна контролюватися додатково. Іншими словами, код операційної системи не повиннен довіряти коду прикладних задач. І навпаки, не можна просто так давати задачам можливість виконувати високо привілейований код, хоча потреба в цьому є завжди (адже багато функцій, у тому числі і функції введення/виведення, вважаються привілейованими і повинні виконуватися тільки самою ОС). Для реалізації можливостей передачі керування в сегменти коду з іншими рівнями привілеїв уведений механізм шлюзування, що ми коротенько розглянемо нижче. Отже, якщо DPL = CPL, то перехід в інший сегмент коду можливий. Більш докладний розгляд порушених питань за задумом авторів виходить за рамки дійсного підручника. Тут ми розглянемо тільки основні ідеї.

7. Механізм шлюзів для передачі керування на сегменти коду з іншими рівнями привілеїв.

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

Мал. 7.9 Механізм шлюзів для переходу на другий рівень привілеїв.

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

Для одержання доступу до більш привілейованого коду задача повинна звернутися до нього не безпосередньо (шляхом вказівки дескриптора цього коду), а звертанням до шлюзу цього сегмента (мал. 3.10).

У цьому дескрипторі замість адреси сегмента вказуються селектор, що дозволяє знайти дескриптор шуканого сегмента коду, і адреса (зсув призначення), з якого буде виконуватися підлеглий сегмент, тобто повна 32 бітна адреса. Формат дескриптора шлюзу приведений на мал. 3.11. Адресувати шлюз виклику можна за допомогою команди CALL. Власне кажучи, дескриптори шлюзів виклику не є дескрипторами (сегментів), але вони можуть бути розташовані серед звичайних дескрипторів у дескрипторних таблицях процесу. Зсув, що вказується в команді переходу на інший сегмент (FAR CALL), ігнорується, і фактично здійснюється перехід на команду, адресу якої визначається через зсув зі шлюзу виклику. Цим гарантується попадання тільки на дозволені крапки входу в підлеглі сегменти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]