转了个圈,又回来了
分类: LINUX
2011-04-05 12:01:58
下面用一幅图来介绍中断来了后的函数调用过程。
IRQ中断来了
|
|
中断向量入口,跳转到中断处理程序
|
|
是否内核态------Irq_usr
| |
| |
get_irqnr_and_base
获取中断号
asm_do_IRQ 处理中断
注意:内核态的中断处理和用户态的中断处理都是调用了asm_do_IRQ来处理中断,不同点在于中断返回时的处理。Irq_usr判断是否有进程抢占和待处理信号。但
Irq_svc只判断是否需要调度,因为它要尽快返回内核态。
asm_do_IRQ (irq)
获取irq对应的struct irqdesc结构体
|
|
(Irq_desc+irq)->handle_irq
|
|
循环调用
desc->action->handle,
也就是依次调用注册在该中断上的处理函数。