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

Опубликовано февраля 11, 2018 в Архитектура процессора Intel

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

  1. Сохранение в стеке минимального контекста прерванной программы — в стек последовательно загружаются 3 слова (FR, CS, IP);
  2. Сброс флагов IF и TF;
  3. Модификация типа (номера) прерывания в адрес вектора прерывания и системной таблицы. Эта модификация осуществляется умножением типа прерывания на 4 (по числу байт в каждом векторе прерываний), которое обычно (для ускорения) осуществляется сдвигом влево на 2 разряда.
  4. Загрузка вектора прерываний (адреса программы-обработчика прерываний) в регистры IP (слово по меньшему адресу) и CS (слово по большему' адресу).

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

При выполнении программы-обработчика после сохранения регистров (например, как правило, РОНов и, возможно, сегментов) при необходимости может быть осуществлена установка флага IF (командой STI) с тем, чтобы обеспечить возможность реакции на внешние прерывания по входу INTR при выполнении программы-обработчика прерываний (вложенное прерывание, прерывание в прерывании).

Возврат из прерванной программы осуществляется с помощью команды IRET, которая является последней командой процедуры обработки прерывания. При выполнении команды IRET последовательно восстанавливаются из стека регистры IP, CS, FR. Программный аспект (часть) восстановления контекста реализуется завершающей фазой обработчика. Для сохранения и восстановления РОНов целесообразно использовать команды PUSHA (PUSH ALL) и ЮРА (POP ALL).