Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БІКС 2015_1 / Лек 6 Захист інформації на рівні операційної системи.doc
Скачиваний:
76
Добавлен:
12.02.2016
Размер:
3.66 Mб
Скачать

4.2. Селектори та дескриптори сегментів і сторінок

Селектор — це 16-розрядна структура, яка завантажується в сегментні регістри

<пиг 1fi fi^

Рис. 10.6. Формат селектора сегмента

Селектор адресує не сам сегмент, а його дескриптор. Дескриптори розташовані в таблицях, причому в певний момент процесору доступні дві таблиці: глобальна (спільна для всіх процесів) і локальна — таблиця поточного процесу. 13 старших розрядів селектора є індексом у таблиці дескрипторів. Таким чином, кожна таб­лиця може містити 213вв8192 дескриптори. Один розряд селектора (біт 2), позна­чений прапорцем ТІ, вказує на таблицю, де розташовано дескриптор: ТІ*0 вказує на GDT, ТІ~1 — на LDT. Інші 2 розряди селектора (біт 1, біт 0) задають рівень привілеїв (Requested Privilege Level, RPL), що використовує механізм захисту.

Дескриптор сегмента має 8-6айтову структуру. На рис. 10.7 показано формат

дескрйішрра сегмента» а в табл. 10.2 наведено значення його йолів. Звернемо ува­гу на два найголовніших іюля дескриптора: 32-розрядну базову адресу (base) і 20-розрядну межу сегмента (limit).

Рис. 10.7. Формат дескриптора сегмента

Базова адреса вказує на початок сегмента в пам'яті. На відміну від реального режиму роботи процесора, в захищеному режимі передбачено використання вір­туальної пам'яті. Коли було впроваджено 32-розрядну адресну шину і в дескрип­торі сегмента під базову адресу виділено 4 байти (2, 3, 4 і 7), тобто з'явилася можливість прямої адресації 4 Гбайт, обсяг фізичної пам'яті комп'ютера, побудо­ваного на процесорах х86, становив 1-2 Мбайт. Навіть і тепер, майже через 20 ро­ків, комп'ютери архітектури х86 не завжди мають 4 Гбайт фізичної пам'яті. Тому 32-розрядні адреси, які містять дескриптори, а також ті, що використовує проце­сор для адресації команд та їхніх операндів (які отримують додаванням 32-роз-рядного зміщення до 32-розрядної базової адреси відповідного сегмента), адресу­ють віртуальний адресний простір.

Ці адреси називають лінійними. Перетворення лінійної адреси на фізичну здійснюють по-різному, залежно від моделі використання пам'яті, зокрема від то­го, чи застосовується сторінкове керування.

Таблиця 10.2. Поля дескриптора сегменту

Номер байта

Ширина поля

Символьне

Призначення і вміст полів

в дескрипторі

(розряди)

позначення

16

limit_l

Молодші 16 розрядів 20-розрядного поля межі сегмента.

Межа сегмента визначає його розмір у байтах або 4-кілобайтових сторінках, залежно від значення біта G

16

base_l

Молодші 16 розрядів 32-розрядного поля бази сегмента.

База сегмента визначає лінійну адресу

А

8

baseJ2

початку сегмента у пам'яті

н

Розряди 16...23 32-розрядного поля бази

1

8 4

сегмента

6 (біти 0...3)

AR

limit_2

Байт захисту

Старші 4 розряди 20-розрядного поля

О іоіт А\

ЗР

межі сегмента

U (User)

Біт користувача.

Не має спеціального призначення і використовується програмістом на

6 (біт 5)

1

його розсуд

Н) — біт не використовується

Межа сегмента визначає його розмір. Якщо задіяні для цього 20 розрядів інтерпретувати як розмір у байтах (коли прапорець гранулярності G дорівнює 0), то максимальний розмір сегмента становитиме 1 Мбайт, а якщо у 4-кілобайтових сторінках (прапорець гранулярності G дорівнює 1) — 4 Гбайт.

Окрім прапорця гранулярності важливий також для інтерпретації адрес пра­порець розрядності D. Якщо D = 0, використовуються 16-розрядні операнди і ре­жими 16-розрядної адресації, а якщо D = 1 — 32-розрядні операнди і режими 32-розрядної адресації.

Поля та прапорці, які стосуються захисту сегмента, зведені у спеціальний байт дескриптора, що має назву байт захисту (позначається AR). На рис. 10.8 по­казано формат байта захисту, а в табл. 10.3 наведено призначення полів.

Рис. 10.8. Формат байта захисту дескриптора сегмента Таблиця 10.3. Поля байта захисту дескриптора сегмента

Номер біта

Символьне

Призначення і вміст полів

в байті AR

позначення

0

A (Accessed)

