Лекция: Архітектура 32-розрядних мікропроцесорів

Існуючі 32-розрядні МП і386, i486, Pentium, Pentium Pro і Pentium II мають розрядність регістрів та шини адреси, яка дорівнює 32. Шина даних для процесорів і386, i486 є 32-розряд-ною, а для процесорів Pentium, Pentium Pro і Pentium II — 64-розрядною. Вони дають змогу адресувати 4 Гбайт пам'я­ті за наявності засобів підтримки сегментної та сторінкової адресації пам'яті. Процесори мають чотирирівневу систему захисту пам'яті та портів введення-виведення, можуть пра­цювати у багатозадачному режимі. До режимів роботи МП i80286 доданий Virtual Real Mode — режим віртуального процесора i8086. Мікропроцесори допускають паралельну роботу кількох віртуальних процесорів i8086 під керуван­ням операційної системи типу Windows, OS/2, Unix. Проце­сори оперують з бітами, полями бітів, 8-, 16- та 32-бітовими операндами, рядками бітів, байтів, слів (16-розрядних даних) і подвійних слів (32-розрядних даних). В архітектуру про­цесорів введено засоби налагодження і тестування.

Програмна модель.Програмну модель 32-розрядного про­цесора наведено на рис. 3.8. Вона містить такі групи регістрів:

регістри загального призначення, лічильник команд, регістр прапорців, сегментні регістри, регістри керування, системні адресні регістри, регістри налагодження та тестування.

 

 

Рис. 3.8. Програмна модель 32-розрядного процесора

 

Регістри загального призначення містять усі регіст­ри даних і регістри-покажчики МП i8086 та i80286 і стільки само додаткових 32-розрядних регістрів. У позначенні 32-розрядних регістрів використовується літера Е (Expanded розширений).

Лічильник команд ЕІР містить зміщення наступної виконуваної команди в сегменті кодів. Для 16-розрядних адрес використовуються молодші 16 розрядів (IP).

Регістр прапорців EF розширено до 32 розрядів. Мо­лодші 16 розрядів регістра EF створюють регістр прапорців F 16-розрядного процесора. У регістр EF додано нові пра­порці:

ID (Identification Flag) — прапорець дозволу команди ідентифікації CPU ID (Pentium+ і деякі процесори типу 486)*;

VIP (Virtual Interrupt Pending) — віртуальний запит переривання (Pentium+);

VIF (Virtual Interrupt Flag) — віртуальна версія пра­порця дозволу переривання IF для багатозадачних систем (Pentium+);

AC (Alignment Check) — прапорець контролю вирівню­вання. Використовується лише на рівні привілеїв 3. Якщо АС = 1 і AM = 1 (AM — біт у регістрі керування CRQ), то у разі звернення до операнда, не вирівняного за відповідною межею (2, 4, 8 байт)**, відбувається виняток 17 (i486+);

VM (Virtual 8086 Mode) — у захищеному режимі вми­кає режим віртуального процесора 8086. Спроба викорис­тання привілейованих команд у цьому випадку приведе до винятку 13;

RF (Resume Flag) — прапорець поновлення. У режимі налагодження одиничне значення RF дозволяє здійснити рестарт команди після особливого випадку налагодження.

Сегментні регістри. Крім сегментних регістрів МП i8086 та i80286 (DS, CS, SS, ES), програмна модель містить два додаткових сегментних регістри даних — FS і GS. З кожним з шести сегментних регістрів пов'язані тіньові регістри дескрипторів. У тіньові регістри у захищеному режимі переписують­ся 32-розрядна базова адреса сегмента, 20-розрядна межа й атрибути (права доступу) з дескрипторних таблиць.

 

* У подальшому позначення i386+, i486+, Pentium+ означають, що наведені дані справедливі для вказаної моделі МП і всіх старших мо­делей.

** Вирівнювання операнда по межі 2,4,8 означає, що адреса операн­да є кратною, тобто 2, 4, 8.

