Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонов О.С., Хiхловська I.В. Обчислювальна тех...doc
Скачиваний:
15
Добавлен:
01.09.2019
Размер:
4.12 Mб
Скачать

7.2.3 Організація 32-розрядних мікропроцесорів (Для поглибленого вивчення)

З появою 32-розрядних процесорів найбільш перспективною стає сегментована захищена модель, у якій пам’ять складається з захищених незалежних сегментів, які можна цілком переміщати з жорсткого диску у ОЗП та навпаки. Кожній з програм у багатозадачному режимі надаються сегменти стеку, коду та до 4-х сегментів даних. Некоректні звернення до пам’яті додатків блокуються системою захисту, а для запису та читання кодів у якості даних потрібні деякі штучні засоби — перевизначення сегментів.

Мікропроцесор І80386 призначений для виконання 32-розрядних операцій, але він може функціонувати як швидкі МП І8086 та МП І80286. МП І80386 може працювати у реальному, захищеному режимах та режимі віртуального І8086. Різниця між цими режимами полягає у способах адресації та обсязі адресованої пам’яті. У реальному режимі МП І80386 працює як 16-розрядний І8086 і може адресувати пам’ять обсягом 1 Мбайт. У захищеному режимі МП працює як 16-розрядний І80286 та адресує пам’ять 1 Гбайт або як 32-розрядний з можливістю адресування пам’яті 4 Гбайти; можлива також організація пам’яті з сторінковою підтримкою та апаратна підтримка захисту пам’яті від несанкціонованого доступу, реалізуються принципи захищеного режиму адресації пам’яті.

Коли виконуються команди з даними 32-розрядної довжини, МП І80386 використовує 8- або 32-розрядні зміщення і будь-який регістр, крім ESP, може бути використаний як базовий або індексний. При виконанні команд з даними 16-розрядної довжини у якості базових регістрів виступають регістри BX, BP, індексних – SI,DI, зміщення може становити 0, 8, 16 біт.

Програмна модель МП І80386 вміщує регістри загального призначення EAX, EDX, ECX, EBX, регістри-вказівники ESP, EBP, ESI, EDI, сегментні регістри CS, SS, DS, ES, FS, GS, вказівник команд ЕІР, регістр прапорців EFLAGS.

РЗП вміщують підмножину регістрів МП І8086, мають довжину 32 розряди і можуть вміщувати адреси та дані. В них зберігаються дані довжиною 1, 8, 16, 32 або при використанні двох регістрів 64 біти, або розрядні поля від 1 до32 біт, адреси довжиною 16 або 32 біт. Програмна модель МП показана на рис. 7.20

31

16

15

0

7

0

7

0

EAX

AH

AL

акумулятор в командах

множення, ділення, вводу-виводу

EDX

DH

DL

ECX

CH

CL

лічильник

EBX

BH

BL

регістр бази

EPB

BP

ESI

SI

індексні регістри, вказівники в

строкових командах

EDI

DI

ESP

SP

вказівник стека

Рисунок 7.20 – Регістри загального призначення

РЗП називаються EAX, EBX, ECX, EDX, ES; регістри вказівники – EBP, ESP, індексні регістри – ESI, EDI. Доступ до молодших 16 розрядів цих регістрів виконується при використанні імен 16-розрядних регістрів AX, BX, CX, DX, SI, DI, BP та SP. Розширений вказівник команд (EIP) є 32-розрядний регістр. Він вміщує відносну адресу наступної виконуваної команди. Доступ до молодших 16 розрядів регістра EIP здійснюється при використанні 16-розрядного імені регістра ІР. Це може знадобитися при виконанні програм, для мікропроцесорів І8086 та І80286, які мають тільки регістр ІР. Регістр прапорців EFLAGS керує введенням-виведенням, перериваннями, які можна маскувати, налагодженням програм та систем, перемиканням задач, включенням та виконанням задач МП І8086 у віртуальному режимі у захищеному багатозадачному середовищі.

Молодші 16 розрядів регістра EFLAGS є 16-розрядний регістр прапорців з назвою FLAGS. Регістр EFLAGS показано на рис. 7.21.

31

16

15

0

EIP

IP

EFLAGS

FLAGS

FLAGS

31

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Резерв

VF

RF

//

NT

IOPL

OF

DF

IF

TF

SF

ZF

//

AF

//

