Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Існуючі 32-розрядні МП і 386, i 486, Pentium, Pentium Pro і Pentium II мають розрядність регістрів та шини адреси, яка дорівнює 32. Шина даних для процесорів і 386, i 486 є 32-розряд-ною, а для процесорів Pentium, Pentium Pro і Pentium II — 64-розрядною. Вони дають змогу адресувати 4 Гбайт пам'яті за наявності засобів підтримки сегментної та сторінкової адресації пам'яті. Процесори мають чотирирівневу систему захисту пам'яті та портів введення-виведення, можуть працювати у багатозадачному режимі. До режимів роботи МП i 80286 доданий Virtual Real Mode — режим віртуального процесора i 8086. Мікропроцесори допускають паралельну роботу кількох віртуальних процесорів i 8086 під керуванням операційної системи типу Windows, OS/2, Unix. Процесори оперують з бітами, полями бітів, 8-, 16- та 32-бітовими операндами, рядками бітів, байтів, слів (16-розрядних даних) і подвійних слів (32-розрядних даних). В архітектуру процесорів введено засоби налагодження і тестування.
Програмна модель. Програмну модель 32-розрядного процесора наведено на рис. 3.8. Вона містить такі групи регістрів:
регістри загального призначення, лічильник команд, регістр прапорців, сегментні регістри, регістри керування, системні адресні регістри, регістри налагодження та тестування.
Рис. 3.8. Програмна модель 32-розрядного процесора
Регістри загального призначення містять усі регістри даних і регістри-покажчики МП i 8086 та i 80286 і стільки само додаткових 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 (i 486+);
VM (Virtual 8086 Mode) — у захищеному режимі вмикає режим віртуального процесора 8086. Спроба використання привілейованих команд у цьому випадку приведе до винятку 13;
RF (Resume Flag) — прапорець поновлення. У режимі налагодження одиничне значення RF дозволяє здійснити рестарт команди після особливого випадку налагодження.
Сегментні регістри. Крім сегментних регістрів МП i 8086 та i 80286 (DS, CS, SS, ES), програмна модель містить два додаткових сегментних регістри даних — FS і GS. З кожним з шести сегментних регістрів пов'язані тіньові регістри дескрипторів. У тіньові регістри у захищеному режимі переписуються 32-розрядна базова адреса сегмента, 20-розрядна межа й атрибути (права доступу) з дескрипторних таблиць.
* У подальшому позначення i 386+, i 486+, Pentium+ означають, що наведені дані справедливі для вказаної моделі МП і всіх старших моделей.
** Вирівнювання операнда по межі 2,4,8 означає, що адреса операнда є кратною, тобто 2, 4, 8.
Керуючі регістри CR 0 — CR 3 (Control Register) зберігають ознаки стану процесора, спільні для всіх задач. Молодші чотири розряди регістра CR 0 містять біти регістра MSW МП i80286 і деякі інші біти керування. Регістр CR 1зарезервовано; регістр CR 2 зберігає 32-розрядну лінійну адресу, за якою отримано відмову сторінки пам'яті; регістр CR3 у старших 20 розрядах зберігає фізичну базову адресу таблиці каталога сторінок і біти керування кеш-пам'яттю, а регістр CR 4 (Pentium+) містить біти дозволів архітектурних розширень МП.
Системні адресні регістри. Системні покажчики (регістри глобальної дескрипторної таблиці GDTR і таблиці переривань IDTR) зберігають відповідно 32-розрядні базові адреси і 16-розрядні межі таблиць. Системні сегментні регістри задач TR і локальної дескрипторної таблиці LDTR є 6-розрядними селекторами. їм відповідають тіньові регістри дескрипторів, які містять 32-розрядну базову адресу сегмента, 20-розрядну межу і права доступу.
Регістри налагодження DR 0 —DR 3 (Debug Register) зберігають 32-розрядні адреси точок зупину в режимі налагодження, DR 4 —DR 5 зарезервовані і не використовуються; DR 6 — відображує стан контрольної точки; DR 7 — керує розміщенням у програмі контрольних точок.
Регістри тестування TR (Test Register) входять до групи модельно-специфічних регістрів, їхній склад і кількість залежать від типу процесора: в МП 386 використовувалися два регістри - TR 6 і TR 7, у Pentium-12 – TR 1 –TR 12. Ця група регістрів зберігає результати тестування МП і кеш-пам'яті.
Сегментна організація пам'яті. У 32-розрядних МП розрізняють три адресні простори пам'яті — логічний, лінійний і фізичний. Логічна адреса (або віртуальна) складається з селектора і зміщення ЕА. Лінійна адреса утворюється додаванням базової адреси сегмента до ефективної адреси. Фізична адреса пам'яті створюється після перетворення лінійної адреси блоком сторінкової переадресації.
Організація пам'яті залежить від режиму роботи МП. У реальному і віртуальному режимах i 8086 адресація пам'яті така сама, як у МП i 8086. У захищеному режимі здійснюється сегментна і сторінкова організація пам'яті. Сегментна організація використовується на прикладному рівні, а сторінкова — на системному. Формування адреси комірки пам'яті у захищеному режимі подано на рис. 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 + 1000 H ],
якщо базова адреса сегмента даних дорівнює 12 456 789 H, а вміст регістрів ВХ = 0120 H, SI = 1234 H. Блока сторінкової переадресації немає.
Ефективна адреса комірки пам'яті
ЕА = 0120 H + 4 ∙ 1234 H + 1000 H = 59 F0H.
Виконавши операцію додавання 32-розрядної базової адреси з ефективною адресою ЕА, отримаємо лінійну адресу, яка збігається і з фізичною адресою:
12456789 H + 59F0H = 1245С179 H.
Отже, фізична адреса дорівнює 1245С179 H.
Формування базової адреси сегмента пояснює рис. 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-розрядними. Застосовується для сумісності з МП i 80286;
U (User) — біт користувача. Може бути встановлений або відбутися скидання програмно.
Як видно з опису дескриптора, 32-розрядний МП дозволяє створювати сегменти, в яких можуть виконуватися операції зчитування, читання-записування, виконання або виконання-зчитування. Для створення характерних для МП i 8086 сегментів, у яких виконуються одночасно всі перелічені операції, використовують перекриття сегментів пам'яті, тобто початкова адреса одного сегмента є адресою іншого
Таблиця 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 стану задачі* i 80286 | ||
0 0 1 | Таблиця локальних дескрипторів LDT | ||
0 0 1 | Зайнятий сегмент TSS стану задачі i 80286 | ||
1 0 0 | Доступний сегмент TSS стану задачі i 386+ | ||
1 0 1 | Зарезервовано | ||
1 0 1 | Зайнятий сегмент TSS стану задачі* i 386+ | ||
Вентилі*** | |||
0 1 0 | Вентиль виклику i 80286 {Call Gate) | ||
0 1 0 | Вентиль задачі i 80286 (Task Gate) | ||
0 1 1 | Вентиль переривання i 80286 (Interrupt Gate) | ||
0 1 1 | Вентиль пастки i 80286 (Trap Gate) | ||
1 1 0 | Вентиль виклику i 386 + (Call Gate) | ||
1 1 0 | Вентиль задачі i 386 +(Task Gate) | ||
1 1 1 | Вентиль переривання i 386 + (Interrupt Gate) | ||
1 1 1 | Вентиль пастки i 386 + (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 виконує перемикання на попередню задачу.
Дата публикования: 2014-12-11; Прочитано: 3883 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!