Система приоритетов
Windows NT имеет двухуровневую модель приоритетов (см. рис. 4).
- Приоритеты высшего уровня (уровни запросов прерываний – Interrupt ReQuest Level – IRQL) управляются аппаратными и программными прерываниями.
- Приоритеты низшего уровня (приоритеты планирования) управляются планировщиком.
Рис. 4. Система приоритетов
Уровни запросов прерываний (IRQL)
В любое время исполняющийся код будет иметь определенный уровень IRQL. Этот уровень определяет, что позволено делать коду, применяется ли к коду механизм квантования времени планировщика и каковы его взаимосвязи с другими потоками исполнения.
Наивысшие из уровней IRQL – уровни запросов прерываний устройств (Device Interrupt Request Levels – DIRQLs). Это уровни IRQL, соответствующие аппаратным прерываниям. Другие уровни IRQL реализованы программно.
Уровень IRQL прерывания контролирует то, когда прерывание может быть обработано. Прерывание никогда не будет обработано, пока процессор занят обработкой прерывания более высокого уровня. Уровни IRQL располагаются в порядке убывания от HIGH_LEVEL до PASSIVE_LEVEL.. Уровни в подмножестве от HIGH_LEVEL до APC_LEVEL называют повышенными (elevated IRQLs). DISPATCH_LEVEL и APC_LEVEL реализованы программно.
Модель приоритетов низшего уровня управляет исполнением потоков, выполняющихся на уровне IRQL PASSIVEJLEVEL. Этот уровень контролируется планировщиком (scheduler) (его также называют диспетчером – dispatcher), который планирует исполнение потоков (но не процессов). Планировщик планирует исполнение прикладных и системных потоков, используя для наблюдения и контроля исполнения потоков системные часы.