中断处理程序

一、中断处理程序的严格定义

中断处理程序(Interrupt Service Routine, ISR)是操作系统内核中专门响应和处理中断事件的代码模块,其本质是硬件中断信号触发后,CPU自动跳转执行的固定入口函数


二、中断处理程序的体系结构地位

1. 在操作系统中的层级

2. 与异常处理程序的关系


三、中断处理程序的执行流程

1. 中断响应阶段

  1. 硬件自动保存上下文
    CPU将标志寄存器(EFLAGS)、代码段寄存器(CS)、指令指针(EIP)压入内核栈,确保后续恢复执行流。
  2. 中断号获取与向量计算
    从中断控制器(如PIC或APIC)读取中断号(如键盘中断为IRQ1,对应中断号33),计算ISR入口地址。
  3. 特权级切换
    若当前处于用户态(CPL=3),CPU自动切换到内核栈,并加载内核态段寄存器值。

2. 中断处理阶段

  1. 高级可编程中断控制器(APIC)应答
    向APIC发送EOI(End Of Interrupt)信号,解除中断屏蔽。
  2. 共享中断处理(可选)
    对于共享中断线(如PCIe设备),依次调用所有注册的ISR,通过request_irq()注册的共享中断处理链表实现。
  3. 关键操作执行
    • I/O设备状态读取:如读取硬盘控制器状态寄存器,确认DMA传输完成;
    • 软中断(Softirq)或任务队列(Tasklet)调度:将耗时操作延迟到下半部处理;
    • 唤醒等待队列:如读取字符设备缓冲区满后,唤醒wait_event()阻塞的进程。

3. 中断返回阶段

  1. 上下文恢复
    通过iret指令弹出EIP、CS、EFLAGS,恢复被中断的执行流。
  2. 抢占式调度检查
    若中断返回前发生调度标记(如reschedule被置位),则触发上下文切换。

四、中断处理程序的关键特性

1. 原子性与不可抢占性

2. 性能约束

3. 重入性与并发问题


五、中断处理程序的典型应用场景

1. 设备驱动中的中断处理

2. 时钟中断与时基管理

3. 异常处理与错误恢复


六、常见误区与纠正

1. 误区:ISR可以睡眠

2. 误区:中断号与IRQ编号等价

3. 误区:所有中断都需立即处理


七、总结:中断处理程序的地位与作用

维度 地位与作用
系统稳定性保障 作为硬件事件与操作系统之间的第一道接口,确保异步事件(如I/O完成、错误)及时响应。
并发控制基础 通过中断屏蔽、自旋锁等机制,协调硬件与CPU的并发访问,防止数据竞争。
资源管理核心 触发DMA完成、内存分配、进程唤醒等关键资源操作,支撑虚拟内存、进程调度等子系统。
性能瓶颈点 不当的ISR设计(如过长执行时间)会导致系统吞吐量下降,需严格遵循“上半部-下半部”分离原则。