Біт доступу до сегмента. Встановлюється апаратно під час звернення до сегмента

1

R (Readable)

Для сегментів коду це біт доступу, який визначає право на читання:

=0 — читання із сегмента заборонено; =1 — читання із сегмента дозволено

W (Writable)

Для сегментів даних це біт доступу, який визначає

можливість модифікації даних:

Н) — записування в сегмент заборонено;

~1 — записування в сегмент дозволено

Таблиця 10.3 {закінчення)

Номер біта Символьне Призначення І вміст полів

в байті AR позначення j^jjt

2 С (Conforming) Для сегментів коду це біт підпорядкованості:

-0 — звичайний сегмент коду; Щт підпорядкований сегмент коду

ED (Expand Down) Для сегментів даних це біт розширення вниз, який

дає можливість розрізняти сегменти даних і стека, а також визначає трактування поля limit: -0 — сегмент даних (зростає в бік старших адрес); =-1 — сегмент стека (зростає в бік молодших адрес)

3 Е (Execution) Біт призначення, який визначає тип сегмента: або I (Intending) -0 — сегмент даних або стека;

-1 — сегмент коду

4 S (Segment/System) -0 — біт «системний», який вказує на те, що цей

дескриптор описує системний об'єкт, який може бути чи не бути сегментом у пам'яті -1 — біт «сегмент», який вказує, що цей дескриптор описує сегмент, тип якого і порядок використання уточнюються бітами I, C/ED, R/W

5...6 DPL (Descriptor Рівень привілеїв сегмента, який визначає рівень

Privilege Level) виконання від 0 до 3. (0 — найвищий рівень, який

зазвичай використовується для ядра ОС, З — найнижчий рівень)

7 Р (Present) Біт присутності:

-0 — сегмента в поточний момент в оперативній пам'яті немає;

"1 — сегмент у поточний момент знаходиться в оперативній пам'яті

Хоча чотири молодші розряди байта захисту називають полем типу сегмента (typeseg), тип сегмента задається не розрядами 0...3, а розрядами 1...4. Розряд 0 встановлюється у разі доступу до сегмента і може бути використаний операцій­ною системою під час реалізації алгоритмів керування віртуальною пам'яттю. Розряд 4 визначає об'єкт, який описує цей дескриптор: чи він є сегментом у пам'яті, чи спеціальним системним об'єктом (деякі системні об'єкти теж являють собою спеціальні сегменти у пам'яті — таблиці дескрипторів або сегменти стану задачі). Розряди 1...3 визначають, власне» тип сегмента і права доступу до нього. У табл. 10.4 проілюстровано сукупну «роботу» цих розрядів. Габлиця 10.4. Значення поля типу сегмента

Біт S

Комбінація бітів

Тип сегмента

у полі type_seg

0

0100

Таблиця локальних дескрипторів (LDT)

0

0001

Сегмент стану задачі (TSS)

1000

1101

Ш1

ОООх

/Ойгмент даних, тільки для читання

ООІх

Сегмент даних, дозволено читання і записування

1

ОЮх

Не визначено

Ще два розряди байта захисту дескриптора — 5 і 6 — визначають рівень при­вілеїв дескриптора (Descriptor Privilege Level, DPL). Разом із рівнем привілеїв селектора RPL і поточним рівнем привілеїв процесу, що виконується (Current Privilege Level, CPL), ці рівні дають змогу організувати розмежування доступу до сегментів за мандатним принципом (так звані кільця захисту) [91].

Якщо включено сторінковий механізм керування пам'яттю (біт pg регістра сгО дорівнює 1), то з дескриптора визначається лінійна базова адреса сегмента, а після додавання до неї зміщення — лінійна адреса даних. Для обчислення фізич­ної адреси здійснюється сторінкове перетворення. Більш докладно цей процес буде розглянуто далі, а тепер звернемо увагу лише на пов'язані з ним структури даних.

Лінійна адреса — 32-розрядна, старші 20 розрядів інтерпретуються як номер сторінки, а молодші 12 — як зміщення у сторінці. Номер сторінки інтерпрету­ється як індекс дескриптора сторінки, а з дескриптора визначається номер у фі­зичній пам'яті, який водночас становить старші 20 розрядів 32-розрядної фізич­ної базової адреси сторінки. На рис. 10.9 показано формат дескриптора сторінки, а в табл. 10.5 наведено значення його полів.

Окремі розділи таблиці сторінок може бути витіснено з фізичної пам'яті на диск. При цьому кожний розділ таблиці має розмір 4 Кбайт (210 - 1024 дескрип­тори) і відтак займає рівно одну сторінку. Таблиця розділів завжди присутня у пам'яті, її фізична адреса міститься в регістрі сгЗ.