Программирование драйверов Windows

       

IRQL, Interrupt ReQuest Level


Уровень приоритета выполнения. Термин, исторически доставшийся от задач по обслуживанию прерываний (IRQ), но теперь связанный не только с ними. Приоритеты, принятые для программного кода, работающего в режиме ядра. Планирование потоков с приоритетами IRQL хотя бы на 1 выше минимального (PASSIVE_LEVEL) сильно отличается от планирования потоков в пользовательском режиме. В режиме ядра поток, работающий при некотором приоритете IRQL может быть прерван только для выполнения работы потоком с более высоким IRQL. Даже поток с равным приоритетом IRQL должен дожидаться естественного окончания работы своего "равноправного коллеги". Поток может самостоятельно повысить свой IRQL, однако, величина повышения в некоторых версиях Windows не произвольна. Например, работая на уровне PASSIVE_LEVEL (0), поток может получить от операционной системы Windows XP согласие только на уровень IRQL равный 10 (для сравнения, DISPATCH_LEVEL имеет численное значение 3, a INTERRUPT_LEVEL численно равен 13).

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

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



Содержание раздела