Апаратне забезпечення засобів захисту

Автор: Пользователь скрыл имя, 30 Марта 2013 в 12:01, реферат

Описание работы

Апаратне забезпечення засобів захисту
Керування пам'яттю: віртуальна пам'ять і трансляція адрес
Захист сегментів і сторінок пам'яті
Керування процесами (задачами)
Реалізація функцій захисту в процесорах Intel х86

Работа содержит 1 файл

Апаратне забезпечення засобів захисту.doc

— 1.12 Мб (Скачать)



 

 

 

 

 

 

 

 

 

 

 

У регістрах  загального призначення зберігаються операнди арифметичних і логічних операцій, компоненти адрес і покажчики  на комірки пам'яті. Всього є вісім 32-розрядних регістрів загального призначення: еах, ebx, есх, edx, esi, edi, esp, ebp. Для сумісності з програмами, написаними для попередніх 16-розрядних моделей процесорів, підтримуються звернення за іменами до молодших 16 розрядів кожного з цих регістрів і до окремих байтів із молодшої половини чотирьох арифметичних регістрів. Наприклад, еах — 32-розрядний регістр, ах — його розряди від 0 до 15, аl — його розряди від 0 до 7, ah — його розряди від 8 до 15. Переважну більшість цих регістрів програмісти можуть використовувати на свій розсуд, але в окремих командах деякі регістри мають певне значення, що впливає на їх основне використання і назву.

Адресувати будь-який об'єкт у пам'яті можна лише через сегмент, якому він належить. У програмній моделі процесорів х86 передбачено шість сегментних регістрів: cs, ss, ds, es, gs, fs. Кожен із них адресує певний сегмент у пам'яті. Залежно від типу сегмента існують обмеження на методи доступу до нього, про які мова йтиме далі. Деякі з сегментів адресуються неявно через відповідний сегментний регістр.

Усі регістри сегментів 16-розрядні, такими вони були ще у процесорі 8086 (регістри gs і fs було додано у пізніших моделях процесорів). У реальному режимі роботи процесора в ці регістри заносяться 16 старших розрядів 20-розрядних базових адрес сегментів, які є фізичними адресами початку відповідного сегмента в оперативній пам'яті. У захищеному режимі може підтримуватись як 16-, так і 32-розрядна адресація (починаючи з процесора Pentium Pro, реалізовано підтримку 36-розрядної адресації, але її особливості ми не розглядатимемо). Слід зазначити, що в сегментні регістри заносяться так звані селектори сегментів, які адресують не самі сегменти, а їхні дескриптори. Докладніше ці структури і роботу з ними буде розглянуто у підрозділі 10.4.2.

Регістри системних адрес містять покажчики на системні таблиці, призначені для керування пам'яттю та диспетчеризації процесів. Доступ до сегментів у пам'яті здійснюється через дескриптори, розміщені у двох доступних процесу таб-



Таблиця 10.1 (закінчення)

Позначення  Назва

Особливості використання

сг2

Призначений для роботи сторінкового механізму

 

віртуальної нам'яті. Містить лінійну віртуальну адресу

 

команди, яка викликала виняткову ситуацію 14

 

