Обработка прерываний в защищенном режиме
Обработка прерываний в защищенном режиме также отличается от обработки
в реальном. Основной элемент системы обработки прерываний в защищенном
режиме - таблица IDT (Interrupt Descriptors Table - таблица дескрипторов
прерываний).
Как и в случае с дескрипторами сегментов, каждый дескриптор из таблицы
IDT - восьмибайтная структура. Три типа дескрипторов могут находится в
таблице IDT:
Шлюз прерывания
Шлюз ловушки
Шлюз
задачи
Различия между шлюзами прерывания и ловушки: при выполнении обработчика
прерывания все прерывания автоматически запрещаются до завершения
обработчика (командой IRETD), а также сбрасывается флаг трассировки.
Формат дескриптора прерывания или ловушки:
байты 0-1: биты 15-0
смещения
байты 2-3: селектор сегмента
байт 4: нулевой
байт 5:
бит 7 - присутствие сегмента
биты 6-5 - уровень привилегий сегмента
бит 4 - тип дескриптора (0 - системный)
байты 6-7: биты 31-16 смещения
Возможные
типы шлюза:
0110 - 16 битный шлюз прерывания
0111 - 16 битный
шлюз ловушки
1110 - 32 битный шлюз прерывания
1111 - 32 битный шлюз
ловушки
Поскольку возможных прерываний - 256, то в таблице IDT должно быть 256
дескрипторов. Порядковый номер дескриптора определяет при вызове какого
прерывания он будет использоваться. При вызове обработчика прерываний
процессор помещает в стек регистр флагов и адрес возврата. Некоторые
прерывания также дополнительно помещают туда код ошибки.