Interested Article - Дескрипторные таблицы
- 2021-04-29
- 1
Дескрипторные таблицы — служебные структуры данных, содержащие дескрипторы сегментов .
В архитектуре 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 является то, что у неё запрещён доступ к первому (с нулевым смещением относительно начала таблицы) дескриптору . Обращение к нему вызывает исключение , что предотвращает обращение к памяти с использованием незагруженного сегментного регистра.
Локальная дескрипторная таблица
В отличие от GDT , LDT может быть много (соответственно количеству задач (потоков), но не обязательно). Каждая задача может иметь свою. На расположение таблицы текущей задачи указывает регистр LDTR .
Размер и расположение LDT в линейной памяти определяются дескриптором LDT из GDT (но это не означает , что размер LDT может быть больше 65536 байт ).
Первый дескриптор LDT (№ 0) использовать можно.
Таблица дескрипторов прерываний
Таблица прерываний глобальна. Размещение в определяется регистром IDTR .
При возникновении прерывания (внешнего, аппаратного, или вызванного инструкцией Int ):
- из IDT выбирается дескриптор шлюза , соответственно номеру прерывания;
- проверяются условия защиты (права доступа);
- при соблюдении условий защиты выполняется переход на подпрограмму-обработчик этого прерывания.
См. также
Ссылки
- (англ.)
- 2021-04-29
- 1