Таблицы дескрипторов


Существуют три типа таблиц дескрипторов — локальная таблица дескрипторов LDT (Local Descriptor Table), глобальная таблица дескрипторов GDT (Global Descriptor Table) и таблица дескрипторов прерываний IDT (Interrupt Descriptor Table), Размеры таблиц могут находиться в пределах 8 байт — 64 Кбайт, что соответствует числу элементов в таблице от 1 до 8К.

С каждой из этих таблиц связан соответствующий регистр процессора Регистры GDTR и IDTR имеют программно-доступное 16-битное поле лимита, задающее размер таблицы, и 32-битное (у 80286 — 24-битное) поле базового адреса, определяющее положение таблицы в пространстве линейных (у 80286 — физических) адресов памяти. У регистра LDTR программно доступ­но только 16-битное поле селектора, по которому из GDT автоматически загру­жаются программно-невидимые поля базового адреса и лимита.

  Таблицы дескрипторов

. Регистры дескрипторов таблиц

Команды загрузки регистров таблиц LGDT, LIDT и LLDT являются приви­легированными (выполняются только на уровне 0). Команды LGDT и LIDT загружает из памяти 6-байтное поле, содержащее базовый адрес и лимит локаль­ной таблицы. Команду LLDT загружает только селектор, ссылающийся на деск­риптор, содержащий базовый адрес и лимит локальной таблицы дескрипторов.

Глобальная таблица (GDT) содержит дескрипторы, доступные всем задачам. Она может содержать дескрипторы любых типов, кроме дескрипторов прерыва­ний и ловушек. Локальная таблица (LDT) может быть собственной для каждой задачи, она может содержать только дескрипторы сегментов, вентилей задачи и вызовов. Сегмент недоступен задаче, если его дескриптора нет в текущий мо­мент ни в GDT, ни в LDT. Выбор таблицы (локальная или глобальная) определяется по значению бита TI селектора, а положение (номер) дескриптора задается 13-битным полем INDEX селектора. При ссылке на дескриптор, выходящий за лимит таблицы, возникает исключение типа 13.

Таблица дескрипторов прерываний, используемая в защищенном режиме, может содержать описания до 256 прерываний. Таблица может содержать толь­ко вентили задач, прерываний и ловушек. Базовый адрес и лимит таблицы загружается привилегированной командой LIDT (аналогично LGDT). Размер IDT должен быть не менее 256 байт для того, чтобы в нее поместились все зарезервированные прерывания процессора. Ссылка на элементы IDT происхо­дит по командам INT, аппаратным прерываниям и исключениям процессора. При возникновении прерывания или исключения, дескриптор которого выходит за лимит таблицы, вырабатывается исключение 8.

Загрузка...