Дескрипторные таблицыДескрипторные таблицы — служебные структуры данных, содержащие дескрипторы сегментов. В архитектуре x86 есть три вида дескрипторных таблиц:
Глобальная дескрипторная таблицаГлобальная дескрипторная таблица является общей для всех процессов. Её размер и расположение в физической памяти определяются регистром 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):
См. такжеСсылки
|