Разновидности, состав и назначение дескрипторных таблиц

Дескрипторные таблицы - это массивы памяти переменной длины, содержащие восьмибайтные элементы - дескрипторы. Дескрипторная табл может иметь длину от 8 байт до 64Кб и в каждой таблице может быть до 8192 дескрипторов. Старшие 13 битов селектора используются как индекс в табл дескрипторов. Поскольку эти табл обслуживает ОС, то команды загрузки табл дескрипторов явл привилегированными командами.

Общий объем адресного пространства в 32-х разрядной машине = 232б = 4 Гб. Т.к. адрес смещения может быть тоже 32-х разрядным, то max размер сегмента ограничен также 4Гб.

Формат дескрипторной таблицы:

Базовый адрес (32-х битный) - базовый адрес сегмента. Именно этот адрес сформирует процессор при нулевом смещении.

Предел (20-битный). Определяет размер сегмента в байтах.

Бит присутствия (P) установлен в состояние 1, когда он находится (присутствует) в физической памяти.

Формат локальной дескрипторной таблицы:

  Двухбитное поле привилегий (DPL) определяет уровень привилегий сегмента. Существуют четыре уровня привилегий: от 0 до 3.

Бит S (системный, сегмент) всегда установлен в 1, если этот объект в дескрипторной таблице является сегментом. В случае S=0 данный объект может являться, а может и не являться сегментом памяти.

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

Бит D - размер по умолчанию. Он определяет, какая из размерностей для данных (16 или 32 бита) применяется для операндов процессора. При D=0 процессор интерпретирует содержимое сегмента кода как 16-ти битный код процессора i80286, а при D=1 - как 32-х битный код процессора i80486 и старше. Использование бита D - самый простой способ переключения между 16-ти и 32-х битными приложениями.

Бит A - доступа и обращения. Этот бит процессор автоматически устанавливает в состояние 1, когда происходит обращение к сегменту в физической памяти, описываемым данным дескриптором. Он предназначен для предотвращения свопинга сегмента на диск в момент обращения к нему.

Бит X зарезервирован корпорацией Intel для своих будущих разработок. Он должен всегда равняться 0.

Бит U может быть использован программистом для своих целей.

Трехбитное поле ТИП используется для указания целевого использования сегмента. Его значения:

000b - сегмент данных, разрешено только считывание.

001b - сегмент данных, разрешено считывание и запись.

010b - сегмент стека, разрешено только считывание (не используется в практике.)

011b - сегмент стека, разрешено чтение и запись.

100b - сегмент кода, разрешено только выполнение.

101b - сегмент кода, разрешено выполнение и считывание.

110b - подчиненный сегмент кода, разрешено только выполнение.

111b - подчиненный сегмент кода, разрешено выполнение и считывание.

ТАБЛИЦА ГЛОБАЛЬНОГО ДЕСКРИПТОРА.
Таблица Глобального дескриптора (GDT) содержит дескрипторы, которые доступны для всех задач в системе. GDT может содержать любой тип дескриптора сегмента, кроме дескрипторов, используемых для обслуживания прерываний (т.е. дескрипторы прерывания и ловушки). Каждая 386 система содержит GDT. Обычно GDT содержит код и сегменты данных, используемые в операционных системах и сегменты состояния задачи, и дескрипторы для LDT в системе. Первое гнездо GDT соответствует нулевому селектору и не используется. Нулевой селектор определяет значение нулевого указателя.

ТАБЛИЦА ЛОКАЛЬНОГО ДЕСКРИПТОРА.
Таблица Локального дескриптора (LDT) содержит дескрипторы, которые ассоциируются (соотносятся) с заданной задачей. Обычно, операционные системы создаются таким образом, чтобы каждая задача имела отдельную LDT. LDT может содержать только код, данные, стек, вентиль (логический элемент) задачи и дескрипторы вентиля вызова. Таблицы LDT обеспечивают механизм для изоляции кода и сегмента данных заданной задачи от остальной операционной системы, в то время как GDT содержит дескрипторы, общие для всех задач. Задача не может получить доступ к сегменту, если ее дескриптор сегмента не существует в одной из текущих LDT или GDT. Это обеспечивает изоляцию и защиту для сегмента задачи, позволяя в то же время разделение глобальных (всех) данных между задачами. В отличие от 6 байтовых регистров GDT или IDT, которые содержат базовый адрес и предел, видимая часть регистра LDT содержит только 16-битовый селектор. Данный селектор относится к LDT дескриптору в GDT.

ТАБЛИЦА ДЕСКРИПТОРА ПРЕРЫВАНИЯ.
Таблицей необходимой для 80386 является IDT.

IDT содержит дескрипторы, которые указывают на адреса 256 векторов прерываний. IDT может содержать только вентили задач, вентили прерываний и вентили ловушек. IDT должен, по крайней мере, быть не менее 256 байт для того, чтобы фиксировать дескрипторы для 32 определенных прерываний. Каждое прерывание используемое системой должно иметь элемент (вход) в IDT. Элементы IDT рассматриваются посредством команд INT, векторами внешних прерываний и исключениями.





Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: