<p>I recently started diving into low level OS programming. I am (very slowly) currently working through two older books, XINU and Build Your Own 32 Bit OS, as well as some resources suggested by the fine SO folks in my previous question, <a href="https://stackoverflow.com/questions/43180/how-to-get-started-in-operating-system-development">How to get started in operating system development</a>.</p>

<p>It could just be that I haven't encountered it in any of those resources yet, but its probably because most of these resources were written before ubiquitous multicore systems, but what I'm wondering is how interrupts work in a multicore/multiprocessor system.</p>

<p>For instance, say the DMA wants to signal that a file read operation is complete.  Which processor/core acknowledges that an interrupt was signaled?  Is it the processor/core that initiated the file read? Is it whichever processor/core that gets to it first?</p>

In the old days the interrupt went to all processors.  In modern times some kinds of hardware can be programmed by an OS to send an interrupt to one particular processor.  Of course if you could choose a processor dynamically instead of statically, you wouldn't want to send the interrupt to whichever processor initiated the I/O, you'd want to send it to whichever processor is least burdened at the present time and can most efficiently start the next I/O operation, and/or whichever processor is least burdened at the present time and can most efficiently execute the thread that was waiting for the results.