Linux中有关处理程序执行的思维导图,包括中断处理程序 IRQn_interrupt、处理程序执行概念、do_IRQ( )函数
树图思维导图提供 处理程序执行思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 处理程序执行思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:b741e955f44ef0050e61a7178063eb28
处理程序执行思维导图思维导图模板大纲
从中断请求的发生到 CPU 的响应,再到中断处理程序的调用和返回,沿着这一思路走一遍,以体会 Linux 内核对中断的响应及处理
外设的驱动程序都已完成了初始化工作,并且已把相应的中断服务例程挂入到特定的中断请求队列
当前进程正在用户空间运行(随时可以接受中断),且外设已产生了一次中断请求
经过 gcc 的预处理,宏定义 BUILD_16_IRQS(0x0) 会被展开成 BUILD_IRQ(0x00)至BUILD_IRQ(0x0f)
把中断号减 256 的结果保存在栈中
进入中断处理程序后第一个压入堆栈的值
堆栈中 ORIG_EAX 的值
对于每个中断处理程序,唯一不同的就是压入栈中的这个数
中断处理程序会使用的所有 CPU 寄存器都保存在栈中
流程
do_IRQ( )的返回地址
由 SAVE_ALL 推进栈中的一组寄存器的值
ORIG_EAX(即 n-256)
CPU 自动保存的寄存器
具体说明
define IRQ_INPROGRESS
1
正在执行这个 IRQ 的一个处理程序
define IRQ_DISABLED
2
由设备驱动程序已经禁用了这条 IRQ 中断线
define IRQ_PENDING
4
一个 IRQ 已经出现在中断线上,且被应答,但还没有为它提供服务
define IRQ_REPLAY
8
当 Linux 重新发送一个已被删除的 IRQ 时
define IRQ_AUTODETECT
16
当进行硬件设备探测时,内核使用这条 IRQ 中断线
define IRQ_WAITING
32
当对硬件设备进行探测时,设置这个状态以标记正在被测试的 irq
define IRQ_LEVEL
子主题 1
64
IRQ level triggered
define IRQ_MASKED
128
IRQ masked - shouldn't be seen again
define IRQ_PER_CPU
256
IRQ is per CPU
从中断返回
ret_from_intr()
终止中断处理程序
ret_from_sys_call( )
终止系统调用,即由 0x80 引起的异常
ret_from_exception( )
终止除了 0x80 的所有异常