Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1. СП.docx
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
324 Кб
Скачать
☆

Привілеї сегмента задаються полем dpl байта управління доступом.

DPL визначає найбільший номер рівня привілеїв (фактично, найменші привілеї), з яких можливий доступ до даного дескриптору. Самий захищений (привілейований) дескриптор має DPL = 0, до нього мають до ¬ ступ тільки задачі з CPL = 0. Самий загальнодоступний дескриптор має DPL = 3, його можуть використовувати завдання з CPL = 0, 1, 2, 3. Це правило застосовується до всіх дескрипторах, за винятком дескриптора LDT.

Привілеї селектора задаються полем RPL (Requested Privilege Level) - двома молодшими бітами селектора.

При зверненні в сегмент даних за допомогою RPL можна обмежити привілеї (щодо CPL), вводиться поняття ефективний рівень привілеїв EPL (Effective Privilege Level), ко ¬ торий визначається як максимальне з значень CPL і RPL, Селектор з RPL = 0 не вводить додаткових обмежень.

EPL = MAX ( CPL, RPL ) 

Контроль доступу до сегментів даних виробляється при виконанні команд, що завантажують селектори в SS, DS, ES, FS і GS. Команди завантаження DS, ES, FS і GS повинні посилатися на дескриптори сегментів даних або сегментів кодів, допус ¬ кающих читання. Для отримання доступу ефективний рівень привілеїв EPL повинен бути рівним або меншим (арифметично) рівня привілеїв DPL де ¬ скрипторій.

EPL £ DPL

Винятком з цього правила є читаний підлеглий сег ¬ мент коду, який може бути прочитаний завданням з будь-яким CPL. Якщо ефек ¬ вий рівень привілеїв не дозволяє доступ або посилання виробляється на некоректний тип дескриптора (на дескриптор шлюзу або на дескриптор тільки виконуваного кодового сегмента), виробляється виключення # GP. При посиланні на неіснуючий дескриптор виробляється виключення # NP.

Команди завантаження SS повинні посилатися на дескриптор сегменту даних, до-пускає запис. При цьому DPL і RPL повинні бути рівні CPL. Порушення цієї умови і посилання на дескриптор іншого типу породжують виключення # GP, при посиланні на неіснуючий дескриптор виробляється виключення # SS.

Контроль типів і привілеїв при передачі управління проводиться при завантаженні селектора в регістр CS. Тип дескриптора, на який посилається дан ¬ ний селектор, повинен відповідати виконуваної інструкції. Порушення типу (наприклад, посилання інструкції JMP на шлюз виклику) породжує исклю ¬ чення # GP. При передачі управління діють наступні правила привілей ¬ гий, порушення яких також призводить до виключення # GP:

•  Команди JMP або CALL можуть посилатися або на підлеглий сегмент коду з DPL, більшим чи рівним CPL, або на непідлегла сегмент з DPL рівним CPL;

• Переривання всередині завдання або виклики, які можуть змінити рівень привілеїв, можуть передавати управління кодовому сегменту з рівнем привілеїв, рівним або більшим рівня привілеїв CPL, тільки через шлюзи з тим же або меншим рівнем привілеїв, ніж CPL;

• Інструкції повернення, що не перемикають завдання, можуть передати управління тільки кодовому сегменту з таким же або меншим рівнем привілеїв;

• Перемикання завдань може виконуватися за допомогою виклику, переходу або переривання, які посилаються на шлюзи завдання або сегмент стану задачі (TSS) з тим же або меншим рівнем привілеїв.

Зміна рівня привілеїв, яка відбувається при передачі управління, автомати ¬ тично викликає перевизначення стека. Початкове значення покажчика стека SS: SP для рівня привілеїв 0, 1, 2 міститься в TSS. При передачі управ ¬ ня по командах JMP або CALL в CS: SP завантажується нове значення покажчика стека, а старі значення поміщаються в новий стек. При поверненні на колишній уро ¬ вень привілеїв його стек відновлюється (як частина інструкції RЕТ або IRЕТ). Для викликів підпрограм з передачею параметрів через стек і зміною рівня при ¬ привілеї з попереднього стека в новий копіюється фіксоване число слів, задане в шлюзі. Команда міжсегментного повернення RET з вирівнюванням ука ¬ зателя стека при поверненні коректно відновить значення попереднього покажчика.

