Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

As x86 computers shifted from 32-bit to 64-bit, they also shifted from using 8259-style Programmable Interrupt Controllers with 8 interrupt lines. (Or two multiplexed PICs for a total of 15 interrupt lines.) Then, if you were to install 32-bit Windows for an operating system, Windows would implement 32 software IRQLs (Interrupt Request Levels) with IRQLs 3 through 26 (or so) being reserved for devices.

Then the x64 platform came along. You need a machine with an APIC, which has 256 interrupt lines, in order to install 64-bit Windows on it. However, 64-bit Windows only implements 16 IRQLs.

So my question is, does anyone know why 64-bit Windows would implement fewer IRQLs than its 32-bit counterpart even though it has many more hardware interrupt lines at its disposal?

share|improve this question
up vote 2 down vote accepted

Because with a DOS type system you broadly needed an IRQ for each event and so lots of IRQ levels to allow events to mask other events simply. With a real OS you pretty much just need a single event and let the kernel figure everything else out (actually it's convenient to have a couple of levels for NMI and real-time).

So I'm guessing that with 64bit and knowing that you aren't backward compatible supporting some DOS app on a 386 they took the opportunity to simplify.

share|improve this answer
How can a "real OS" fix a hardware deficiency? – user1249 Aug 7 '12 at 18:59
@ThorbjørnRavnAndersen if the OS has proper kernel and protected hardware devices it can deal with any event in the kernel rather than having the CPU IRQL deal with different events happening at the same time – Martin Beckett Aug 7 '12 at 19:37
The original PC-architecture did not have that... – user1249 Aug 7 '12 at 19:46
Good answer. I'll wait a day to give a chance to anyone else wants to chime in, and then mark this as the answer. Thanks! – Ryan Ries Aug 7 '12 at 20:51
From what I recall, the IBM PC configured the 8259 for edge-triggered interrupts, which had the rather annoying side-effect of making it very difficult to reliably share interrupt lines among multiple sources. If two devices X and Y shared an interrupt line, and Y wanted to interrupt the CPU, it would drive the interrupt line until it was serviced. If the ISR polled X, observed that it wasn't causing an interrupt, and then polled Y and handled its interrupt, and if before Y handled its interrupt X started asserting its interrupt output, then... – supercat Apr 21 '15 at 21:45

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.