Обработка прерываний (англ. interrupt handler), также известна как процедура обработки прерываний (англ. interrupt service routine, ISR) или обработчик прерываний, это функция обратного вызова в операционной системе или драйвере устройства, выполнение которой вызывается получением прерывания. Обработчики прерываний имеют множество функций, которые различаются в соответствии с причиной возникновения прерывания и быстродействия обработки.
Обработчик прерываний является низкоуровневым двойником обработчика событий (сообщений). Эти обработчики инициируются или аппаратными прерываниями или инструкциями прерывания на программном уровне, и используются для обслуживания аппаратных устройств и переходов между защищенными режимами операций, такими как системные вызовы.
Обзор
В некоторых ОС - Linux , Microsoft Windows и некоторых других, обработка прерываний поделена на две части: обработчики прерываний первого уровня (англ. First-Level Interrupt Handler, FLIH) и обработчики прерываний второго уровня (англ. Second-Level Interrupt Handlers, SLIH) . FLIH также называемые твердые / быстрые обработчики прерываний (англ. hard / fast interrupt handlers), а SLIH также называемые мягкие / медленные обработчики прерываний (англ. soft / slow interrupt handlers).
FLIH выполняет менее платформо-зависимую обработку прерывания. В ответ прерыванию происходит переключение контекста и загружается, и выполняется код для прерывания. Задачей для FLIH является быстрая обработка прерывания, или запись платформо-зависимых критических данных, которые доступны только во время прерывания, и планирования исполнения SLIH для дальнейшей обработки прерывания.
FLIH также причиняют дрожание, маскируют прерывания. Уменьшение дрожания наиболее важное для операционных систем реального времени, ибо они должны отвечать требованию выполнения определенного кода в согласованный промежуток времени. Для уменьшения дрожания и уменьшения вероятности потери данных, через скрытые прерывания, программисты пытаются уменьшить время выполнения FLIH, вынося весь возможный код в SLIH. Со скоростью современных компьютеров, FLIH могут выполнить все устройство и платформо-зависимое обработки, и использовать SLIH для дальнейшего платформо-независимого долго длительной проработки.
FLIH, обслуживающие аппаратную часть, обычно маскируют свое прерывание до завершения своего выполнения. Особый FLIH, который разоблачает связанное с ним прерывание, к своему завершению называется повторно-использованным обработчиком прерываний. Повторно-использованный обработчик прерываний может вызвать переполнение стека через многократные вложенные вызовы.
SLIH завершает задачи долгой обработки прерываний подобно процессу. SLIH или имеет выделенный ядром поток для каждого обработчика, или выполняется в пуле рабочих потоков ядра. SLIH может иметь большое время выполнения, и поэтому, как правило, планируется подобно потокам и процессам.
В разных системах FLIH и SLIH именуются по-разному. В Windows FLIH называется обработчиком прерывания, а SLIH - отложенным вызовом процедуры. В Linux, FLIH называется upper half , а SLIH - lower half или bottom half . Это отличается от именования в других Unix-подобных системах, где оба являются частью bottom half.