操作系统中的中断与异常处理机制
字数 1210 2025-11-21 18:59:15
操作系统中的中断与异常处理机制
中断和异常是操作系统中实现CPU与外部设备协同工作、处理紧急事件的核心机制。它们允许CPU暂停当前任务,转去处理更高优先级的事件,处理完成后恢复原任务。
1. 基本概念与分类
-
中断:来自CPU外部硬件设备的信号,异步发生(与当前指令执行无关)
- 硬件中断:键盘输入、定时器到期、磁盘I/O完成
- 可屏蔽中断:可通过中断屏蔽位忽略(如网络包到达)
- 非可屏蔽中断:紧急事件(如内存错误、电源故障)
-
异常:CPU执行指令时同步检测到的特殊条件
- 故障(Fault):可修复错误(如页错误、除零错误)
- 陷阱(Trap):主动触发的异常(如系统调用、断点调试)
- 终止(Abort):不可恢复错误(如硬件故障)
2. 中断处理硬件支持
- 中断控制器:接收多个中断源信号,进行优先级仲裁后向CPU发送中断请求
- 中断向量表:存储中断处理程序入口地址的数组,每个中断类型有唯一编号
- 程序状态字:包含中断屏蔽位、特权级等控制标志的特殊寄存器
3. 中断处理完整流程
(1)中断触发阶段
- 设备通过中断请求线向中断控制器发送信号
- 中断控制器屏蔽低优先级中断,向CPU发送INTR信号
(2)现场保存阶段
- CPU完成当前指令执行后,检测到中断信号
- 将当前程序计数器、程序状态字等关键寄存器压入内核栈
- 关闭中断响应(设置中断屏蔽位防止嵌套中断)
(3)中断识别阶段
- CPU从中断控制器读取中断向量号(如键盘中断为0x21)
- 通过中断描述符表查询对应中断服务程序地址
(4)上下文切换阶段
- 保存所有通用寄存器状态到进程控制块
- 切换到内核态,使用内核栈空间
- 更新页表基址寄存器指向内核地址空间
(5)中断处理阶段
- 执行中断服务程序(ISR)
- 对于设备中断:读取设备状态寄存器,进行数据传输
- 对于页错误:分配物理页框,更新页表项
(6)恢复现场阶段
- 从内核栈恢复所有寄存器值
- 恢复程序状态字和程序计数器
- 切换回用户态(如原程序在用户态运行)
4. 异常处理特殊流程
-
页错误异常:
- 检查访问地址合法性
- 分配物理页框并建立映射
- 重新执行触发异常的指令
-
系统调用陷阱:
- 通过特定指令(如x86的int 0x80)主动触发
- 根据系统调用号查找服务例程
- 进行参数验证和权限检查
5. 关键设计要点
- 中断嵌套:高优先级中断可打断低优先级中断处理
- 中断共享:多个设备共享中断线时需轮询检查中断源
- 下半部机制:将中断处理分为紧急的顶部和可延迟的底部(如软中断、任务队列)
- 时钟中断:周期性中断实现时间片轮转调度和系统计时
6. 实例分析(键盘输入中断)
- 按键触发键盘控制器中断
- CPU保存当前文本编辑器的执行现场
- 读取键盘扫描码并转换为ASCII码
- 将字符存入输入缓冲区
- 唤醒等待输入的进程
- 恢复文本编辑器执行,字符显示在屏幕上
这种机制保证了操作系统能及时响应外部事件,同时维持多任务环境的隔离性和稳定性。