7.4.3.3. Таблица дескрипторов
прерываний
Дескрипторы точек входа в программы обработки прерываний
или задачи прерываний
хранятся в памяти в таблице, называемой таблицей дескрипторов прерываний (IDT). Таблица ШТ связывает каждый
вектор прерывания или исключения с дескриптором для команд, которые обрабатывают
соответствующее событие.
Для доступа к конкретной программе обработки МП 80386
получает вектор, который является
индексом позиции таблицы с дескриптором. Источник этого вектора зависит от типа прерывания. Если прерывание маскируемое (по
входу INTR), то этот вектор передается контроллером прерываний
8259А. Если прерывание немаскируемое (по
входу NMI), то для входа в таблицу IDT используется вектор
2.
Таблица IDT является массивом 8-байтовых
дескрипторов. В отличие от таблиц GDT и LDT первый вход в таблицу может
содержать дескриптор. Для правильного обращения к дескриптору процессор умножает значение
вектора на восемь. Таблица IDT может содержать до 256 дескрипторов векторов и
размещаться в любом месте памяти. Процессор получает к ней доступ через регистр
IDTR с помощью команд LIDT и SIDT его загрузки и сохранения.
Команда LIDT загружает из памяти регистр IDTR
значениями линейного базового адреса и
границы таблицы IDT. Эта команда выполняется
только при нулевом текущем уровне
привилегий CPL. Обычно она используется во время инициализации операционной
системы при создании таблицы IDT. Операционная система может также использовать эту команду для
переключения с одной таблицы ЮТ на другую.
Команда SIDT копирует в ячейки памяти
значения базы и границы, хранящиеся в регистре IDTR, и может исполняться при любом
уровне привилегий.