(відсутність  сторінки в пам'яті). Обробник  цієї

 

виняткової  ситуації після завантаження необхідної

 

сторінки  в пам'ять має змогу відновити  роботу

 

програми, передавши керування на адресу з  сг2

сгЗ

Призначений для роботи сторінкового механізму

 

віртуальної пам'яті. Містить фізичну базову адресу

 

каталогу сторінок

сг4

Містить прапорці-ознаки підтримки різних

 

архітектурних елементів, упроваджених у різних

 

моделях процесорів, наприклад, 36-розрядної

 

адресації, 4-мегабайтових сторінок тощо




 

 

 

 

 

 

лицях. Одну з них, яка містить  дескриптори, що описують програмний код і дані спільні для всіх процесів (бібліотеки, драйвери пристроїв тощо), та численні системні об'єкти, називають глобальною (Global Descriptor Table, GDT). Друга таблиця, локальна (Local Descriptor Table, LDT), доступна лише тому процесу, який виконується в даний момент. Кожний процес має власну локальну таблицю. На ці таблиці вказують відповідно регістри gdtr і Idtr. Також окремий регістр (idtг) вказує на таблицю дескрипторів переривань (Interrupt Descriptor Table, IDT).

Для диспетчеризації процесів основною структурою даних є контекст проце су, який знаходиться у спеціальному системному об'єкті та в обраній розробника ми процесора х86 термінології називається сегментом стану задачі (Task Status Segment, TSS). Цей об'єкт описує дескриптор, на який вказує регістр ts.

Сегменти, що вказують на глобальні  системні об'єкти (gdtr та idtr), містять базові лінійні адреси цих об'єктів, а також задають розмір об'єктів. Сегменти, що вказують на локальні для кожного процесу об'єкти (Idtr та tr), містять лише се лектори, які адресують відповідні дескриптори у глобальній таблиці. Отже, таблиця GDT містить дескриптори, що описують сегменти стану задач і локальні таблиці дескрипторів усіх процесів, які викопуються в системі. Для переходу до виконання іншого процесу необхідно лише завантажити у регістри Idtr та tr від повідні дескриптори.

Процесори х86 мають п'ять 32-розрядних регістрів, призначених  для загального керування системою (сг0-сг4). З-поміж цих регістрів доступні 4, регістр cr1 зарезервовано для подальшого застосування. Доступ до них мають лише програми, які виконуються з рівнем привілеїв 0 (тобто в нульовому кільці захисту).

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

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

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



 

 

 

 

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

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

 

 

 

 

 

Номер байта

Ширина поля

Символьне

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

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

(розряди)

позначення

 

0...1

16

limit_l

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

2...3

16

base_l

Молодші 16 розрядів 32-розрядного поля бази сегмента. База сегмента визначає лінійну адресу початку сегмента у пам'яті

4

8

base_2

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

5

8

AR

Байт  захисту

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

4

limit_2

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

6 (біт 4)

1

U (User)

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

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

6 (біт 5)

1

-

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



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


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

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


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



Дескриптор  сегмента має 8-байтову структуру. На рис. 10.7 показано формат дескриптора сегмента, а в табл. 10.2 наведено значення його полів. Звернемо увагу на два найголовніших поля дескриптора: 32-розрядну базову адресу (base) і 20-розрядну межу сегмента (limit).



 

 

 

 

 

 

 

 

 

 

 

 

 


Таблиця 10.2 (закінчення)

Номер байта в дескрипторі

Ширина  поля (розряди)

Символьне позначення

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

6 (біт 6)

1

D (Digit capacity)

Біт розрядності операндів і адрес. =0 — використовуються 16-розрядні операнди і режими 16-розрядної адресації

6 (біт 7)

1

G

(Granularity)

= 1 — використовуються 32-розрядпі операнди і режими 32-розрядпої адресації

Біт гранулярності. =0 — розмір сегмента задається значенням поля limit у байтах (максимальний розмір 1 Мбайт)

7

8

base_3

=1 — розмір сегмента задається значенням поля limit у 4-кілобайтових сторінках (максимальний розмір — 4 Гбайт) Старші 8 розрядів 32-розрядного поля бази сегмента



Номер біта

Символьне

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

в байті AR

позначення

 

0

A (Accessed)

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

1

R (Readable)

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

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

 

W (Writable)

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

можливість  модифікації даних: =0 — записування в сегмент заборонено; = 1 — записування в сегмент дозволено



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


Рис. 10.8. Формат байта захисту дескриптора сегмента


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

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

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

казано  формат байта захисту, а в табл. 10.3 наведено призначення полів.



 

 

 

 

 

 

Таблиця 10.4. Значення поля типу сегмента



Біт S

Комбінація бітів  у полі type_seg

Тип сегмента

0

0100

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

0

0001

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

 

1000

 
 

1101

 
 

1101

 

1

000х

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

1

001х

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

1

010х

Не  визначено



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


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

Номер біта

Символьне

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

в байті AR

позначення

 

2

С (Conforming)

Для сегментів коду це біт підпорядкованості: =0 — звичайний сегмент коду; =1 — підпорядкований сегмент коду

 

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 — найвищий рівень, який зазвичай використовується для ядра ОС, 3 — найнижчий рівень)

7

Ρ (Present)

Біт присутності:

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

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

Информация о работе Апаратне забезпечення засобів захисту