Linux中有关中断处理的思维导图,包括中断和异常处理的硬件处理、Linux 对中断的处理
树图思维导图提供 中断处理思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 中断处理思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:9d228e5c1aa974769aeb59b6ede1d8bf
中断处理思维导图思维导图模板大纲
从硬件的角度来看 CPU 如何处理中断和异常
假定内核已被初始化,CPU已从实模式转到保护模式
当 CPU 执行了当前指令之后,CS 和 EIP 这对寄存器中所包含的内容就是下一条将要执行指令的逻辑地址
CPU 可以做
确定所发生中断或异常的向量 i(在 0~255 之间)
通过 IDTR 寄存器找到 IDT 表,读取 IDT 表第 i 项(或叫第 i 个门)
有效性检查
“段”级检查
将 CPU 的当前特权级 CPL(存放在 CS寄存器的最低两位)与 IDT 中第 i 项段选择符中的 DPL 相比较
中断处理程序的特权级不能低于引起中断的程序的特权级
中断处理程序一般运行在内核态,其特权级为 0
“门”级检查
把 CPL 与 IDT 中第 i 个门的 DPL 相比较
如果 CPL 大于DPL,也就是当前特权级(3)小于这个门的特权级(0),CPU 就不能“穿过”这个门,于是产生一个“通用保护”异常
为了避免用户应用程序访问特殊的陷阱门或中断门
不包括外部 I/O 产生的中断或因 CPU内部异常而产生的异常,也就是说,如果产生了中断或异常,就免去了“门”级检查
检查是否发生了特权级的变化
堆栈的更换
中断处理程序运行在内核态(特权级为 0),特权级发生了变化
而当中断发生在内核态时,即 CPU 在内核中运行时,则不会更换堆栈
紧急的(Critical)
中断到来时中断控制器做出应答,对中断控制器或设备控制器重新编程
对设备和处理器同时访问的数据结构进行修改
紧急操作应该在一个中断处理程序内立即执行,而且是在禁用中断的状态下
非紧急的(Noncritical)
只有处理器才会访问的数据结构(按下一个键后,读扫描码)
非紧急可延迟的(Noncritical deferrable)
把一个缓冲区的内容拷贝到一些进程的地址空间
把键盘行缓冲区的内容发送到终端处理程序的进程
基本的操作
在内核栈中保存 IRQ 的值和寄存器的内容
给与 IRQ 中断线相连的中断控制器发送一个应答,这将允许在这条中断线上进一步发出中断请求
执行共享这个 IRQ 的所有设备的中断服务例程(ISR)
跳到 ret_from_intr( )的地址后终止