Керуючі регістри CR0 — CR3(Control Register) збері­гають ознаки стану процесора, спільні для всіх задач. Мо­лодші чотири розряди регістра CR0містять біти регістра MSW МП i80286 і деякі інші біти керування. Регістр CR1зарезервовано; регістр CR2зберігає 32-розрядну лінійну адресу, за якою отримано відмову сторінки пам'яті; регістр CR3 у старших 20 розрядах зберігає фізичну базову адресу таблиці каталога сторінок і біти керування кеш-пам'яттю, а регістр CR4(Pentium+) містить біти дозволів архітектур­них розширень МП.

Системні адресні регістри. Системні покажчики (ре­гістри глобальної дескрипторної таблиці GDTR і таблиці переривань IDTR) зберігають відповідно 32-розрядні базові адреси і 16-розрядні межі таблиць. Системні сегментні регіст­ри задач TR і локальної дескрипторної таблиці LDTR є 6-розрядними селекторами. їм відповідають тіньові регістри дескрипторів, які містять 32-розрядну базову адресу сегмен­та, 20-розрядну межу і права доступу.

Регістри налагодження DR0—DR3(Debug Register) зберігають 32-розрядні адреси точок зупину в режимі нала­годження, DR4—DR5зарезервовані і не використовуються; DR6— відображує стан контрольної точки; DR7— керує розміщенням у програмі контрольних точок.

Регістри тестування TR (Test Register) входять до групи модельно-специфічних регістрів, їхній склад і кількість залежать від типу процесора: в МП 386 використовувалися два регістри — TRTR7, у Pentium-12 – TR1–TR12. Ця група регістрів зберігає результати тестування МП і кеш-пам'яті.

Сегментна організація пам'яті.У 32-розрядних МП роз­різняють три адресні простори пам'яті — логічний, лінійний і фізичний. Логічна адреса (або віртуальна) складається з селектора і зміщення ЕА. Лінійна адреса утворюється дода­ванням базової адреси сегмента до ефективної адреси. Фізична адреса пам'яті створюється після перетворення лінійної адреси блоком сторінкової переадресації.

Організація пам'яті залежить від режиму роботи МП. У ре­альному і віртуальному режимах i8086 адресація пам'яті така сама, як у МП i8086. У захищеному режимі здійснюється сегментна і сторінкова організація пам'яті. Сегментна організація використовується на прикладному рівні, а сторін­кова — на системному. Формування адреси комірки пам'яті у захищеному режимі подано на рис. 3.9. Блок сегментації перетворює простір логічних адрес на простір лінійних адрес. Вихідними даними для блока сегментації є зміщення ЕА у сегменті та сегментний регістр, які задаються у команді. Вміст сегментного регістра у захищеному режимі є селектором. Він містить інформацію про тип дескрипторної таблиці (глобаль­ної або локальної) та індекс дескриптора (див. рис. 3.1). Індекс дескриптора є номером дескриптора у таблиці. Де­скриптор містить базову адресу сегмента. Лінійна адреса ство­рюється додаванням базової та ефективної адрес згідно з рис. 3.2.

 

Рис.3.9. Формування адреси комір­ки пам'яті у захищеному режимі

 

Блок сторінкової переадресації формує фізичну адресу пам'яті. За вимкненого блока лінійна адреса збігається з фізичною. Блок обчислення ефективної адреси обчислює адресу-зміщення операнда у сегменті за одним з наступних типів адресації, наведених у табл. 3.3. Алгоритм обчислення адреси комірки пам'яті для різних типів адресації показано на рис. 3.10. Регістри загального призначення МП можуть виконувати функції таких регістрів: базового Base, індексно­го Index, масштабуваиня множника Scale і зміщення Disp. У табл. 3.4 подано використання цих регістрів залежно від режимів адресації: 16- або 32-розрядної. Масштабовані типи адресації можливі лише у 32-розрядному режимі адресації.

 

Таблиця 3.3. Типи адресації у 32-розрядних процесорах

