The first thing to note is that interrupts are primarily a hardware
function,
whereas processes, io requests etc, are a software functions and at a
higher
level, if you think of the overall system as a set of layers.
For most of the early micros, several hardware devices shared, (wired OR,
open collector) a single processor interrupt pin, or input line. Under
such conditions, the only way to determine the source of interrupt is to
sequentially poll all the hardware device status registers within the first
few lines of the interrupt handler to see which has the interrupt bit set,
then branch to the appropriate code to process that interrupt. This is
not very
efficient, especially if real time constraints must be met, so most
respectable
modern micros use the vector table approach. Here, each interrupting
device has
a unique address in memory which contains the address of the interrupt
handler.
The vector table is set up at processor startup, before interrupts are
enabled.
When an interrupt occurs, the vector address corresponding to the device
is read
and the contents loaded into the program counter, resulting in immediate
transfer
of control to the interrupt code. This is much faster, since no s/w polling
is required and the work is done at hardware level.
In practice, there's more to it than this, but if you need more info,
find a copy
of the 6800, 6502 processor reference manual for the polled model, or
pdp11 or 68000
processor reference manuals for the vector table approach. I pick these
because they
are fairly simple designs in terms of understanding. If you want a more
modern design,
he Cortex M3 uses the vector table approach and pretty much state of the
art...
Regards.,
Chris