Linux中有关异常处理的思维导图,包括异常目的、异常标准结构、在内核栈中保存寄存器的值、中断请求队列的初始化、中断请求队列的数据结构
树图思维导图提供 异常处理思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 异常处理思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:1ad3178933e6d06512cb497ec19f5602
异常处理思维导图思维导图模板大纲
给进程发送一个信号以通报一个反常情况
处理请求分页
在内核栈中保存大多数寄存器的内容(由汇编语言实现)
调用 C 编写的异常处理函数
通过 ret_from_exception()函数从异常退出
所有异常处理程序被调用的方式比较相似
当异常发生时,如果控制单元没有自动地把一个硬件错误代码插入到栈中,相应的汇编语言片段会包含一条 pushl $0 指令
在栈中垫上一个空值
如果错误码已经被压入堆栈,则没有这条指令
把异常处理函数的地址压进栈中,函数的名字由异常处理程序名与 do_前缀组成
标号为 error_code 的汇编语言片段对所有的异常处理程序都是相同的,除了“设备不可用”这一个异常
由于硬件的限制,很多外部设备不得不共享中断线
一些 PC 配置可以把同一条中断线分配给网卡和图形卡
仅用中断描述符表并不能提供中断产生的所有信息,内核必须对中断线给出进一步的描述
中断线、中断请求(IRQ)号及中断向量之间的关系
中断线是中断请求的一种物理描述,逻辑上对应一个中断请求号(或简称中断号),第 n 个中断号(IRQn)的缺省中断向量是 n+32
在 256 个中断向量中,除了 32 个分配给异常外,还有 224 个作为中断向量
对于每个 IRQ,Linux 都用一个 irq_desc_t 数据结构来描述,叫做 IRQ 描述符,224个 IRQ 形成一个数组 irq_desc[],其定义在/include/linux/irq.h 中