Тип адресації Обчислення ЕА
Регістрова ЕА = вмісту РЗП
Пряма ЕА = Disp
Непряма регістрова ЕА = Base
Базова ЕА = Base + Disp
Індексна ЕА — Index + Disp
Масштабована індексна ЕА = Scale x Index + Disp
Базова індексна ЕА = Base + Index
Масштабована базова індексна EA = Base + Index ´ Scale
Базова індексна зі зміщенням EA- Base + Index +Disp
Масштабована базова індексна зі зміщенням EA = Base + Index ´ Scale + Disp

У реальному режимі за замовчуванням використовується 16-бітова адресація, але за допомогою префікса зміни роз-рядності адреси можна перемкнути на 16-розрядний режим. У захищеному режимі тип адресації залежить від біта D у дескрипторі кодового сегмента (за D = 0 використовується 16-розрядна адресація, а за D = 1 — 32-розрядна).

Використання сегментних регістрів під час адресації пам'яті визначається типом звернення до пам'яті (табл. 3.5). Для деяких типів звернень допускається заміна сегментного регістра, що вводиться, застосуванням префіксів команд CS:, DS:, SS:, ES:, FS:, GS:, наприклад

ADD FS:[ESI],EAX; [FS.ESI] [FS:ESI]+EAX.

 

Рис. 3.10. Алгоритм обчислення ад­реси комірки пам'яті для різних типів адресації

 

Tаблиця 3.4. Використання РЗП під час обчислення ефективної адреси

Компонент Адресація
16-розрядна 32-розрядна
Базовий регістр (Base) ВХ або ВР Будь-який 32-розрядний РЗП
Індексний регістр (Index) SI або DI Будь-який 32-розрядний РЗП, крім ESP
Масштаб (Scale) 1,2,4або8
Зміщення (Disp) 0,8 або 16 біт 0, 8 або 32 біт

Таблиця 3-5. Використання сегментних регістрів для адресації пам'яті

Тип звернення до пам'яті Сегментний регістр Змі­щення
за замовчу­ванням альтернативний
Вибірка команд CS Немає IP, EIP
Стекові операції SS Немає SP, ESP
Адресація змінної DS CS, ES, SS, ES, GS ЕА
Рядок-джерело DS CS, ES, SS, ES, GS SI
Рядок-приймач ES Немає DI
Використання ВР, ЕВР або ESP як базо­вого регістра SS CS, ES, DS, ES, GS ЕА

Приклад 3.6.Знайти значення фізичної адреси операнда в команді пересилання у регістр AL вмісту комірки пам'яті

 

MOVAL, [ВХ + 4 SI + 1000H],

 

якщо базова адреса сегмента даних дорівнює 12 456 789H, а вміст регістрів ВХ = 0120H, SI = 1234H. Блока сторінкової переадресації немає.

Ефективна адреса комірки пам'яті

ЕА = 0120H + 4 ∙ 1234H + 1000H = 59F0H.

Виконавши операцію додавання 32-розрядної базової адреси з ефек­тивною адресою ЕА, отримаємо лінійну адресу, яка збігається і з фізич­ною адресою:

12456789H + 59F0H = 1245С179H.

Отже, фізична адреса дорівнює 1245С179H.

Формування базової адреси сегмента пояснює рис. 3.11. Поле ТІ селектора сегмента визначає робочу дескрипторцу таблицю (глобальну або локальну), де знаходиться початко­ва адреса сегмента.

Поле RPL визначає запрошений рівень привілею сегмента, а поле Index —зміщення від початкової адреси таблиці. За­значимо, що початкова адреса таблиці зберігається або у регістрі GDTR — для глобальної таблиці, або у тіньовому ре­гістрі. В останньому випадку регістр LDTR, в свою чергу, є селектором і вказує, де в глобальній дескрипторній таблиці знаходиться інформація про початкову адресу локальної таб­лиці. Ця інформація переписується у тіньовий регістр.

Формат дескриптора для 32-розрядних процесорів пода­но на рис. 3.12. Дескриптор МП i80286 містить нуль у бітах 63 — 48, а поля базової адреси і межі займають відповідно 24 і 16 біт. У 32-розрядному МП поле базової адреси займа­ють другий, третій, четвертий і сьомий байти дескриптора. У процесі виконання команди ці байти об'єднуються в одну 32-розрядну базову адресу.

