Формат дескрипторов сегментов



 

 

Компонентами дескриптора (процессоров 286 - Pentium ) являются:  

1. База сегмента (32 бита) определяет начальный линейный адрес сегмента в адресном пространстве процессора.

База сегмента (32 бита) определяет начальный линейный адрес сег­мента в адресном пространстве процессора.

Поскольку в дескриптор записывается 32-битовый линейный базо­вый адрес (номер байта), сегмент в защищенном режиме может начинаться на любом байте, а не только на границе параграфа, и распо­лагаться в любом месте адресного пространства 4 Гбайт.

2. Поле размера (limit) (или границы) сегмента определяет максимальный размер сегмента.

Граница (limit) сегмента представляет собой номер последнего байта сегмента.

Оно состоит из 20 бит.

Граница (размер) сегмента может указываться либо в байтах (и тогда максимальный размер сегмента равен 1 Мбайт что годится для реального режима – сегменты по 64 кб, либо в блоках по 4 Кбайт (и тогда размер сегмента может достигать 4 Гбайт).

В каких единицах задается граница, определяет бит дробности (или гранулярности G).

Если он равен 0, гра­ница указывается в байтах, а если 1 - в блоках по 4 Кбайт.

Формат дескрипторов имеет общую часть и различные управляющие байты или байты защиты.

Байт защиты (8 – 15) - или управляющий байт содержит информацию о типе сегмента и признаки доступа.   

В состав управляющего байта (защиты) входят:

Бит A (accessed) – это бит обращения. 

При А = 0 к сегменту не было обращения. 

Бит R/W управляет режимами чтения и записи.

Если бит R/W = 1 данные сегмента доступны для записи и чтения, иначе только для чтения ( код программы ).

Наличие бита «Только чтение» защищает код программы от модификации.

Такой возможности нет в реальном режиме.

Но можно создать дополнительный дескриптор, в котором этот сегмент помечен как сегмент данных.

Биты Е, EDexpand down, используются для различения сегмента кода, стека  и данных.               

Бит S  - при S =0 системный сегмент (для LDT, TSS ,...), иначе при S = 1 – пользовательский.

I intending - предназначенный , при I=0 сегмент кода, при I=1 сегмент стека или данных.

С - conforming- бит подчиненности.

При С= 0 – обычный сегмент кода, при С=1- подчиненный.

Два бита DPL – description privilege level (0-3) – уровень привилегий сегмента.

P – present, бит присутствия в ОЗУ.

При Р = 1 сегмент присутствует в ОЗУ (иначе на диске или нет совсем).

 

Кроме того, в дескрипторе сегмента имеются биты:

G – granulate - бит размера сегмента.

При G = 0 размер сегмента в поле размера дескриптора указывается в байтах, а при G =1 - в 4 Кбайтах.    

D   - бит разрядности . При D=0 - 16 разрядный сегмент ( 64 Кб ),         при D=1 – 32 разрядный ( 4 Гб).

AVL – (available) свободные биты ( для программистов ).  

Тип сегмента определяется битами типа следующим образом :

S = 1 E = 1 ED (нет)  - сегмент кода;

Есть бит С – бит подчиненности.

При С= 0 – обычный сегмент кода, при С=1- подчиненный.

S = 1 E =0 ED= 0 – сегмент данных;

S = 1 E=0 ED =1 - сегмент стека.

Для сегмента кода

S=1, E = 1, С= 1/0

Для сегмента данных

S =1, E = 0, ED = 0

Для сегмента стека

S =1, E = 0, ED = 1

Для таблиц LDT и TSS и шлюзов формат управляющего байта имеет отличия:

 

Тип сегмента определяется битами типа следующим образом :

S = 0 Type = 2 - сегмент таблиц локальных дескрипторов LDT.

(0010)      

S = 0 Type = 1, 3, 8, 11 - для сегментов TSS.

            (0001, 0011, 0100, 1011).

S = 0 Type = 4, 5, 6, 8 - для шлюзов.

        ( 0100, 0101, 0110, 1000).


Дата добавления: 2018-08-06; просмотров: 423; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!