Загрузка...

Последовательность прерывания


Последовательность прерывания – это действие, выполняемое процессором для реализации прерывания текущего процесса:

1. Получает запрос на прерывание.

2. Ожидание завершения текущей команды.

3. Приём типа или номера прерывания.

4. Сохранение в стеке минимально необходимых данных состояния.

5. Запрет повторных прерываний.

6. Установление нового состояния процессора, задаваемого типом или номером прерывания.

7. Выполнение процедуры обработки прерывания.

8. Восстановление состояния процессора.

Последовательность выполнения прерываний

Рис. 1. 54. Последовательность выполнения прерываний

При обработке прерывания процессор сохраняет в стеке слово состояния, сбрасывает флаг разрешения прерываний IF и вызывает процедуру обслуживания, точка входа в которую описана в таблице прерываний, хранящейся в ОЗУ. При сохранении контекста осуществляется запрет прерываний от того же источника.

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

Конечно, программно во время обслуживания прерывания возможно умышленное или случайное изменение указателя или содержимого стека, и тогда команда IRET “отправит” процессор по другому адресу, в результате чего компьютер может зависнуть. Использование стека для сохранения состояния процессора является обязательным и обеспечивает организацию вложенной обработки прерывания, если процедура обслуживания установит флаг IF. Тогда возникает опасность переполнения стека, поскольку каждое “вложение” будет использовать его для своих целей. Переполнение стека также может стать причиной зависаний. Длинные процедуры со сброшенным флагом IF могут привести к потере системного времени, поскольку “часы” операционной системы используют аппаратные прерывания от таймера.

Загрузка...