Рис. 3.11. Формування базової адреси сегмента

 

Рис. 3.12. Формат дескриптора для 32-розрядних процесорів

 

Поле межі займає байти з номерами 0, 1 і молодші чотири біти шостого байта дескриптора. Межа задає максимальне зміщення у сегменті або останню одиницю, що адресується в сегменті. За 20-розрядної межі максимальне значення еле­ментів, що адресуються, становить 220. Оскільки елементом сегмента є не лише байт, а й сторінка 4 Кбайт, сегмент може містити від одного байта до 4 Гбайт. Байт з номером 5 дес­криптора AR (Access Rights) містить право доступу, зокрема, такі біти керування: Р (Present) — біт наявності; DPL (Descripter Privilege Level) — поле рівня привілеїв сегмен­та; S (System) — системний біт; Туре — поле типу сегмента; A (Accessed) — біт звернення.

Біт присутності Р дорівнює одиниці, якщо сегмент знаходиться у фізичній пам'яті (ОЗП). У системі віртуаль­ної пам'яті операційна система може передавати вміст деяких сегментів на диск, при цьому вона скидає біт Р у стан логіч­ного нуля в дескрипторі цього сегмента. Якщо програма після цього знову звертається до сегмента, виникає особливий ви­падок відсутності сегмента. Операційна система шукає вільну область фізичної пам'яті (при цьому, можливо, відправляє на диск деякий інший сегмент), копіює вміст запрошеного сегмен­та з диска у пам'ять, записує в його дескриптор нову базову адресу та здійснює рестарт команди, що викликала особли­вий випадок 11 відсутності сегмента. Описаний процес нази­вають свопінгом (swapping), або довантаженням.

Поле рівня привілеїв сегмента DPL містить 2 біти. Найвищому рівню привілею відповідає значення 0, найниж­чому — значення 3.

Системний біт S має нульове значення (S = 0) у дес­крипторах сегмента кодів, системних сегментів для зберіган­ня локальних таблиць дескрипторів, станів задач TSS (Task State Segment) та у дескрипторах, що називають вентилями (Gate), або шлюзами. В інших випадках 5=1.

Рис. 3.13. Формат вентилів

Вентиль містить інформацію про логічну адресу входу до деякої системної програми і займає 8 байт. Формат вентилів показано на рис. 3.13.

Вентилі призначені для передавання керування і містять логічну адресу переходу у вигляді селектора SELECTOR і 32-розрядного зміщення OFFSET. Вентилі виклику використовують для викликів процедур зі зміною рівня привілеїв, вентилі задач — для перемикання задач, вентилі перери­вань та вентилі пастки — для переходу до процедур обслу­говування переривань, при цьому вентилі переривань забо­роняють переривання (відбувається скидання прапорця IF), а вентилі пастки — не забороняють.

Поле WORD COUNT (див. рис. 3.13) у вентилях викли­ку визначає кількість слів, які копіються зі стеку однієї про­цедури у стек іншої процедури. Для інших вентилів поле WORD CO UNT містить нульові значення.

Поле типу сегмента Туре займає три розряди і визна­чає тип сегмента згідно з табл. 3.6.

Біт звернення А. У сегментах коду і даних А = 0 озна­чає, що до сегмента не було звернень. У системних об'єктах поле Туре разом з бітом А визначає тип системного об'єкта (див. табл. 3.6).

У старшій тетраді шостого байта дескриптора знаходяться такі біти керування:

G (Granularity) — біт гранулярності. Якщо G = 0, одини­цею пам'яті в сегменті є байт, а якщо G = 1, — сторінка завдовжки 4 Кбайт;

D (Default size) — біт розміру. Якщо D = 0, операнди в пам'яті вважають 16-розрядними, а якщо D = 1, — 32-розрядними. Застосовується для сумісності з МП i80286;

U (User) — біт користувача. Може бути встановлений або відбутися скидання програмно.

