Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прерывания.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
353 Кб
Скачать
☆

Шлюз прерывания

Шлюз прерывания отличается только полем типа = 1110.

При возникновении прерывания, которому соответствует шлюз прерывания, микропроцессор выполняет те же действия, что и для шлюза ловушки, но с одним важным отличием:

при передаче управления обработчику прерывания через шлюз прерывания, микропроцессор сбрасывает флаг прерывания в регистре eflags в 0, запрещая тем самым обработку аппаратных прерываний. Этот факт имеет важное значение для программирования обработчиков аппаратных и программных прерываний.

Совет. Если у вас есть сомнение в том, какой из шлюзов - прерывания или ловушки - использовать — применяйте шлюз прерывания.

При вызове обработчика прерывания или особого случая через шлюз прерывания или ловушки 32-битное поле offset, задающее смещение в сегменте кода обработчика, загружается в регистр процессора EIP. В свою очередь 16-битное поле селектора, предназначенное для выбора сегмента кода обработчика, загружается в процессоре в регистр CS (сегмент кода). После этой загрузки в процессоре полностью определен начальный адрес обработчика прерывания или особого случая. Основным отличием использования шлюза прерывания и шлюза ловушки для вызова обработчика является аппаратный сброс флага IF при вызове обработчика через шлюз прерывания. В свою очередь вызов обработчика через шлюз ловушки не оказывает аппаратного воздействия на флаг IF.

Шлюз задач

В отличие от шлюзов прерывания и ловушек, в шлюзе задач поле offset не используется. Вызов обработчика прерывания через шлюз задачи сопровождается переключением задач с использованием системной структуры данных в виде TSS – Task State Segment (сегмент состояния задачи). В связи с этим обработчик прерывания трактуется как отдельная задача, в отличие от обработчика, вызываемого через шлюз ловушки или прерывания, при котором обработка прерывания или особого случая реализуется в контексте прерываемой задачи. В связи с тем, что в TSS обработчика прерывания задается содержимое регистра IP, то и поле offset в шлюзе задачи является невостребованным. В свою очередь поле селектора шлюза задачи должно обязательно определять дескриптор TSS, иначе генерируется особый случай.

Шлюз задачи отличается:

1) поле типа = 1110;

2) поле selector вместо селектора сегмента кода указывает на дескриптор сегмента состояния задачи (TSS).

Осуществляется переход на новую задачу, которая будет осуществлять обработку прерывания. Задача является частью механизма многозадачности. Т.е. производится переключение задач. (Текущее состояние прерываемой задачи аппаратно сохраняется в ее собственном TSS.)

Для каждой задачи определяется сегмент состояния задачи TSS (Task Segment Status) со строго определенной структурой. В этом сегменте есть поля для сохранения всех регистров общего назначения, некоторых системных регистров и другой информации. Всю совокупность этой информации называют контекстом задачи. Этот сегмент описывается, подобно другим сегментам, дескриптором в таблице GDT или LDT.

Если с помощью некоторого селектора обратиться к такому дескриптору, то микропроцессор осуществит переключение на соответствующую задачу. Подобные переключения могут, в частности, осуществляться операционной системой, поддерживающей многозадачность, в соответствии с некоторой дисциплиной разделения времени между задачами. Переключение задач может производиться обычными командами межсегментной передачи управления либо по возникновению прерывания при переходе к обработчику прерывания через шлюз задачи.

РЕЗЮМЕ. Шлюзы ловушки и прерывания с помощью полей selector и offset определяют адрес, по которому находится точка входа в программу обработки прерывания.

Шлюз задачи предназначен для реализации принципиально иного перехода к обработчику прерываний — с использованием механизма переключения задач.

Обратим внимание, разработчики современных ОС редко используют шлюз задачи, т.к. переключение на другую задачу требует существенно больших затрат времени, а полное сохранение всех рабочих регистров часто не требуется. Таким образом, используются чаще всего шлюзы прерываний.