Керiвництво программиста
частково перекривати друг друга. Таблиця IDT використовується для
реалізації перериваннь. Таблиці можуть мати розміри від 8 байт до 64 Кб, т.
є. Містити до 8192 дескрипторів.
Звертання до необхідного дескриптору здійснюється з допомогою
селектора, що міститься в відповідному сегментном регістрі. Селектор подає
собою 16-разрядный покажчик, що має три поля (рисунок 1.13.).
Поле RPL (біти 1-0) визначає рівень привілей запитання. Це
двухрозрядний код, що вказує допустимий рівень захисту сегменту, що може
бути вибраний з допомогою даного селектора.
Поле TI (біт 2) служить індикатором таблиці. Його значення вказує
таблицю, що вибирається: GDT при TI=0, LDT при TI=1.
Поле ІНДЕКС (біти 15-3) служить індексом для вибору одного з 8192
дескрипторів.
Селектор з нульовим значенням називається нуль-індикатором. Він
забезпечує звертання до першого дескриптору в таблиці GDT. Цей дескриптор
не використовується при роботі процесора, тому при його вибірці виконується
переривання.
Кожна з таблиць має відповідний регістр: GDTR, LDTR, IDTR. Регістр GDTR
містить 48 розрядів (40 в 80286), з яких 32 (24 в 80386) задають базову
адресу таблиці, а 16 розрядів вказують її обсяг в байтах мінус 1. Якщо
подставити в молодші 3 розряду селектора нулі, то отримається зміщення
дескриптора в таблиці. Це зміщення порівнюється з межею таблиці. В випадку,
якщо зміщення виходить за межі таблиці, виробляється виключення. Якщо
порушення межі немає, зміщення підсумовується з базовою адресою таблиці, в
результаті утвориться лінійна адреса дескриптора. Дана перевірка і наступне
формування адреси справедливі для всіх таблиць.
Регістр LDTR містить 16-разрядный покажчик, що визначає розміщення в
GDT дескриптора таблиці, що використається LDT. Дескриптор LDT містить 32-
розрядний (24-розрядний в 80286) базову адресу таблиці і її 16-розрядний
розмір, що при завантаженні регістру LDTR вибираються з GDT і зберігаються
в внутрішніх програмно недосяжних регістрах процесора.
Після вибору відповідного дескриптора формування лінійної адреси
здійснюється шляхом додавання базової адреси, що міститься в дескрипторі, і
відносної адреси, що утвориться в відповідності з що використаються засобом
адресації.
Окрім базової адреси і розміру сегменту дескриптора визначають ряд
інших важливих його атрибутів. В загальному вигляді формат дескриптора
уявлений на рисунку 1.14.
В процесорі 80286 біти 63-48 зарезервовані і повинні бути рівним нулю.
В поле “доп. Атрибути” присутнє 4 біти:
. Біт дрібності G (біт 55) вказує, в яких одиницях заданий розмір сегменту:
в байтах при G=0 або сторінках обсягом по 4 Кб при G=1. Таким чином, в
процесорах 80386+ сегмент може мати розмір до 220*4Кб= 4Гб;
. Біт розрядність D (біт 54). Даний біт має сенс тільки для сегментів коду
і стека. Для сегменту коду він задає розрядність операндів і адреси за
замовчанням. Для сегменту стека він задає розрядність осередків стека,
при D=1 для стекових операцій використовується регістр ESP, і осередок
стека має 32 розряди, т. є. Навіть при вталкуванні в стек 16-розрядного
слова ESP зменшиться на 4;
. Біт 53 передвизначений для майбутніх розширеннь і повинен містити 0;
. Біт 52 не використовується.
Байт доступу дескриптора визначає права доступу до сегменту ,що
вибирається. В залежності від вмісту сегменту байт доступу має різноманітні
формати (малюнок 1.15), хоча призначення ряду полів залишається однаковим.
Однакове призначення мають наступні поля:
. Біт присутності Р визначає наявність відповідного сегменту в пам'яті.
Якщо Р=0 (сегмент буде відстуній), те даний дескриптор не
використовується для формування адрес. В цьому випадку вміст інших
розрядів дескриптора може бути довільним. Якщо в регістр сегменту
надходить селектор дескриптора, що є Р=0, те процесор генерує виключення
“відсутність сегменту”. Обработчик даного виключення може підвантажити
необхідний сегмент з диску;
. Поле DPL вказує рівень привілей дескриптора. В залежності від
співвідношення значень DPL, CPL (поточний рівень привілей) і RPL, що
задається в молодших бітах селектора, дозволяється або забороняється
звертання до даного сегменту. Таким чином забезпечується рівень ,що
вимагається захисту сегменту;
. Системний біт S визначає роль що вибирається дескриптора в системі. При
S=1 дескриптор забезпечує звертання до сегментів кодів або даних.
Дескрипторы, що є S=0, служать для звертання до таблиць LDT, сегментів
TSS, або шлюзів для входу в інші задачі або програми, включаючи
обработчики перериваннь. Такі дескриптори називаються системними.
Поле типу системного дескриптора визначає його тип. Типи системних
дескрипторов наведені в таблиці 1.1.
Таблиця 1.1 Типи системних дескрипторов.
|Тип |Визначення |Тип |Визначення |
|0 |Не використовується |8 |Не використовується |
|1 |Доступний TSS 286 |9 |Доступний TSS 386+ |
|2 |Таблиця LDT |A |Зарезервирован |
|3 |Зайнятий TSS 286 |B |Зайнятий TSS 386+ |
|4 |Шлюз виклика 286 |C |Шлюз виклика 386+ |
|5 |Шлюз задачі |D |Зарезервирован |
|6 |Шлюз перериваннь 286 |E |Шлюз перериваннь 386+ |
|7 |Шлюз ловушки 286 |F |Шлюз ловушки 386+ |
В процесорі 80286 доступні тільки типи з 0 по 7.
Можна виділити три основних класу системних дескрипторів.
Дескриптори таблиць LDT (тип 2) забезпечують звертання до локальної
таблиці дескрипторів для вибору сегментів.
Дескрипторы сегментів TSS (типи 1 3 9 В) використовуються при
переключенні задач в багатозадачному режимі. Біт 1 в байті доступу сегменту
TSS пазиваеться бітом зайнятості і вказує, є чи задача, що викликається
зайнятой. Цей біт дескриптора встановлюється в одиницю, коли процесор
виконує виклик задачі, і скидається в нуль при виконанні повернення до
попередньої задачі. Б зайнятості використовується для запобігання
повторного виклика вже працюючої задачі. Переключення на зайняту задачу
наводить до генерації виключення 13.
Відзначимо, що дескриптори LDT і TSS завжди повинні мати значення біта
розрядності D=0.
Дескриптори шлюзів (типи 4-7, C, E, F) використовуються для звертання
до програм і задач, а також при обробці перериваннь і ловушек.
Формати байта доступу для дескрипторів кодів і даних (S=1) показані на
рисунку 1.15. Вони відрізняються значеннями б виконавчості Е: Е=1 для
сегментів кодів і Е=0 для сегментів даних і стека.
Біт звертання А встановлюється в одиницю у разі звертання до сегменту
т. є. При завантаженні відповідного дескриптора в сегментний регістр. Цей
біт періодично перевіряється операційною системою, що реалізує віртуальну
пам'ять, що таким чином виявляє незапитані сегменти, що є А=0. Сегменти,
довгий час що залишаються незапитаними, виводяться з оперативної пам'яті на
диск, звільняючи місце для інших сегментів.
Біт дозволу читання R вводиться для сегменту кодів і дозволяє при R=1
виробляти читання його вмісту. При R=0 допускається тільки вибірка вмісту
цього сегменту для виконання через регістр CS. Спроба читання в цьому
випадку викличе виключення 13. Відзначимо, що виключення цього типу виникне
також при спробі запису в сегмент програм незалежно від значення біту R.
Біт підпорядкування З визначає додаткові правила звертання, що
забезпечують захист сегментів програм.
Біт дозволу запису W вводиться для сегментів даних. Дозволяє при W=1
або забороняє при W=0 зміна вмісту цих сегментів. Читання з сегментів даних
розв'язане завжди.
Біт направлення розширення ED визначає розміщення сегменту даних
відносно базової адреси. При ED=0 (розширення вверх) дані в сегменті
розміщуються в направленні зростання адрес від базової адреси до межі. При
ED=1 (розширення вниз) дані в сегменті розташуються в направленні зменшення
адрес. Таким чином, при розширенні вверх відносна адреса осередка сегменту
повинна бути менш або рівна значенню розміру сегменту, при розширенні вниз
відносна адреса повинна бути більше розміру сегменту.
Захист пам'яті.
Процесор має спеціальні засоби, що забезпечують в захищеному режимі
захист пам'яті від несанкціонованого доступу. Для захисту інформації, що
зберігається в сегментах пам'яті, використовується система привілей, що
регулює доступ до того або іншого сегменту в залежності від рівня його
захищеності і від ступеню важливості запитання. В процесорі встановлені
чотири рівня привілей PL, що задаються номерами від 0 до 3. Найбільш
привілейованим є рівень з меншим номером. Ступінь захищеності сегменту
також має чотири рівня, що схематичні подаються в вигляді вкладених колець
захисту (малюнок 1.16).
Відповідні рівні захищеності ілюструються на прикладі сегментів кодів.
Наименее захищеними є програми користувача, для яких виділяється рівень з
номером 3. Рівні з 0 по 2 відводяться для системних програм.
В відповідності з рівнями привілей і захищеності встановлені наступні
правила доступу для сегментів кодів і даних.
1. Дані з сегменту, що є рівень захисту PL можуть бути вибрані програмою,
що є такий же або більш високий рівень привілей.
2. Сегмент кодів (процедура), рівень ,що є захисту PL, може бути викликаний
програмою, що є такий же або більш низький рівень привілей.
Необхідно відзначити, що правило 2 не виконується при викликові
сегментів кодів, що є встановлений біт підпорядкованості С=1 в байті
доступу дескриптора.
Рівні захисту і привілей визначаються двома бітами, значення яких
вказує номер кільця захисту. В залежності від місця розміщення біти мають
різноманітне призначення.
Рівень привілей дескриптора DPL задається бітами 5 і 6 в байті доступу
дескриптора. Значення DPL вказує рівень захищеності сегменту, т. є. Номер
кільця захисту, до якого він відноситься.
Рівень привілей запитання RPL задається бітами 0 і 1 селектора.
Значення RPL визначає рівень привілей, ініціатора запитання-звертання до
сегменту. Ініціатором є програма або влаштування, що з допомогою селектора
буде в обігу до пам'яті системи.
Поточний рівень привілей CPL задається бітами 0 і 1 селектора,
розміщеного в регістрі CS. Визначає рівень привілей в нинішній момент
сегменту ,що виконується програми.
Процесор має спеціальну команду ARPL, що використається для корекції
значення RPL селектора. При цьому селектор служить першим операндом
команди. В якості другого операнда в регістр завантажується поточне
значення CS. При виконанні команди порівнюються значення двох молодших
бітів операндів, що містять RPL і CPL. Поле RPL селектора приймає
максимальне з значень RPL і CPL, т. Е. Встановлюється мінімальний рівень
привілей запитання. Якщо значення RPL при цьому змінилося, те
встановлюється ознака ZF.
Звертання до сегментів кодів і даних в захищеному режимі виробляється з
урахуванням описаної вище системи привілей. При цьому правила залежать від
типу сегменту.
Звертання до сегментів даних виробляється з допомогою селекторів, що
завантажуються в регістри DS, ES, FS, GS. При звертанні аналізується
значення RPL селектора і CPL програми. Ефективний рівень привілей (EPL) для
запитання даних в цьому випадку визначається як максимальне з значень RPL і
CPL. Звертання до сегменту ,що запрошується даних дозволяється, якщо його
рівень захисту DPL і EPL. Порушення цього правила викликає прерывание типу
13.
Звертання до сегментів кодів, т. є. Передача керування реалізується при
виконанні команд міжсегментних переходів. Правила звертання до сегментів
кодів залежать від значення біта підпорядкованості в байті доступу
дескриптора.
Звертання до підлеглих сегментів допускається тільки з програм, що є
такий же або більш низький рівень привілей. Таким чином, в програмах з
поточним рівнем привілей CPL можуть виконуватися міжсегментні команди JMP,
CALL з передачею керування підлеглому сегменту, що є DPL і CPL. При такій
передачі керування зберігається рівень вихідної (викликаючої) програми.
Звертання до непідлеглих сегментів з допомогою команд JMP і CALL
допускається тільки в випадку, якщо значення CPL поточної програми рівно
DPL сегменту. Крім того, команда CALL може викликати сегменти програм з
більш високим рівнем привілей, використовуючи механізм шлюзів (або
вентилів).
Менш привілейована процедура може викликати більш привілейовану, будучи
в обігу до неї через дескриптор шлюзу виклика, що визначає доступну крапку
входу. Цей засіб дозволяє програмам користувача бути в обігу до операційної
системи. Формат дескриптора шлюзу виклика уявлений на рисунку 1.17.
В процесорі 80286 бвти з 48 по 63 не використовуються і повинні бути
рівні 0.
П'ятибайтове поле WC вказує кількість параметрів, що переносяться в
стек нової програми. Параметри подають собою 16-разрядные слова для 16-
разрядных програм (в тому числі і для процесора 80286) і 32-разрядные слова
для 32-разрядных програм.
При викликові програм через шлюз повинні виконуватися наступні правила.
Значення RPL селектора шлюзу і CPL викликаючої програми повинні бути менш
або рівним значенню DPL в байті доступу шлюзу.
Якщо програма, що викликається має інший (більш високий) рівень
привілей для неї створюється новий стек. При цьому в регістри SS і (E)SP з
сегменту TSS завантажується новий вміст, що визначає початкова адреса
нового стека. В цей стек послідовно вводяться старі значення SS і (E) SP;
параметри, переносимі з старого стека; старі значення CS і (E) IP. Число
переносимих параметрів визначається полем WC, причому вибираються останні з
завантажених в старий стек параметрів. Стать команді RET виробляється
відновлення з стека старого вмісту регістрів SS, (E)SP і CS, (E)IP.
Реалізація введення-виведення в захищеному режимі виробляється з
урахуванням CPL програми, що виконується. Величина CPL порівнюється зі
значенням поля IOPL в регістрі (E)FLAGS. Введення-виведення виробляється
тільки при виконанні умови CPL менш або рівно IOPL.
Багатозадачність.
Багатозадачністю називається такий засіб організації роботи системи,
при якому в її пам'яті водночас містяться програми і дані для виконання
декількох процесів обробки інформації (задач). При цьому повинен
забезпечуватися взаємний захист програм і даних, стосовних до різноманітних
задач, а також можливість переходу від виконання однієї задачі до другий
(переключення задач). Процесори починаючи з 80286 мають ефективні засоби
підтримки багатозадачного режиму. В якості таких засобів використовується
структура даних, організована в вигляді сегменту, що називається сегментом
стану задачі TSS. Апаратними засобами для підтримки багатозадачности
служить регістр задачі TR, в що з GDT може бути завантажений дескриптор
задачі.
Кожна задача має свій сегмент TSS, структура якого перебує з двох
частин. Обов'язкова частина містить всю інформацію, необхідну процесору для
рішення даної задачі. Додаткова частина може містити яку-або інформацію про
задачу, що використається операційною системою, бітову карту, що визначає
допустимі адреси приладів введення/висновку (тільки 80386+) і бітовую карту
віртуальних перериваннь (тільки Pentium+). Розглянемо утримання
обов'язкової частини TSS (таблиці 1.2 і 1.3).
Перші два байта використовуються для зберігання селектора TSS
попередньої задачі, при виконанні якої відбувся виклик даної задачі. В це
поле заноситься вміст регістру TR для попередньої задачі, якщо
припускається повернення до неї. Окремі поля зберігають вміст всіх
сегментных регістрів, регістрів загального призначення, регістру прапорів і
покажчика команд. При переключенні задач вміст означених полів з
викликаного TSS завантажується в відповідні регістри. При наступному
переключенні поточний вміст регістрів заноситься в TSS даної задачі, після
чого виробляється завантаження регістрів з TSS нової задачі.
Поля SS0, (E) SP0, SS1, (E) SP1, SS2, (E) SP2 служать джерелом нового
покажчика стека при зміні поточного рівня привілей (передачі керування).
Біт ловушки T в TSS викликає при Т=1 переривання типу 1 при
переключенні на дану задачу. Це переривання використовується при отладке
програмного забезпечення.
Бітова карта перенаправлення перериваннь БКПП забезпечує можливість
автоматичного перенаправлення програмного переривання в віртуальном режимі.
Бітова карта введення-виведення БКВВ забезпечує індивідуальний захист
кожного порту введення-виведення. При записі в біті БКВВ нуля дозволяє при
CPL>IOPL звертання до відповідного порту. За останнім байтом БКВВ повинен
слідувати заключний байт, що містить 1 в усіх розрядах. Адреса цього байта
повинна відповідати межі сегменту.
Дескриптор TSS повинен зберігатися тільки в GDT. Тому звертання до
дескриптору TSS з допомогою селектора, що є біт TI=1, викликає виключення
10.
Для переключення задач процесор використає звичайні команди
міжсегментного переходу JMP, виклика CALL і повернення IRET. Якщо селектор
команди JMP або CALL вибирає з таблиці GDT системний дескриптор, у якого
поле типу рівно 1 (для 80286) або 9 (для 80386+), виконується переключення
задач. При цьому селектор заноситься в TR. Слідує відзначити, що команди
передачі керування містять зміщення. Однак при переключенні задач воно
ігнорується.
При переключенні задач з допомогою команд JMP або CALL повинні
виконувати правила привілей, встановлені для доступу до даних: максимальне
з CPL і RPL повинно бути менш або рівно DPL. Таким Чином допускається
переключення на задачі, чий ступінь захисту менш або рівному рівню привілей
поточної задачі.
Таблиця 1.2. Сегмент стану задачі 80286
|Зміщення|Вміст |
|0 |Селектор повернення |
|2 |SP0 |
|4 |SS0 |
|6 |SP1 |
|8 |SS1 |
|0A |SP2 |
|0C |SS2 |
|0E |IP |
|10 |FLAGS |
|12 |AX |
|14 |CX |
|16 |DX |
|18 |BX |
|1A |SP |
|1C |BP |
|1E |SI |
|20 |DI |
|22 |ES |
|24 |CS |
|26 |SS |
|28 |DS |
|2A |LDTR |
|2C |Інформація ОС |
При використанні команди CALL можливо звертання до задач з більш
високим ступенем захисту, ніж рівень привілей поточної програми, з
допомогою шлюзу задачі. Використання шлюзу задачі аналогічно використанню
шлюзів виклика. В дескрипторе шлюзу задачі визначені тільки два поля: поле
селектора, в якому знаходиться селектор TSS, і поле прав доступу.
Режим V86.
Починаючи з процесора 80386 стало можливим виконання в захищеному
режимі програм, написаних для 8086/88, забезпечуючи при цьому ряд засобів
захисту і можливість страничной організації пам'яті. Такий варіант
захищеного режиму називається режимом віртуального 8086 і реалізується при
настанові в регістрі EFLAGS значення ознаки VM=1.
Таблиця 1.3. Сегмент стану задачі 80386+
|Зміщення|Вміст |
|0 |Селектор повернення |
|4 |ESP0 |
|8 |SS0 |
|0С |ESP1 |
|10 |SS1 |
|14 |ESP2 |
|18 |SS2 |
|1С |CR3 |
|20 |EIP |
|24 |EFLAGS |
|28 |EAX |
|2С |ECX |
|30 |EDX |
|34 |EBX |
|38 |ESP |
|3С |EBP |
|40 |ESI |
|44 |EDI |
|48 |ES |
|4С |CS |
|50 |SS |
|54 |DS |
|58 |FS |
|5С |GS |
|60 |LDTR |
|64 |Відносна адреса БКПП (б 15-1). |
|66 |Т (б 0) |
| |Відносна адреса БКВВ |
|68 |Інформація ОС |
| |БКПП |
| |БКВВ |
Всі програми, що виконуються в режимі V86, мають нижчий рівень привілей.
Цьому режим V86 відрізняється від реального режиму, при якому всім
програмам надається вищий рівень привілей. При формуванні лінійної адреси в
режимі V86 не використовуються дескриптори, тому правила привілей в цьому
режимі не виконуються. В режимі V86 використовуються тільки окремі засоби
захисту:
1. В режимі V86 не здійснюється захист сегментів. Якщо використовується
странічна адресація, те її захист при порушенні правив доступу до
сторінки наводить до виключення 14.
2. Надходження команд, що виконуються тільки при рівні CPL=0, в режимі V86
викликає виключення 13.
3. Надходження команд, що виконуються тільки в захищеному режимі, викликає
виключення 6 (недозволений код команди).
Команди PUSHF, POPF, CLI, STI, INT, IRET дошкульні до значення поля IOPL.
Вони виконуються тільки при IOPL=3.
Виконання команд введення/висновку не залежить від значення поля IOPL.
Однак захист може здійснюватися з допомогою БКВВ.
1.3.3 Механізм трансляції сторінок
32-разрядные процесори підтримують механізм трансляції сторінок. Даний
механізм здійснює перетворення лінійної адреси в фізичну шляхом таблиць
сторінок. Вперше трансляція сторінок почала підтримуватися в процесорі
80386. Наступні ґенерації процесорів додашли в цей механізм нові
можливості.
Керування сторінковим перетворенням здійснюється з допомогою трьох бітів в
регістрах керування (таблиця 1.4).
PG - біт 31 регістру CR0. Дозволяє механізм сторінкового перетворення
(80386+);
PSE - біт 4 регістру CR4. Дозволяє сторінки розміром 4Мб (або розміром 2
Мб, коли встановлений прапор PAE) (Pentium+);
PAE біт 5 регістру CR4. Дозволяє 36-разрядный фізична адреса. Розширена
фізична адреса може бути використана тільки з дозволеним сторінковим
перетворенням (Pentium Pro+).
Таблиця 1.4. Розміри сторінок і фізичної адреси.
|CR0. PG|CR4. PAE|CR4. |PDE. PS|Розмір |Розмір фізичної |
| | |PSE | |сторінки |адреси |
|0 |x |x |x |- |Сторінкове |
| | | | | |перетворення |
| | | | | |отключено |
|1 |0 |0 |x |4Кб |32 б |
|1 |0 |1 |0 |4Кб |32 б |
|1 |0 |1 |1 |4Мб |32 б |
|1 |1 |x |0 |4Кб |36 б |
|1 |1 |x |1 |2Мб |36 б |
Інформація, яку використає процесор для перетворення лінійної адреси в
фізичний, знаходиться в наступних таблицях:
Каталог сторінок;
Таблиця сторінок;
Таблиця покажчиків на каталог сторінок.
Коли використовується 32-разрядный фізична адреса, таблиці забезпечують
доступ до сторінок розміром 4 Кб або 4 Мб. При використанні розширеної 36-
разрядного фізичної адреси таблиці забезпечують доступ до сторінок розміром
4 Кб або 2 Мб.
Перетворення лінійної адреси для 4 Кб сторінок.
Дане перетворення виконується в усіх 32-разрядных процесорах. На рисунку
1.18. Уявлений механізм трансляції лінійної адреси на сторінки розміром
4Кб. Покажчик на каталог сторінок знаходиться в регістрі CR3. Елементи
каталогу сторінок вказують на таблиць сторінок, елементи таблиці сторінок -
на сторінки фізичної пам'яті. Цей засіб може бути використаний для
адресації до 220 сторінок, що покриває лінійний адресний простір розміром 4
Гб.
Для вибору різноманітних елементів таблиць лінійна адреса ділиться на 3
секції:
Елемент каталогу сторінок - біти з 22 по 31 містять індекс для входу в
каталог сторінок. Вибраний елемент містить базова фізична адреса таблиці
сторінок;
Елементи таблиці сторінок - біти з 12 по 21 містять індекс для входу в
вибрану таблицю сторінок. Цей елемент містить базова фізична адреса
сторінки в фізичній пам'яті;
Зміщення - біти з 0 по 11 містять зміщення фізичної адреси всередині
сторінки.
Перетворення лінійної адреси для 4 Мб сторінок.
На рисунку 1.19 показане, як каталог сторінок може бути використаний для
відображення лінійної адреси на 4 Мб сторінки. Елементи каталогу сторінок
вказують на сторінки фізичної пам'яті. Цей засіб сторінкового перетворення
може бути використаний для відображення до 1024 сторінок на лінійний
адресний простір розміром 4 Гб. Даний засіб доступний в процесорах
Pentium+.
Сторінки розміром 4 Мб вибираються, коли встановлений прапор PSE в регістрі
керування CR4 і коли встановлений прапор PS в елементі каталогу сторінок.
Коли ці прапори встановлені, лінійна адреса ділиться на дві секції:
Елемент каталогу сторінок - біти з 22 по 31 містять індекс для входу в
каталог сторінок. Вибраний елемент містить базова фізична адреса 4Мб
сторінки;
Зміщення - біти з 0 по 21 містять зміщення фізичної адреси всередині
сторінки.
Елементи таблиць сторінкового перетворення.
На рисунках 1.20 і 1.21 показаний формат елемента каталогу сторінок і
таблиці сторінок відповідно, коли використовуються 4Кб сторінки і 32-
разрядный фізична адреса. На малюнку 1.22 показаний формат елемента
каталогу сторінок, коли використовуються 4МБ сторінки і 32-разрядный
фізична адреса.
Функції полів в елементах наступні:
Базова адреса сторінки, біти з 12 по 31. Для елемента таблиці 4Кб сторінок:
містить фізична адреса першого байта 4Кб сторінки. Б даного поля
інтерпретуються як 20 старших біта фізичної адреси. Для елемента каталогу
4Кб сторінок: містить фізична адреса першого елемента таблиці сторінок.
Біти даного поля інтерпретуються як 20 старших бітів фізичної адреси. Для
елемента каталогу 4Мб сторінок: містить фізична адреса першого байта 4Мб
сторінки. Використовуються тільки б з 22 по 31 цього поля. Ці б
інтерпретуються як 11 старших розрядів фізичної адреси сторінки;
Біт присутності Р. Показує, знаходиться чи сторінка або таблиця сторінок в
фізичній пам'яті. Коли Р=1, сторінка знаходиться в пам'яті і у разі
звертання до ній відбувається перетворення лінійної адреси в фізичний. Коли
Р=0, сторінки в пам'яті немає, інша частина елемента доступна для
операційної системи. Якщо процесор спробує звернутися до сторінки, у якої
Р=0, те відбудеться виключення 14;
Біт R/W. Біт читання/запис. І біт U/S. Біт користувач/супервизор. Ці біти
застосовуються для захисту по привілей на рівні сторінок;
Біт А. Біт звертання. Показує, було чи звертання до сторінки або таблиці
сторінок. Процесор встановлює цей біт у разі звертання до сторінки. Скид
біта здійснюється тільки програмним шляхом;
Біт D. Біт “брудний”. Показує, було чи звертання до сторінки для запису.
Процесор встановлює цей біт при записі в сторінку. Скид біта здійснюється
тільки програмним шляхом. Даний біт спільно з бітом А використовується
операційною системою для керування пам'яттю;
Біт PS. Розмір сторінки. Визначає Розмір сторінки. Даний б використовується
тільки в елементах каталогу сторінок. Коли цей біт не встановлений, розмір
сторінки 4Кб і елемент каталогу сторінок вказує на таблицю сторінок. Коли
цей біт встановлений, розмір сторінки рівний 4Мб при використанні 32-
разрядного адреси (і 2Мб при використанні розширеної адреси) і елемент
каталогу сторінок вказує на сторінку;
Біт G. Глобальна сторінка. Коли даний біт встановлений, це означає, що
сторінка є глобальною. Коли сторінка позначена як глобальна і глобальні
сторінки розв'язані (біт PGE в регістрі CR4), при перезагрузке регістру CR3
елемент таблиці сторінок або елемент каталогу сторінок не оголошується
невірогідним в TLB. Цей біт служить для того, щоб відвернути вилучення
часто сторінок ,що використаються з TLB. Даний біт підтримується тільки в
процесорах Pentium Pro+.
Якщо біт PSE в регістрі CR4 встановлений, те обидва засобу перетворення
можуть використовуватися з одного і того же каталогу сторінок.
Розширення фізичної адреси.
Біт PAE в регістрі CR4 дозволяє розширення фізичної адреси в процесорі
Pentium Pro+ з 32 до 36 розрядів. Ця можливість може бути використана
тільки при включеному сторінковому перетворенні. Коли розширення фізичної
адреси розв'язане, процесор підтримує сторінки двох розмірів: 4Кб і 2Мб. Як
і при 32-разрядном адресі, обидва розміру сторінок можуть використовуватися
водночас, т. є. Елемент каталогу сторінок може посилатися на 2Мб сторінку
або каталог сторінок, що містить покажчики на 4Кб сторінки.
Для підтримки 36-разрядного фізичної адреси в таблицях для сторінкового
перетворення зроблені наступні зміни:
Елементи таблиць стали 64-разрядными для розміщення 36-разрядного адреси.
Таким Чином, кожний каталог сторінок і кожна таблиця сторінок може містити
512 елементів;
В ієрархію сторінкового перетворення додана нова таблиця - таблиця
покажчиків на каталог сторінок. Ця таблиця містить чотири 64-разрядных
елемента і знаходиться вище каталогу сторінок в ієрархії;
Базова 20-разрядный адреса каталогу сторінок в регістрі CR3 замінена на 27-
разрядный адресу таблиці покажчиків на каталог сторінок. Це 27 старших
розрядів фізичної адреси першого елемента таблиці каталогу;
32-разрядный лінійна адреса відображається на 36-разрядное простір фізичних
адрес.
Перетворення лінійної адреси з розширеною адресацією для 4Кб сторінок.
На рисунку 1.23 показаний механізм перетворення лінійної адреси з
використанням 4Кб сторінок, коли розв'язане розширення фізичної адреси. Цей
засіб перетворення може бути використаний для адресації 220 сторінок, що
покриває лінійний адресний простір розміром 4Гб.
Для вибору різноманітних елементів таблиць лінійна адреса ділиться на 4
секції:
Елемент таблиці каталогу сторінок - біти 30 і 31 містять індекс для входу в
таблицю каталогу. Вибраний елемент містить базова фізична адреса каталогу
сторінок;
Елемент каталогу сторінок - біти з 21 по 29 містять індекс для входу в
каталог сторінок. Вибраний елемент містить базова фізична адреса таблиці
сторінок;
Елементи таблиці сторінок - біти з 12 по 20 містять індекс для входу в
вибрану таблицю сторінок. Цей елемент містить базова фізична адреса
сторінки в фізичній пам'яті;
Зміщення - біти з 0 по 11 містять зміщення фізичної адреси всередині
сторінки.
Перетворення лінійної адреси з розширеною адресацією для 2Мб сторінок.
На рисунку 1.24 показане, як таблиця каталогу сторінок і каталог сторінок
можуть бути використані для відображення лінійної адреси на 2Мб сторінки.
Цей засіб сторінкового перетворення може бути використаний для відображення
до 2048 сторінок на лінійний адресний простір розміром 4Гб.
Розмір сторінки 2Мб вибирається, коли встановлений біт PSE в регістрі CR4 і
встановлений біт PS в елементі каталогу сторінок. Коли ці біти встановлені,
лінійна адреса ділиться на три секції:
Елемент таблиці каталогу сторінок - біти 30 і 31 містять індекс для входу в
таблицю каталогу. Вибраний елемент містить базова фізична адреса каталогу
сторінок;
Елемент каталогу сторінок - біти з 21 по 29 містять індекс для входу в
каталог сторінок. Вибраний елемент містить базова фізична адреса сторінки
розміром 2Мб;
Зміщення - біти з 0 по 20 містять зміщення фізичної адреси всередині
сторінки.
1.3.4 Віртуальні переривання
В процесорах Pentium+ в механізм обробки переривань були додані деякі нові
можливості. Розглянемо зміни, що стосуються режиму V86. Коли процесор
знаходиться в цьому режимі, засіб обробки переривань залежить від стану
різноманітних прапорів і полів:
VME-прапор (біт 0 в регістрі CR4) - коли він в одиниці, дозволяються
розширені можливості по обробці переривань і виключень в режимі V86, а
також дозволяється апаратна підтримка прапора VIF;
IOPL-прапор (біт 12 і 13 в регістрі EFLAGS) - управляє тим, як будуть
оброблятися переривання;
БКПП - бітова карта перенаправлення переривань (32 байта в TSS) - містить
256 прапорів, що показують, як програмні переривання (переривання, що
генеруються командою INT n) будуть оброблятися в режимі V86. Програмні
переривання можуть спрямовуватися на обробку в поточну програму 8086 або
оброблятися в захищеному режимі. Апаратні переривання і виключення завжди
спрямовуються в захищений режим.
В таблиці 1.5. Показане, як процесор обробляє переривання і виключення в
режимі V86 в залежності від стану описаних вище прапорів і полів.
Таблиця 1.5. Обробка переривань і виключень в режимі V86.
|Засіб |VME |IOPL |Б в БКПП|Дії процесора |
|1 |0 |3 |x |Програмні переривання (INT n), |
| | | | |виключення і переривання ,що |
| | | | |маскуються спрямовуються в |
| | | | |захищений режим (через IDT) |
|2 |0 |<3 |x |Програмні переривання генерують |
| | | | |виключення 13. Виключення і |
| | | | |переривання ,що маскуються |
| | | | |спрямовуються в захищений режим |
|3 |1 |<3 |1 |Те же |
|4 |1 |3 |1 |Програмні переривання, виключення |
| | | | |і переривання ,що маскуються |
| | | | |спрямовуються в захищений режим |
|5 |1 |3 |0 |Програмні переривання |
| | | | |спрямовуються в режим V86 по |
| | | | |механізму реального режиму |
|6 |1 |<3 |0 |Програмні переривання генерують |
| | | | |виключення 13. Виключення і |
| | | | |переривання ,що маскуються |
| | | | |обробляються з підтримкою прапорів|
| | | | |VIF і VIP |
Коли прапор VME=0, переривання обробляються звичайним образом. Коли прапор
в одиниці, до обробки переривань привертається новий об'єкт - бітова карта
перенаправлення переривань. Вона розташується по базовій адресі карти
введення-виведення мінус 32 байта в сегменті TSS. Кожний біт цієї карти
показує, буде чи відповідне переривання оброблятися як звичайно в
захищеному режимі (б рівному одиниці) або переривання буде перенаправлено
на обробку в програму режиму V86 через таблицю переривань розташовану по
лінійній адресі 0 (біт рівний 0).
Обробка переривань по засобу 5. Процесор перенаправляє програмні
переривання в програму режиму V86 через таблицю переривань, як це
відбувається в реальному режимі. Процесор виробляє слідуючу послідовність
дій:
Записує поточні значення регістрів CS і IP в поточний стек;
Записує в стек регістр прапорів FLAGS з очищеними NT і IOPL;
Очищає прапор IF в регістрі FLAGS, щоб заборонити переривання;
Очищає прапор TF в регістрі FLAGS;
Завантажує регістри CS і IP з таблиці переривань по лінійній адресі 0;
Починає виконувати програму переривання.
При використанні цього засобу обробки переривань виключення не заносять в
стек код помилки.
Обробка переривань по засобу 6. Коли процесор знаходиться в стані,
відповідному засобу 6, команди CLI і STI змінюють прапор VIF замість
прапора IF. Процесор читає прапор VIP, але ніколи не змінює його. Процесор
використає прапори VIF і VIP для визначення того, як обробляти переривання.
Якщо відбулося переривання або виключення і прапор VIF скинутий в 0, те
процесор виробляє тих же дії, що і в засобі 5. Процесор також обробляє
переривання по засобу 5, якщо прапор VIF встановлений в одиницю і відбулося
немаскуєме переривання. Якщо відбулося переривання ,що маскується апаратне,
те процесор виробляє наступну послідовність дій:
Процесор викликає виключення 13:
Переключається в захищений режим на CPL=0;
Зберігає в PL0-стеці: EIP, CS, EFLAGS, ESP, SS, ES, DS, FS, GS. В стековом
образі регістру EFLAGS поле IOPL встановлюється рівним 3 і прапор VIF
копіюється в прапор IF;
Очищає сегментні регістри;
Скидає прапор VM в регістрі EFLAGS;
Приступає до виконання вибраного переривання.
Що рекомендуються дії обробника виключення 13: прочитати прапор VM регістру
EFLAGS в стеке. Якщо цей прапор встановлений, викликати монітор V86.
Монітор V86 читає прапор VIF в регістрі EFLAGS. Якщо цей прапор
встановлений, монітор встановлює прапор VIP в регістрі EFLAGS, вертає
управління обробнику.
Обработчик виробляє повернення в режим V86.
Процесор продовжує виконання програми 8086 без обробки переривання.
Коли програма 8086 виконає команду STI, процесор зробить наступне:
Перевірить прапор VIP.
Якщо VIP=0, те процесор скине в 0 прапор VIF.
Якщо VIP=1, те процесор генерує виключення 13.
Що рекомендуються дії обробника: викликати монітор V86, щоб дати можливість
обробити відкладене переривання. Типові дії монітору V86 - це очистити
прапори VIF і VIP в стеке і повернути управління в режим V86 (через
обробник). Коли в наступний раз відбудеться апаратне переривання, воно буде
оброблятися по засобу 5.
Стан прапорів VIF і VIP не змінюється в реальному режимі або під час
переключення між реальним і захищеним режимом.
Розглянемо віртуальні переривання в захищеному режимі. Для дозволу
підтримки прапорів VIF і VIP необхідно встановити прапор PVI в регістрі
CR4.
Якщо PVI=1, CPL=3 і IOPL<3, те виконання команд CLI і STI не наводить до
генерації виключення 13. В цьому випадку ці команди впливають на прапор VIF
замість IF.
Якщо відбувається переривання ,що маскується апаратне і прапор VIF=1, те
процесор викличе виключення 13. Обработчик виключення може встановити
прапор VIP і повернути управління PL3-задаці, що продовжить свою роботу.
Коли програма виконає команду STI, щоб очистити прапор VIF, процесор
автоматичні здійснить виклик виключення 13, що зможить обробити відкладене
переривання.
Типовий засіб обробки відкладеного переривання полягає в очистці прапорів
VIF і VIP в стековом образі регістру EFLAGS і поверненні управління PL3-
задаці.
Коли в наступний раз відбудеться апаратне переривання, процесор буде
обробляти його нормальним образом.
-----------------------
Цикл читання
Цикл запису
T1
T2
T3
Twait
T4
T1
T2
T3
Twait
T4
CLK
ALE
S[2:0]#
S[7:3]
S[7:3]
BHE#,A[19:16]
BHE#,A[19:16]
Addr/
Status
A[15:0]
D[15:0]
A[15:0]
D[15:0](Out)
Addr/
Data
READY
Рисунок 1.1. Шинні циклі процесорів 8086/88
Цикл читання N
Цикл читання N+1
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ts
Ts
Tc
Tc
CLK
PROC
CLK
Дійсна адреса(N)
Дійсна адреса(N+1)
A[23:0]
S0,S1
READY
Дані читання N
Дані читання N+1
D[15:0]
Рисунок 1.2. Конвейєр шиних циклів 80286
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ts
Ts
Tc
Tc
Tc
Цикл читання N
Цикл читання N+1
CLK
PROC
CLK
Дійсна адреса N
Дійсна адреса N+1
A[23:0]
S1#,S0#
ALE
READY
RD#
CMDLY
Рисунок 1.3. Затримка и розтяжка шиних циклів 80286
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
T1
T1
T1
T2
T2
T2
CLK
Valid 1
Valid 2
Valid 3
BE[3:0]#,A[31:2]
M/IO#,D/C#,W/R#
ADS#
NA#
READY
IN
IN 1
IN 2
IN 3
D[31:0]
Рисунок 1.4. Неконвейєрні шині цикли 80386
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
Ф1 Ф2
T1
T1
T1
T2
T2
T2
CLK
Valid 1
Valid 2
Valid 3
BE[3:0]#,A[31:2]
M/IO#,D/C#,W/R#
Valid 4
ADS#
NA#
READY
IN
IN 1
IN 2
IN 3
D[31:0]
Рисунок 1.5. Конвейєрні шині цикли 80386
Ti
Ti
T2
T2
T2
T2
T1
IN 1
IN 2
IN 3
IN 4
04h
00h
0Ch
08h
CLK
ADS#
BE[3:0]#,A[31:4]
M/IO#,D/C#,W/R#
A[3:2]
RDY#
BRDY#
BLAST#
KEN#
D[31:0]
Рисунок 1.6. Пакетний цикл читання 80486
Передвибірка
Дешифрація
стадія 1
Дешифрація
стадія 2
Виконання
Запис
результата
Рисунок 1.7. Конвейєр процесора 80486
T1
T1
T2
T2
T2
T2
T2
T2
T2
T2
a Valid
b Valid
a
b
a
a
a
a
b
b
b
b
08h
00h
00h
18h
10h
08h
10h
18h
CLK
BE[7:0]#,A[31:5]
M/IO#,D/C#,W/R#
A[4:3]
ADS#
CAHSE#
KEN#
NA#
BRDY#
D[63:0]
Рисунок 1.8. Конвейєризовані пакетні циклі читання Pentium
Кеш
инструкцій
PF
F
D1
D2
EX
WB
D2
EX
WB
Кеш даних
X1
X2
WF
Mex
Wm/M2
M3
Wmul
Mex
Wm/M2
M3
Wmul
Рисунок 1.9. Конвейєр процесора Pentium
01
02
03
04
07
08
05
06
09
10
11
12
15
16
13
14
a
a
a
a
a
a
a
a
a
a
b
b
b
b
b
b
b
b
b
b
CLK
Арбитраж
Запрос
Ошибка
Завершение
Ответ
Данные
Фазы:
Рисунок 1.10. Протокол шини Pentium Pro
Port 2
Port 3
Port4
Port 0
Port 1
ROB Wb
RRF
BTB
IFU
ID
RAT
ROB Rd
RS
Рисунок 1.11. Конвейєр процесора Pentium Pro
CF
PF
AF
ZF
SF
TF
IF
DF
OF
15 12 11 10 9 8 7 6 5 4 3 2
1 0
Рисунок 1.12. Регистр прапорів FLAGS
ІНДЕКС
TI
RPL
15 3 2 1
0
Рисунок 1.13. Формат селектора
Базова адреса
(біти 23-0)
Розмір
(біти 15-0)
Байт
доступу
Розмір
біти(19-16)
Доп.
атрибути
Базова адреса
(біти 31-24)
63 56 55 52 51 48 47 40
39 16 15 0
Рисунок 1.14. Загальний формат дескриптора.
Р
DPL
S=0
type
7 6 5 4 3 0
E=1
C
R
A
Р
DPL
S=1
7 6 5 4 3 2 1 0
Р
DPL
S=1
E=0
ED
W
A
7 6 5 4 3 2 1 0
Рисунок 1.15. Формат байта доступа.
3
2
1
0
Програми користувача
Службові програми
Утіліти операційної системи
Ядро операційної системи
Рисунок 1.16. Рівні привілей и захисту
Селектор
Відносна адреса
(біти 15-0)
Байт
доступа
WC
біти(4-0)
Відносна адреса
(біти 31-16)
63 48 47 40 39 37 36
32 31 16 15 0
Рисунок 1.17. Формат дескриптора шлюза виклика.
000
Directory
Table
Offset
Phisical addres
Page Table Entry
Directory Entry
CR3
Page Directory
Page Table
31 22 21 12 11
0
Рисунок 1.18. Перетворення линійної адреси для 4 Кб сторінок
Directory
Offset
Phisical addres
Directory Entry
CR3
Page Directory
31 22 21
0
Рисунок 1.19. Перетворення линійної адреси для 4 Мб сторінок
Базоа адреса таблиці сторінок
Не исп.
G
PS
0
A
PCD
PWT
U/S
R/W
P
31 12 11 9 8 7
6 5 4 3 2 1 0
Рисунок 1.20. Формат элемента каталога сторінок (4 Кб и 32 розряда адреси)
Базова адреса сторінки
Не исп.
G
0
D
A
PCD
PWT
U/S
R/W
P
31 12 11 9 8 7
6 5 4 3 2 1 0
Рисунок 1.21. Формат элемента таблиці сторінок (4 Кб и 32 розряда адреси)
Базова адреса сторінки
Не исп.
G
PS
D
A
PCD
PWT
U/S
R/W
P
31 12 11 9 8 7
6 5 4 3 2 1 0
Рисунок 1.22. Формат элемента каталога сторінок (4 Мб и 32 розряда адреси)
Резерв
31 30 29 21 20 12 11
0
Directory
Table
Offset
Phisical addres
Page Table Entry
Directory Entry
CR3
Page Directory
Page Table
Рисунок 1.23. Перетворення линійної адреси для 4 Кб сторінок с розширеною
адресацією
Dir. Pointer Entry
Directory Table
31 30 29 21 20
0
Directory
Offset
Phisical addres
Directory Entry
CR3
Page Directory
Рисунок 1.23. Перетворення линійної адреси для 2Мб сторінок с розширеною
адресацією
Dir. Pointer Entry
Directory Table
Страницы: 1, 2, 3
|