Як видно з опису дескриптора, 32-розрядний МП дозволяє створювати сегменти, в яких можуть виконуватися операції зчитування, читання-записування, виконання або виконання-зчитування. Для створення характерних для МП i8086 сег­ментів, у яких виконуються одночасно всі перелічені опе­рації, використовують перекриття сегментів пам'яті, тобто початкова адреса одного сегмента є адресою іншого

Таблиця 3.6. Типи сегментів і системних об'єктів

Туре А Тип сегмента Дозволені операції
Сегменти кодів і даних
0 0 0 А Даних Тільки зчитування
0 0 1 А —«—- Зчитування і запис
0 1 0 А Стеку Тільки зчитування
0 1 А —«— Зчитування і запис
1 0 0 А Коду Тільки виконання
1 0 1 А —«— Виконання і зчитування
1 1 0 А Підлеглий сегмент коду** Тільки виконання
1 1 1 А —«— Виконання і зчитування
Системні сегменти***
0 0 0 Доступний сегмент TSS стану задачі* i80286
0 0 1 Таблиця локальних дескрипторів LDT
0 0 1 Зайнятий сегмент TSS стану задачі i80286
1 0 0 Доступний сегмент TSS стану задачі i386+
1 0 1 Зарезервовано
1 0 1 Зайнятий сегмент TSS стану задачі* i386+
Вентилі***
0 1 0 Вентиль виклику i80286 {Call Gate)
0 1 0 Вентиль задачі i80286 (Task Gate)
0 1 1 Вентиль переривання i80286 (Interrupt Gate)
0 1 1 Вентиль пастки i80286 (Trap Gate)
1 1 0 Вентиль виклику i386 + (Call Gate)
1 1 0 Вентиль задачі i386 +(Task Gate)
1 1 1 Вентиль переривання i386 + (Interrupt Gate)
1 1 1 Вентиль пастки i386 + (Trap Gate)

Примітки: *На практиці такі сегменти стеку не використо­вуються.

** Підлеглі сегменти кодів подано у п. 3.2.4.

*** Інші стани полів Туре та А не використовуються.

.

Сторінкова організація пам'яті.Цей тип організації, зде­більшого застосовують у системах віртуальної пам'яті, що

дає змогу програмісту використовувати більший простір ад­рес, ніж існуюча фізична пам'ять. Враховуючи властивість просторової локальності кодів і даних (близького розміщен­ня необхідних комірок пам'яті), доцільно оперувати не бай­тами, а деякими невеликими модулями пам'яті — сторінками. За сторінкового перетворення весь лінійний адресний простір 32-розрядного МП ємністю 4 Гбайт розбивається на 2 сторі­нок по 4 Кбайт. Фізичний простір пам'яті мікропроцесорної системи також розбивається на сторінки, причому у фізичній пам'яті сторінок значно менше 2. Наприклад, за ємності па­м'яті 4 Мбайт кількість фізичних сторінок (їх ще називають сторінковими кадрами, або page frame) становить 2. Відсутні у ВІС фізичної пам'яті зберігаються у зовнішній пам'яті (на-копичувачі на твердому магнітному диску) і за потреби за­вантажуються у фізичну пам'ять, тобто відбувається процес свопінгу. Прикладні програми можуть розпоряджатися всім простором віртуальної пам'яті — 4 Гбайт. Процес сторінко­вого перетворення адреси подано па рис. 3.14.

У процесі перетворення старші 20 біт 32-розрядної лінійної адреси замінюються іншим 20-розрядним значенням — но­мером фізичної сторінки згідно з механізмом перетворення адреси (див. рис. 3.14). Регістр керування CR3 PDBR (Раде Directory Base Register) (див. п. 3.2) містить фізичну базо­ву адресу каталога сторінок. Каталог сторінок знаходиться у фізичній пам'яті постійно і не бере участі у свопінгу. Він містить 1024 32-розрядні адреси PDE (Page Directory Entry). Кожна з них є початковою адресою таблиць сторінок. Таблиця сторінок PTE (Page Table Entry) містить адреси сторінкових кадрів у фізичній пам'яті.

Рис. 3.14. Сторінкове перетворення адреси

 