PF

//

CF

Рисунок 7.21 – Регістр вказівника команд та прапорці

Прапорці результату, які вміщуються у регістрі FLAGS:

CF(0) – прапорець перенесення із старшого розряду. CF встановлюється, якщо у результаті виконання операції є перенесення (при складанні) або зайом (при відніманні) відповідно з старшого або у старший розряд. Для 8-, 16-, 32-розрядних операцій CF встановлюється відповідно при перенесенні з розрядів 7, 15, 31.

AF(4) – прапорець допоміжного перенесення. AF встановлюється, якщо у результаті виконання операції додавання чисел в упакованому форматі BCD виникає перенесення з розряду 3 незалежно від довжини операндів – 8, 16 або 32 розряди.

OF(11) – прапорець переповнення, встановлюється, якщо у результаті виконання операції виникає знакове переповнення.

ZF(6) – прапорець нуля, встановлюється, якщо результат операції дорівнює 0.

SF(7) – прапорець знаку, встановлюється, якщо встановлено старший розряд результату, для 8-, 16- та 32-розрядних операндів SF співпадає зі значенням розрядів 8, 16, 31.

PF(2) – прапорець паритету (парності), встановлюється, якщо молодший байт результату операції вміщує парну кількість одиниць.

Прапорці керування:

DF(10) – прапорець напрямку, вказує напрямок проходження операндів при виконанні операцій з ряжками (0 – у напрямку збільшення адрес, 1 – у напрямку зменшення адрес, при адресуванні за участю індексних регістрів SI та DI).

IF(9) – прапорець переривань, дозволяє (1) сприйняття переривань, які надходять з входу TNTR.

IOPL(12, 13) – прапорець привілеїв, вказує на максимальне значення поточного рівня привілеїв (CPL).

TF(8) – прапорець трасування, при TF = 1 МП переводиться у покроковий режим для налагодження програми.

NT(14) – прапорець вкладеності задач, встановлюється у 1, якщо вирішувана задача вкладена у іншу задачу; значення NT у EFLAGS перевіряється при виконанні команди IRET для визначення, звідки треба вибрати адресу повернення:

при NT = 0 IRET вибирає адресу з поточного стека,

при NT = 1 IRET вибирає адресу з сегмента стану поточної задачі (TSS).

VM(17) – прапорець режиму, VM встановлюється у 1 тільки у захищеному режимі при бажанні включення віртуального I8086.

RF(16) – прапорець відновлення, при RF = 1 використовується режим налагодження з точками зупину.

Сегментні регістри:

Шість 16-розрядних сегментних регістрів вміщують значення селекторів сегментів, які у реальному режимі адресації вказують на поточні сегменти адрес пам’яті: CS – сегментний регістр кодів команд програми, регістр сегмента стека SS і чотири регістра сегментів даних DS, ES, FS, GS (рис. 7.22).

Регістри дескрипторів сегментів

Селектори

Додаткова інформація

Байт прав доступу сегмента

Базова адреса сегмента

Границя сегмента

15

0

7

0

23

0

15

0

CS

Сегмента кодів

CS-

SS

Стекового сегмента

SS-

DS

Сегмента даних

DS-

ES

Сегмента даних

ES-

FS

Сегмента даних

FS-

GS

Сегмента даних

GS-

15

0

63

48

47

40

39

16

15

0

Сегментні регістри (завантажуються програмою)

Регістрова кеш-пам’ять дескрипторів сегментів (цю невидиму для програм надоперативну пам’ять завантажує CPU)

Рисунок 7.22 – Сегментні регістри

При адресації операнда або команди всередині сегмента до базової адреси сегмента додається 32-розрядна відносна адреса.

Для адресації пам’яті у захищеному режимі у МП І80386 є “невидимі” для програм користувача регістри дескрипторів (описувачі) сегментів, у яких зберігається інформація, яка керує пам’яттю. До 16-розрядних регістрів МП І8086 додані 64-розрядні дескриптори сегментів. МП І8086 вибирає дескриптори сегментів з таблиць дескрипторів, використовуючи сегментний регістр як індекс завантаження до цієї таблиці.

МП І8086 перетворює логічні адреси (використані програмістом у програмі) у фізичні адреси двома засобами:

  • перетворенням сегмента, коли логічна адреса (вміст селектора сегмента та зміщення сегмента) перетворюється у лінійну адресу;

  • перетворенням сторінки, коли лінійна адреса перетворюється у фізичну адресу.

