Дескрипторные таблицы — служебные структуры данных, содержащие дескрипторы сегментов.
В архитектуре x86 есть три вида дескрипторных таблиц:
- Глобальная дескрипторная таблица (англ. Global Descriptor Table, GDT);
- Локальная дескрипторная таблица (англ. Local Descriptor Table, LDT);
- Таблица векторов прерываний (англ. Interrupt Descriptor Table, IDT);
Глобальная дескрипторная таблица
правитьГлобальная дескрипторная таблица является общей для всех процессов. Её размер и расположение в физической памяти определяются регистром GDTR. Размер таблицы не может превышать 8192 дескрипторов, поскольку один дескриптор занимает 8 байт, а лимит в регистре GDTR — двухбайтный и хранит размер таблицы минус один (максимальное значение лимита — 65535), а 8192 x 8 = 65536.
Дескрипторы LDT и сегментов задач (TSS) могут находиться только здесь.
Особенностью GDT является то, что у неё запрещён доступ к первому (с нулевым смещением относительно начала таблицы) дескриптору. Обращение к нему вызывает исключение #GP, что предотвращает обращение к памяти с использованием незагруженного сегментного регистра.
Локальная дескрипторная таблица
правитьВ отличие от GDT, LDT может быть много (соответственно количеству задач (потоков), но не обязательно). Каждая задача может иметь свою. На расположение таблицы текущей задачи указывает регистр LDTR.
Размер и расположение LDT в линейной памяти определяются дескриптором LDT из GDT (но это не означает, что размер LDT может быть больше 65536 байт).
Первый дескриптор LDT (№ 0) использовать можно.
Таблица дескрипторов прерываний
правитьТаблица прерываний глобальна. Размещение в физической памяти определяется регистром IDTR.
При возникновении прерывания (внешнего, аппаратного, или вызванного инструкцией Int):
- из IDT выбирается дескриптор шлюза, соответственно номеру прерывания;
- проверяются условия защиты (права доступа);
- при соблюдении условий защиты выполняется переход на подпрограмму-обработчик этого прерывания.
См. также
правитьСсылки
править- Руководство по процессору Intel (англ.)