Організація роботи мiкропроцесора в захищеному режимi, страница 6

В реальному режимi для опису атрибутiв сегмента дескриптор не вимагається, бо базова адреса сегмента (зменшена в 16 разів) зберiгається в сегментному регiстрi, гpаниця сегмента (64 кбайти -1) фiксована i завжди може бути зроблений доступ (запис i читання) до сегмента.

4.2.1. Структура дескриптора сегмента

На рис. 4.2 наведений формат дескриптора сегмента для МП,починаючи з 80386, що має наступнi поля: гpаниця сегмента, що дорiвнює розмiру сегмента, зменшеному на 1, i його базова адреса займають в дескрипторi по два поля: гpаниця - байти 0,1 i молодшi 4 розряди байта 6, базова адреса - байти 2-4 i 7 дескриптора сегмента.

 


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

Наявнiсть двох полів для гpаницi i базові адреси сегмента зв'язана iз забезпеченням сумiсностi програм, написаних для МП 80286, з наступними МП: молодшi шiсть байтiв дескриптора в цьому випадку повнiстю спiвпадають з дескриптором МП 80286.

Бiти старшої частини байта 6 дескриптора мають наступнi призначення:

G (Granularity) - бiт дрiбностi вказує, в яких одиницях задана гpаниця сегмента: при G = 0 - в байтах, при G = 1 - в сторiнках об’ємом по 4 кбайти, таким  чином  сегмент  може  мати  розмiр  до  1   Мбайта (220) при G = 0 i до 4 Гбайт (232) при G 1.

         D/B (Default size/Big) - бiт розмiру за замовчуванням визначає для сегмента коду розряднiсть вiдносної адреси i операнда: при D = 0 - 16 розрядiв, при D = 1 - 32 розряди. Розрядність, що приймається за замовчуванням, може бути змiнена за допомогою префiксу розрядності даних (66h) або адреси (67h).  Для сегмента стека цей бiт називається B i визначає наступне:

якщо  сегмент  стека визначений як сегмент даних, тобто ED = 0, то при B = 1 розмiри стека i регiстра ESP дорівнюють 32 (при B = 0 - 16);

якщо сегмент стека поширюється вниз (ED=1), то B визначає розмiр стека: при B=0 вiн рiвний 64 кбайти, при B = 1 - 4 Гбайти.

Бiт X може бути використаний системою або користувачем за своїм розсудом (цей бiт мiкропроцесором не обробляється).

Байт доступу дескриптора визначає права доступу до сегмента, що вибирається i, в залежностi вiд типу сегмента, має декiлька форматiв, представлених на рис. 5.2. Бiти i поля байта доступу мають наступне призначення:

P (Present) - бiт присутностi визначає наявнiсть вiдповiдного сегмента в пам'ятi (P = 1) або його вiдсутнiсть (P = 0).

Якщо в pегiстр сегмента занесен селектор дескриптора, що має Р = 0, то при зверненнi до цього сегмента виникає переривання 11 (для стека - переривання 12);

DPL (Descriptor Privilege Level) - рiвень привiлей дескриптора вказує на ступiнь захисту сегмента при доступi до нього;

S (System) - системний бiт визначає вид дескpиптоpа, що вибирається:  S = 0 означає, що це дескриптор системного сегмента i в полi TYPE вказується його тип (рис. 4.3, а);

E (Execute) - бiт виконання визначає, чи можна сегмент виконати:     E = 1  означає, що це сегмент коду (рис. 4.3, б), E = 0 - що це або сегмент даних, або    стека (рис. 4.3, в);

А (Accessed) - бiт доступу встановлюється апаратно в '1' при доступi до   сегмента, тобто при завантаженнi вiдповiдного селектора в сегментний  регiстр;

 


          а)

          б)

          в)

               Рис. 4.3. Формат байта доступу:

                  а)  дескриптора системного сегмента;

                  б)  дескриптора  сегмента коду;

                  в)  дескриптора  сегмента даних і стека

R (Read) - бiт дозволу зчитування використовується для сегмента коду i дозволяє при R = 1 зчитувати його змiст. При R = 0 спроба зчитування призводить до виникнення пеpеpивання 13 (те ж вiдбувається при спробi запису в сегмент коду незалежно вiд R);

C (Conforming) - бiт пiдпорядкування визначає додатковi правила звернення до сегмента коду;

W (Write) - бiт дозволу запису використовується для сегмента даних i дозволяє (при W = 1) або забороняє (при W = 0) змiну змiсту сегмента даних. При порушеннi викликається пеpеpивання 14. Дескриптор сегмента стека обов'язково повинен мати W = 1;