7.4.2.2. Дескрипторы сегментов

 

Дескрипторы - это те объекты, на которые показывают селекторы сегмента. Они представляют собой 8-байтовые блоки, содержащие атрибуты области линейных адресов, т.е. сегмента. Эти атрибуты включают 32-разрядный линейный базовый адрес сегмента, 20-разрядную длину и дробность сегмента, уровень защиты, привилегии по чтению, записи и выполнению, размер операндов по умолчанию (16-или 32-разрядные) и тип сегмента. Вся информация об атрибутах дескриптора содержится в 12 битах дескриптора сегмента. Сегменты МП 80386 в целом имеют три поля атрибутов: бит Р присутствия, биты DPL уровня привилегий дескриптора и бит S дескриптора сегмента.

Дескрипторы сегментов хранятся либо в таблице GDT, либо в таблице LDT, которые МП 80386 адресует с помощью регистров GDTR или LDTR соответственно.

Дескриптор сегмента обеспечивает МП 80386 данными, которые ему нужны для отображения логического адреса в линейный адрес. Эти дескрипторы создаются не прикладными программами, а компиляторами, редакторами связей, загрузчиками или операционной системой. На рис. 2.2 показан общий формат дескриптора сегмента.

Дескриптор сегмента имеет следующие поля:

База. Определяет место сегмента внутри линейного 4-Гбайт адресного пространства. Процессор объединяет три фрагмента базового адреса для формирования одного 32-разрядного значения.

Граница. Определяет размер сегмента. Процессор связывает две части поля границы для формирования 20-разрядного результата. Затем он интерпретирует поле границы одним из двух способов в зависимости от состояния бита дробности:

Рис. 2.2. Общий формат дескриптора сегмента.

в единицах байтов для определения границы до 1 Мбайт;

в единицах страниц по 4 Кбайт для определения границы до 4 Гбайт, при загрузке поле границы сдвигается влево на 12 бит и в младшие биты вставляются единицы.

Бит дробности G. Определяет размер единиц, в которых интерпретируется поле границы. Если G = О, то граница интерпретируется в байтах, иначе в единицах по 4 Кбайт.

Бит системного сегмента S. Определяет, является ли данный сегмент системным (S = 0) или же сегментом программы или данных (S = 1).

Тип. Интерпретация этого поля зависит от вида дескриптора. В дескрипторах сегментов программы или данных это поле содержит 3-разрядный тип и один бит флага обращения. Дескрипторы системных сегментов используют следующий набор значений в поле типа:

Уровень привилегий дескриптора DPL. Используется механизмом защиты.

Бит присутствия сегмента Р. Если этот бит очищен, то данный дескриптор не может быть использован при трансляции адресов. Когда селектор такого дескриптора загружается в регистр сегмента, процессор переходит к обработке исключения. На рис. 2.3 показан формат отсутствующего дескриптора.

Бит обращения А. Устанавливается в дескрипторах программы и данных при обращении к сегменту. Операционные системы, реализующие виртуальную память на уровне сегментов, могут следить за частотой использования сегмента путем периодической проверки и очистки этого бита.

В дополнение к значению селектора каждый регистр сегмента имеет связанный с ним «невидимый»1* кэш-регистр дескриптора сегмента. Когда содержимое регистра сегмента изменяется, то 8-байтовый дескриптор, связанный с этим селектором, автоматически загружается в кэш-регистр. После загрузки этого регистра все ссылки на данный сегмент используют информацию кэшированного дескриптора вместо повторного обращения к самому дескриптору.

Рис. 2.3. Формат не присутствующего дескриптора.

Для обеспечения совместимости операционных систем МП 80286 и 80386 последний поддерживает все дескрипторы сегментов МП 80286. Единственное

различие между двумя форматами состоит в значениях полей типа и в том, что поля границы и базового адреса в МП 80386 расширены.

Дескрипторы сегментов МП 80286 содержат 24-разрядный адрес и 16-разрядную границу. С другой стороны, дескрипторы сегментов МП 80386 имеют 32-разрядный базовый адрес, 20-разрядную границу и бит дробности G. Таким образом, если старшее слово дескриптора равно нулю, то это дескриптор для МП 80286.

Еще одно различие между дескрипторами МП 80286 и 80386 заключается в интерпретации поля счетчика слов вентиля вызова и бита В. Поле счетчика слов определяет количество 16-разрядных блоков при копировании для вентиля вызова МП 80286 и 32-разрядных блоков для вентиля вызова МП 80386. Бит В управляет размером блоков, загружаемых в стек при использовании вентиля вызова. Если В = 0, то это блок в 16 бит, иначе блок в 32 бит.

 

 

HotLog

Заказчику web дизайна и программирования - каталог сайтов, обзор дизайн студий