Формат дескрипторов сегментов
Компонентами дескриптора (процессоров 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 данные сегмента доступны для записи и чтения, иначе только для чтения ( код программы ).
Наличие бита «Только чтение» защищает код программы от модификации.
Такой возможности нет в реальном режиме.
Но можно создать дополнительный дескриптор, в котором этот сегмент помечен как сегмент данных.
Биты Е, ED – expand 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!