How linux schedules things when interrupts occur

From: shane Miller
Date: Sat Mar 04 2006 - 10:41:39 EST


All-

I know what interrupts are. I read the Linux Device driver book and
see how to deal with them. But I don't see the full picture on how the
kernel deals with scheduling it's work. Bsically I am leaking for more
meat on this.

Suppose Linux is running on a single CPU system. Conceptually the CPU
is executing a user thread/process --- whether that be user code or
library code on the user's behalf --- or the CPU is in the kernel.

When an APIC processed hardware interrupt comes and assuming the
interrupt is not masked off then if

* the CPU is doing user code, the kernel arranges to block/preempt the
current user process/thread and jumps into the kernel and runs the
registered interrupt handler.

* the CPU is in the kernel so it jumps to the interrupt handler and
runs it.

Can somebody put some more meat on this? For example,

* how does the kernel decide what to schedule once the interrupt
handler is done? Does it, as may be the case, resume the preempted user
thread or resume where it left off in the kernel? Or does it merely
call schedule().
* What happens if a signal comes during this work?

Once I understand this I think I can deal with the case in which an
interrupt comes while an interrupt is already being processed.

Thanks.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/