Таблицы дескриптора определяют все сегменты, которые используются в 80386. В 80386 имеются три типа таблиц, которые содержат дескрипторы:
— Таблица Глобального Дескриптора(GDT)
— Таблица Локального Дескриптора(LDT)
— Таблица Дескриптора Прерывания(IDT)
Все таблицы представляют собой матрицы памяти различной длины, они могут занимать от 8 байт до 64 Кбайт. Каждая таблица может содержать 8192 8-байтовых дескрипторов. Верхние 13 бит селектора используются как индекс в таблице дескриптора. Таблицы имеют регистры, соотнесенные с ними, которые содержат 32-битовый линейный базовый адрес и 16-битовый предел каждой таблицы.Каждой таблице соответствует регистр GDTR, LDTR и IDTR.
Команды LGDT, LLDT и LIDT загружают базу и предел Таблиц Глобального, Локального и прерывающего дескрипторов в соответствующий регистр. Команды SGDT, SLDT и SIDT cохраняют значения базы и предела в памяти. Эти таблицы обрабатываются операционной системой. Таким образом, команды загрузки таблицы дескриптора являются привилегированными командами.
— Таблица Глобального дескриптора (GDT) содержит дескрипторы, которые доступны для всех задач в системе. GDT может содержать любой тип дескриптора сегмента, кроме дескрипторов, используемых для обслуживания прерываний (т.е. дескрипторы прерывания и ловушки). Обычно GDT содержит код и сегменты данных, используемые в операционных системах и сегменты состояния задачи, и дескрипторы для LDT в системе. Первое гнездо GDT соответствует нулевому селектору и не используется. Нулевой селектор определяет значение нулевого указателя.
— Таблица Локального дескриптора (LDT) содержит дескрипторы, которые ассоциируются (соотносятся) с заданной задачей. Обычно, операционные системы создаются таким образом, чтобы каждая задача имела отдельную LDT. LDT может содержать только код, данные, стек, вентиль (логический элемент) задачи и дескрипторы вентиля вызова. Таблицы LDT обеспечивают механизм для изоляции кода и сегмента данных заданной задачи от остальной операционной системы, в то время как GDT содержит дескрипторы, общие для всех задач. Задача не может получить доступ к сегменту, если ее дескриптор сегмента не существует в одной из текущих LDT или GDT. Это обеспечивает изоляцию и защиту для сегмента задачи, позволяя в то же время разделение глобальных (всех) данных между задачами. В отличие от 6 байтовых регистров GDT или IDT, которые содержат базовый адрес и предел, видимая часть регистра LDT содержит только 16-битовый селектор. Данный селектор относится к LDT дескриптору в GDT.
— Таблица дескриптора прерывания IDT.
— BASE – базовый адрес счетчика
— Предел – длина сегмента
— DPL – уровень привилегий дескриптора
— S – Сегмент дескриптора (0-системный, 1-сегмент кода или данных)
— TYPE – тип сегмента
— G Грануляция
— P Присутствие сегмента
— A – бит доступа
— D Размер операции по умолчанию (Распознается только в дескрипторах кодового сегмента: 0=16-битовый размер; 1=32-битовый размер).
IDT содержит дескрипторы, которые указывают на адреса 256 векторов прерываний. IDT может содержать только вентили задач, вентили прерываний и вентили ловушек. IDT должен, по крайней мере, быть не менее 256 байт для того, чтобы фиксировать дескрипторы для 32 определенных прерываний. Каждое прерывание используемое системой должно иметь элемент (вход) в IDT. Элементы IDT рассматриваются посредством команд INT, векторами внешних прерываний и исключениями.
