logo
Методичка

4.3.1 Дескрипторные таблицы

Дескрипторные таблицы – служебные структуры данных, содержащие дескрипторы сегментов. В архитектуре intel86 есть три вида дескрипторных таблиц:

  1. Глобальная дескрипторная таблица (Global Descriptor Table, GDT);

  2. Локальная дескрипторная таблица (Local Descriptor Table, LDT);

  3. Таблица векторов прерываний (Interrupt Descriptor Table, IDT).

Глобальная дескрипторная таблица одна. Она общая для всех задач. Её размер и расположение в физической памяти определяются регистром GDTR. Дескрипторы LDT и сегментов задач (TSS) могут находиться только здесь. Особенностью GDT является то, что у неё запрещён доступ к первому (№0) дескриптору. Обращение к нему вызывает исключение #GP, что предотвращает обращение к памяти с использованием незагруженного сегментного регистра.

Локальных дескрипторных таблиц может быть много (соответственно количеству задач (потоков), но не обязательно). Каждая задача может иметь свою локальную таблицу. Размер и расположение LDT в линейной памяти определяются дескриптором LDT из GDT (но это не означает, что размер LDT может быть больше 65536 байт). Первый дескриптор LDT (№0) использовать можно.

Таблица векторов прерываний глобальна. Размещение в физической памяти определяется регистром IDTR. При возникновении прерывания (внешнего, аппаратного, или вызванного инструкцией int):

Таблица векторов прерываний (Interrupt Descriptor Table, IDT) используется в x86 архитектуре и служит для связи обработчика прерывания с вектором (номером прерывания).

В реальном режиме таблица векторов прерываний расположена в первом килобайте памяти, начиная с адреса 0000:0000, и содержит 256 векторов прерываний. В защищённом режиме адрес в физической памяти и размер таблицы прерываний определяется 48-битным регистром IDTR.

В IDT используются следующие типы прерываний: аппаратные прерывания, программные прерывания и прерывания, зарезервированные процессором, называемые исключениями (для реального режима – первые пять, для защищённого режима – первые 32) на случай возникновения некоторых событий (деление на ноль, ошибка трассировки, переполнение).

В реальном режиме элементом IDT является 32-битный FAR адрес обработчика прерывания.

В защищённом режиме элементом IDT является шлюз прерывания длиной 8 байт, содержащий сегментный (логический) адрес обработчика прерывания, права доступа и др.

Первый этап инициализации выполняется BIOS, перед загрузкой ОС. Второй – непосредственно самой операционной системой. Операционной системе доступно изменение некоторых адресов прерываний.