Фізична базова адреса каталога сторінок формується із значення рядка таблиці сторінок РТЕ і 12 розрядів зміщен­ня лінійної адреси.

Захист за привілеями.Систему привілеїв призначено для запобігання недозволеним взаємодіям користувачів, несанкціо­нованому доступу до даних, пошкодженню програм і даних. Частково ці задачі розв'язуються організацією захищеного режиму пам'яті, частково — захистом за привілеями; 32-роз­рядні процесори підтримують чотири рівні привілеїв 0 — 3, причому рівень 0 є найбільш привілейованим. Рівень 0 за­звичай присвоюється ядру операційної системи, рівень 1 — системним сервісам, рівень 2 — розширенням операційної системи і рівень 3 — прикладним програмам користувача. Під час виконання програми контролюється, чи може про­грама:

• здійснювати привілейовані команди;

• звертатися до даних інших програм;

• передавати керування іншій програмі командами пере­давання керування типу FAR.

До привілейованих команд належать команди, що зміню­ють сегментацію, впливають на механізм захисту, модифіку­ють прапорець дозволу переривань IF. За спроби виконати ці команди на рівнях привілеїв 1, 2, 3 генерується виняток 13.

Для контролю звернення програми до даних інших про­грам використовуються поля CPL (Current Privilege Level або Code Privilege Level — поточний рівень привілеїв; за­дається полем RPL селектора CS) і дескриптора даних DPL. Доступ до даних дозволяється якщо .

Передавання керування програм різних рівнів привілеїв здійснюється за допомогою використання:

• підлеглих сегментів коду;

• дескрипторів вентилів викликів (шлюзів).

У підлеглих сегментах виконання команд можливе, якщо поточний рівень привілеїв (CPL) не нижчий від рівня при­вілеїв дескриптора (DPL) підлеглого сегмента, у непідлег­лих — керування сегмента передається за CPL — DPL. За­звичай у підлеглих сегментах кодів розміщують бібліотеки, до яких можуть звертатися програми різних рівнів привілеїв. Використання підлеглих кодових сегментів не змінює поточ­ний рівень привілеїв. Єдиним способом зміни рівня привілею є використання вентилів викликів. Вентилі ідентифікують дозволені точки входу в кодові сегменти з більшим рівнем привілею. У дескрипторі вентиля задається повна адреса точки входу (селектор: зміщення) тієї процедури, якій пере­дається керування.

Перемикання задач.У багатозадачних системах і систе­мах з великою кількістю користувачів МП виконує деяку частину команд однієї задачі (програм), після цього перемикається на виконання іншої задачі і так триває доти, доки знову не повертається до першої задачі. Для підтримки ба-гатозадачного режиму в МП є такі засоби:

• сегмент стану задачі TSS;

• дескриптор сегмента стану задачі;

• регістр задачі TR;

• вентиль задачі.

Дескриптор сегмента стану задачі вказує на сегмент, що містить повний стан задачі, а вентиль задачі містить селектор, що вказує на дескриптор TSS. Регістр TR є селектором сегмента TSS поточної задачі. Кожна задача має свій сегмент стану. В сегменті TSS міститься інформація про стан проце­сора на час перемикання задач — вміст майже всіх регістрів МП, включаючи регістр прапорців, роздільні покажчики стеків для рівнів привілеїв 0, 1, 2 і посилання на селектор TSS задачі, що її викликала.

Перемикання задач здійснюється або за командами міжсег-ментних переходів JMP FAR чи викликів підпрограм CALL FAR, або за апаратними чи програмними перериваннями і винятками. У першому випадку програма має посилатися на сегмент стану задачі TSS або на дескриптори вентиля задачі в GDT(LDT), у другому — відповідний перериванню дес­криптор в таблиці переривань IDT має бути дескриптором вентиля задачі.

Під час передавання керування викликаній задачі за коман­дою IRET перевіряється прапорець вкладеної задачі NT (Nested Task). Якщо NT = 0, команда IRET працює у зви­чайному режимі, залишаючись у поточній задачі. Якщо NT = 1, команда IRET виконує перемикання на попередню задачу.

еще рефераты
Еще работы по информатике