ЗАХИСТ з привілеїв

    Специфічною особливістю захищеного режиму є захист з привілеїв. У процесорі є два рівня захисту: захист на рівні сегментів і захист на рівні сторінок.

    Захист на рівні сегментів

    Захист на рівні сегментів представлена ​​чотирма рівнями привілеїв. Найбільш привілейовані нульовий рівень, найменш привілейовані - третій. У реальних операційних системах зазвичай не використовуються всі чотири рівні. UNIX та Windows, наприклад, використовують тільки два рівня привілеїв - 0 (для ядра системи) і 3 (для всього іншого), а OS / 2 використовує рівні 0 (для ядра системи), 2 (для процедур введення-виведення) і 3 ( для прикладних програм).

    Для опису механізму захисту користуються такими поняттями:

    Рівень привілеїв дескриптора (Descriptor Privilege Level: DPL) - рівень привілеїв, на який поміщений описуваний дескриптором об'єкт. Поле DPL зберігається в байті прав доступу дескриптора.

    Поточний рівень привілеїв (Current Privilege Level: CPL) - рівень привілеїв виконуваного сегмента коду. Це значення відповідає DPL сегменту коду (крім підкоряємося сегментів коду). Значення CPL зберігається в полі RPL селектора сегмента коду, який поміщений в регістр CS.

    Запитуваний рівень привілеїв (Requested Privilege Level: RPL) - використовується для тимчасового зниження свого рівня привілеїв при зверненні до пам'яті. RPL заноситься в молодші біти селектора.

    Рівень привілеїв введення-виведення (Input / Output Privilege Level: IOPL) - вказує який рівень привілейовані для роботи з портами вводу-виводу. Це значення зберігається в регістрі EFLAGS і може бути різним для різних завдань (див. "Мультизадачність").

Захист на рівні сторінок

    Захист сторінок забезпечується двома рівнями привілеїв: супервізор і користувач. Рівню супервізора відповідають 0-й, 1-й, 2-й рівні привілеїв сегментів, а рівню користувача - 3-й. Для кожної сторінки вказується (в PDE / PTE), з якого рівня привілеїв вона доступна. Правило привілеїв таке: з рівня супервізора доступні всі сторінки, а з рівня користувача - тільки сторінки з бітом U / S = 1. Крім того, в PDE / PTE вказується тип доступу до сторінки (чи доступна сторінка для запису): R / W = 0 - тільки читання, R / W = 1 - доступні читання і запис. Слід зазначити дію біта 16 (Write Protect) в регістрі CR0. Коли цей біт виставлений, сторінки рівня користувача з поміткою "read-only" захищені від запису при зверненнях з рівня супервізора

25. Обчислення лінійної адреси в захищеному режимі.

У захищеному режимі існує три різних типи адрес і три відповідних їм адресних простору (address space):

 логічне (logical)

 лінійне (linear)

 фізичне (physical).

лінійний адресу

«Проміжний» адреса, вводить додатковий рівень абстракції, саме завдяки його існуванню можливе використання сторінкової адресації (докладніше - в розділі про віртуальну пам'ять). 32 розряду, плоске (несегментоване) адресний простір розміром 4 Гб.

Стосовно до пам'яті розрізняють три адресних простори: логічне, лінійне і фізичне. Основним режимом роботи 32розрядних проце

сорів вважається захищений режим, у якому працюють усі механізми пер етворення адресних просторів.

Логічна адреса

, також називана віртуальною, складається із селектора

сегмента (у реальному режимі просто адреси сегмен

та) і ефективної адреси, називаного також зсувом (offset). Ефективна адреса формується підсумовуванням компонентів base, index, displacement з урахуванням масштабу scale. Оскільки кожна задача може мати до 16 К селекторів, а зсув,

обмежений розміром

сегмента, може досягати 4 Гбайт, логічний адресний

простір для кожної задачі

може досягати 64 Тбайт. Весь цій простір віртуально

ї пам'яті в принципі

доступний програмісту (за умовою підтримки з боку о

пераційної системи).

Блок сегментації транслює логічний адресний простір

у 32бітний простір

лінійних адрес.

Лінійна адреса

утворюється додаванням базової адреси сегмента з

ефективною адресою. Базова адреса сегмента в реальн

ому режимі утворюється

множенням вмісту використовуваного сегментного регі

стра на 16 (як і в 8086). У

захищеному режимі базова адреса завантажується з де

скриптора, що зберігається

в таблиці, по селектору, завантаженому у використов

уваний сегментний регістр.

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