Рівні привілеїв для захисту адресного простору задач.
Для того щоб заборонити користувацьким задачам модифікувати області пам'яті, що належать самій ОС, необхідно мати спеціальні засоби. Одного розмежування адресних просторів через механізм сегментів мало, тому що можна вказувати різні значення адреси початку сегмента і тим самим одержувати доступ до чужих сегментів. Іншими словами, необхідно в явному виді розмежовуватисистемні сегменти даних і коду від сегментів, що належать користувацьким програмам. Тому були введені два основних режими роботипроцесора: користувача і супервізора. Більшість сучасних процесорів мають принаймні два цих режими. Так, у режимі супервізорапрограмаможе виконувати всі дії і мати доступ до будь-яких адресів, тоді як у режимі користувачаповинні бути обмеження, для того щоб виявляти іприпиняти заборонені дії, перехоплюючи їхній і передаючи керування супервізоруОС. Часто і режиму користувача забороняється виконання команд введення/виведення і деяких інших, щоб гарантувати, що тільки ОС виконує ці операції. Можна сказати, що ці два режимимають різні рівні привілеїв.
У мікропроцесорахi80x86 маються недва, а чотири рівні привілеїв. Часто рівні привілеїв називають кільцями захисту, оскільки це іноді допомагає пояснити принцип дії самого механізму; тому говорять, що деякий програмний модуль «виконується в кільці захисту з таким-то номером». Для вказівки рівня привілеїв використовуються два біти, тому код 00 позначає самий вищий рівень, а код 11 (=3) — самий нижчий. Найвищий рівень привілеїв призначений для операційної системи (насамперед, для ядра ОС), найнижчий — для прикладних задач користувача. Проміжні рівні привілеїв введені для більшої свободи системних програмістів в організації надійних обчислень при створенні ОС і іншого системного ПЗ. Передбачалося, що рівень з номером (кодом) 1 може бути використаний, наприклад, для системного сервісу — програм обслуговування апаратури, драйверів, що працюють з портами введення/виведення. Рівень привілеїв з кодом 2 може бути використаний для створення користувацьких інтерфейсів, систем керування базами даних і т.п., тобто для реалізації спеціальних системних функцій, що стосовно супервізора ОС поводяться як звичайні додатки. Так, наприклад, система OS/2 використовує три рівні привілеїв: з нульовим рівнем привілеїв виконується код самої ОС, на другому рівні виповнюються системні процедури підсистеми введення/виведення, на третьому рівні виповнюються прикладні задачі користувачів. Однак найчастіше на практиці використовуються тільки два рівні — нульової і третій. Таким чином, згаданий режим супервізора для мікропроцесорів і80x86 відповідає виконанню коду з рівнем привілеїв 0 (його позначають так: PL0 – privilege level). Підводячи підсумок, можна констатувати, що саме рівень привілеїв задач визначає, які команди в них можна використовувати і яка підмножина сегментів і/чи сторінок у їхньому адресному просторі вони можуть обробляти.
Основними системними об'єктами, якими маніпулює процесор при роботі в захищеному режимі, є дескриптори. Дескриптори сегментів містять інформацію про рівень привілею відповідного сегмента чи коду даних. Рівень привілею задачі, що виконується, визначається значенням поля привілею, що знаходиться в дескрипторі її поточного кодового сегмента. Нагадаємо, що в кожнім дескрипторі сегмента (див. мал.3.3) мається поле DPL у байті прав доступу, що і визначає рівень привілею зв'язаного з ним сегмента. Таким чином, поле DPL поточного сегмента коду стає полем CPL. При звертанні до якого-небудь сегмента і відповідному селекторі вказується запитуваний рівень привілеїв RPL (див. мал. 3.4).
У межах однієї задачі використовуються сегменти зрізним рівнем привілею й у визначені моменти часу виконуються чи обробляються сегменти з відповідними їм рівнями привілею. Механізм перевірки привілеїв працює в ситуаціях, які можна назвати міжсегментними переходами (звертаннями). Це доступ до сегмента даних чи стековому сегменту, міжсегментні передачі керування у випадку переривань (і особливих ситуацій), при використанні команд CALL, JMP, INT, IRET, RET. У таких міжсегментних звертаннях беруть участь два сегменти: цільовий сегмент (до якого ми звертаємося) і поточний сегмент коду, з якого йде звертання.
Процесор порівнює згадані значення CPL, RPL, DPL і на основі поняття ефективного рівня привілеїв(EPL = max (RPL, DPL)) обмежує можливості доступу до сегментів за наступними правилами, у залежності від того, чи йде мова про звертання до коду чи до даних.
При доступі до сегментів даним перевіряється умова CPL <= EPL Порушення цієї умови викликає так звану особливу ситуацію помилки захисту і виникає переривання. Рівень привілею сегмента даних, до якого здійснюється звертання, повинний бути таким же, як і поточний рівень, чи менше його. Звертання до сегмента з більш високим рівнем привілею сприймається як помилка, тому що існує небезпека зміни даних з високим рівнем привілеїв у програмі з низьким рівнем привілею. Доступ до даних з меншим рівнем привілею дозволяється.
Дата добавления: 2016-07-27; просмотров: 2036;