Обработка прерываний
В момент, когда сигнал прерывания достигает центрального процессора, процессор производит сравнение значение IRQL полученного запроса на прерывание со значением текущего IRQL процессора. В случае если новое значение IRQL меньше или равно старому, запрос на прерывание временно игнорируется и остается в состоянии ожидания до тех пор, пока значение IRQL процессора не понизится. В том случае, если уровень IRQL поступившего запроса превышает текущее значение IRQL процессора, последний выполняет следующие действия:
По окончании работы сервисная процедура выполняет специальную инструкцию (процессорную команду), означающую полное завершение обработки прерывания. По этой инструкции из стека восстанавливается информация о предыдущем состоянии процессора (включая предыдущее значение IRQL) и управление возвращается прерванному программному коду.
Следует особо отметить, что такая схема позволяет запросу с более высоким значением IRQL прерывать работу процедур, обслуживающих прерывания с низким значением IRQL, то есть прерывать прерывания. Благодаря тому, что весь этот механизм для сохранения состояний использует стек, то каких-либо недоразумений не возникает. Однако при этом существенно повышается значение синхронизации выполнения потоков и обращения к совместно используемым данным.