Пистема прерываний 32-разрядных микропроцессоров J80x86 125
говорили выше, она имеет дело с таблицей дескрипторов прерываний (Interrupt
Descriptor Table, IDT). Дело здесь не столько в названии таблицы, сколько в том,
что таблица ЮТ представляет собой не таблицу с адресами обработчиков преры-
ваний, а таблицу со специальными системными структурами данных (дескриптора-
ми), доступ к которой со стороны пользовательских (прикладных) программ невоз-
можен. Только сам микропроцессор (его система прерываний) и код операционной
системы могут получить доступ к этой таблице, представляющей собой специаль-
ный сегмент, адрес и длина которого содержатся в регистре IDTR (см. рис. 4.2).
Этот регистр аналогичен регистру GDTR в том отношении, что он инициализиру-
ется один раз при загрузке системы. Интересно заметить, что в реальном режиме
работы регистр IDTR также указывает на адрес таблицы прерываний, но при этом,
как и в процессоре i8086, каждый элемент таблицы прерываний (вектор) занимает
всего 4 байт и содержит 32-разрядный адрес в формате селектор -.смещение (CS:IP).
Начальное значение этого регистра равно нулю, но в него можно занести и другое
значение. В этом случае таблица векторов прерываний будет находиться в другом
месте оперативной памяти. Естественно, что перед тем, как занести в регистр IDTR
новое значение, необходимо подготовить саму таблицу векторов. В защищенном
режиме работы загрузку регистра IDTR может произвести только код с максималь-
ным уровнем привилегий.
Каждый элемент в таблице дескрипторов прерываний, о которой мы говорим уже
в защищенном режиме, представляет собой 8-байтовую структуру, более похожую
на дескриптор шлюза, нежели на дескриптор сегмента.
Как мы уже знаем, в зависимости от причины прерывания процессор автомати-
чески индексирует таблицу прерываний и выбирает соответствующий элемент,
с помощью которого и осуществляется перенаправление в исполнении кода, то есть
передача управления на обработчик прерывания. Однако таблица IDT содержит
только дескрипторы шлюзов, а не дескрипторы сегментов кода, поэтому факти-
чески получается что-то типа косвенной адресации, но с рассмотренным ранее
механизмом защиты с помощью уровней привилегий. Благодаря этому пользова-
тели уже не могут сами изменить обработку прерываний, которая предопределя-
ется системным программным обеспечением.
Дескриптор прерываний может относиться к одному из трех типов:
Q коммутатор прерывания (interrupt gate);
Q коммутатор перехвата (trap gate);
Q коммутатор задачи (t,ask gate).
Нри обнаружении запроса на прерывание и при условии, что прерывания разрешены,
процессор действует в зависимости от типа дескриптора (коммутатора), соответству-
ю
Щего номеру прерывания. Первые два'типа дескрипторов прерываний вызывают
Пе
реход на соответствующие сегменты кода, принадлежащие виртуальному адресно-
М
У пространству текущего вычислительного процесса. Поэтому про них говорят, что
°работка прерываний по этим дескрипторам осуществляется под контролем (в кон-
е
ксте) текущей задачи. Последний тип дескриптора (коммутатор задачи) вызывает
°лное переключение процессора на новую задачу со сменой всего контекста в соответ-
вии с сегментом состояния задачи (TSS). Рассмотрим оба варианта.