Обидва способи є скриті від програміста і підтримуються апаратно.

На рис. 7.23 показано узагальнену схему перетворення адрес у МП І80386.

Рисунок 7.23 — Процес перетворення адреси в МП 80386

На рис. 7.24 показано, як перетворюється вміст сегментного регістра та зміщення (логічна адреса) на лінійну адресу – перша фаза.

Рисунок 7.24 – Перетворення сегмента

При сегментній організації пам’яті цієї фази достатньо для отримання фізичної адреси комірки пам’яті.

При сторінковій адресації потрібно виконати ще одну фазу перетворення — лінійна адреса перетворюється у фізичну.

Лінійну адресу можна трактувати як складену з трьох полів: каталогу, сторінки та зміщення. На рис. 7.25 показано дворівневу систему використання таблиці сторінок. Поле “Каталог” вказує на таблицю сторінок, яка відноситься до конкретного елемента каталогу, а поле “Сторінка” використовується як індекс у таблиці сторінок, які визначаються каталогом; поле “Зміщення” використовується як адреса байта всередині сторінки, вказаної таблицею сторінок, яка є область 1К 32-розрядних елементів.

Рисунок 7.25 – Перетворення сторінок

Для адресації пам’яті використовуються два рівня таблиць. На вищому рівні знаходиться каталог сторінок, який адресує до 1К сторінок таблиць другого рівня. Таблиця сторінок другого рівня адресує до 1Кбайта сторінок другого рівня. Вся таблиця адресується одною сторінкою каталогу, тому у сукупності можна адресувати 1Мбайт сторінок. Розмір однієї сторінки вибраний 4Кбайт, таким чином, таблиці одного каталогу сторінок можуть адресувати всю область фізичних адрес МП І80386 (2020). Фізична адреса поточного каталогу сторінок зберігається у регістрі CR3 МП. Програми керування пам’яттю можуть задати один каталог для всіх задач, по одному каталогу сторінок на кожну задачу або комбінації з кількох каталогів. Для підвищення продуктивності при перетворюванні адрес МП зберігає найбільш часто використовувані адреси таблиці сторінок у внутрішній кеш-пам’яті, яка має назву буфер швидкої переадресації. Якщо у кеш-пам’яті немає сторінкової інформації, треба звертатися до обох рівнів таблиць сторінок. Керувати кеш-пам’яттю може тільки системний програміст.

Слід відмітити, що при сегментній адресації пам’яті сегмент може або цілком знаходитись у пам’яті, або ні; при значних розмірах сегментів це призводить до перевантаження МП; сторінковий спосіб адресації є більш ефективним через невеликий розмір сторінки (4 Кбайти) та можливість часткового знаходження на жорсткому диску та у пам’яті.

МП І80386 має чотири рівні захисту привілеїв – для ізолювання програм користувача одна від одної і кожної з них від операційної системи і навпаки у багатозадачному режимі. Правила доступу до даних такі:

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

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

Захист МП І80386 вміщує п’ять компонентів:

1 Контроль типу дескриптора сегмента, який виконується для пошуку програмних помилок, при спробі використати сегменти у випадках, коли це не передбачено системним програмістом. МП перевіряє тип сегмента у двох випадках: коли селектор дескриптора завантажується у сегментний регістр і коли команда звертається до сегментного регістра, причому, наприклад, жодна команда не може нічого записувати у виконуваний сегмент, неможливе читання кодового сегмента, який має доступ тільки на виконання, неможливий запис у елемент даних, який має доступ тільки на читання, контролюється межею сегмента. Якщо при виконанні команд керування JMP, CALL та RET передача управління здійснюється всередині поточного кодового сегмента і тому контролюються тільки межею сегментів.

При міжсегментних переходах команди JMP і CALL можуть звертатись до інших сегментів, тому МП здійснює контроль привілеїв сегментів і дозволяє перехід безпосередньо між сегментами, або через шлюзи при виконанні певних умов.

При виконанні команди RET, якщо керування на повернення з процедури є внутрішньо сегментним, межі поточного сегмента не контролюються. Міжсегментна форма команди RET відновлює вказівник стека, і МП перевіряє привілеї сегментів, тому що є вірогідність пошкодження або зміни поточного стека.