Priority

Windows NT uses a notion of interrupt priority level to control and schedule Interrupt Service Routines (ISRs) and certain types of system operation. To implement this, it is necessary to be able to mask off all interrupts at and below a given priority. The masking operation must be reliable. (That is, once interrupts have been masked off at and below level N, it is guaranteed that no interrupt of level N or below will be seen until unmasked). Ideally, the interrupt controller would mask off all interrupts at level N and below when a level N interrupt is acknowledged, and the interrupt controller would allow the processor to mask off all interrupts at and below level N by doing a single write to a register. The OS can emulate this behavior by "manually" writing mask registers, but at the cost of reduced performance. Interrupt priority level is changed very frequently, so making the interface between the processor and the interrupt controller simple and efficient is important.

Windows NT requires at least 16 interrupt priority levels. Ideal systems will not use any more. Notice that these are levels and not sources or vectors. There can be an arbitrary number of vectors (sources) per level, and it is desirable to support as many sources as possible.

Priority Hierarchy

The following ordering of priority levels is required:

NMI

Power Fail

Inter-Processor Interrupt

Interval timers

I/O devices

...

I/O devices

DPC

/ Software interrupts

APC

/ System sends to self.

0