- •1. Завдання апаратного захисту
- •2. Підтримка керування пам'яттю
- •2.1. Віртуальні адреси
- •2.2. Віртуальна пам'ять
- •1. Завдання апаратного захисту
- •2. Підтримка керування пам'яттю
- •2.1. Віртуальні адреси
- •2.2. Віртуальна пам'ять
- •2.3. Трансляція адрес
- •3. Підтримка керування процесами
- •4. Особливості архітектури процесорів Intel х86
- •4.1. Регістри процесорів х86
- •4.2. Селектори та дескриптори сегментів і сторінок
- •5. Керування оперативною пам'яттю
- •5.1. Сегментний розподіл пам'яті
- •10. Порівнюються cpl, rpl і dpl:
- •5.2. Сегментно-сторінковий розподіл пам'яті
- •6. Керування задачами
- •6.1. Виклик процедур
- •6.2. Виклик задач
- •6.3. Привілейовані команди
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 дескриптори) і відтак займає рівно одну сторінку. Таблиця розділів завжди присутня у пам'яті, її фізична адреса міститься в регістрі сгЗ.
