中断处理¶
概述¶
中断是指CPU暂停当前程序的执行,转去处理突发事件,处理完后再返回原程序继续执行的过程。中断机制是现代计算机系统的重要特性,它使CPU能够响应外部事件,实现与外设的并行工作。
中断的作用¶
中断的重要作用
中断机制使计算机系统具有以下重要能力:
- 实现CPU与外设的并行工作
- CPU启动外设后继续执行程序
- 外设完成后通过中断通知CPU
-
提高系统效率
-
处理硬件故障和软件错误
- 及时响应硬件故障
- 处理程序运行错误
-
提高系统可靠性
-
实现人机交互
- 响应键盘输入
- 处理鼠标事件
-
提供交互式操作
-
支持多道程序设计
- 实现进程切换
- 支持时间片轮转
- 提高资源利用率
中断的类型¶
1. 硬件中断¶
硬件中断
由外部硬件设备产生的中断,也称为外中断。
类型:
- 可屏蔽中断: 可以被CPU禁止的中断
- I/O中断: 外设完成中断
-
时钟中断: 定时器中断
-
不可屏蔽中断: 不能被CPU禁止的中断
- 电源故障中断
- 总线错误中断
特点:
- 异步产生,与程序执行无关
- 可以被禁止(可屏蔽中断)
- 优先级相对较低
2. 软件中断¶
软件中断
由程序执行中断指令产生的中断,也称为内中断。
类型:
- 系统调用: 用户程序请求操作系统服务
- 陷阱(Trap): 程序主动产生的中断
- 断点设置
- 单步执行
特点:
- 同步产生,与程序执行相关
- 不能被禁止
- 用于实现系统功能
3. 异常¶
异常
由程序运行错误产生的中断。
类型:
- 故障(Fault): 可以修复的错误
- 缺页异常
- 除零异常
-
非法操作码
-
终止(Abort): 不可修复的错误
- 硬件故障
- 系统表错误
特点:
- 同步产生,与程序执行相关
- 不能被禁止
- 需要特殊处理
中断处理过程¶
中断处理的完整流程¶
graph TB
A[CPU执行程序] --> B{中断请求?}
B -->|否| A
B -->|是| C{中断允许?}
C -->|否| A
C -->|是| D[中断响应]
D --> E[保存断点PC]
E --> F[保存程序状态PSW]
F --> G[关中断]
G --> H[识别中断源]
H --> I[获取中断向量]
I --> J[转中断服务程序]
J --> K[执行中断服务程序]
K --> L[恢复PSW]
L --> M[恢复PC]
M --> N[开中断]
N --> A
1. 中断请求¶
中断请求过程
硬件中断请求:
- 外设完成操作后发出中断请求信号
- 中断请求信号送到中断控制器
- 中断控制器向CPU发出中断请求
软件中断请求:
- 程序执行中断指令(INT n)
- CPU识别中断类型号n
- 转入相应的中断处理程序
2. 中断判优¶
当多个中断源同时请求时,需要判断优先级。
判优方法:
- 硬件判优: 由中断控制器硬件实现
- 软件判优: 由软件查询实现
优先级原则:
- 不可屏蔽中断 > 可屏蔽中断
- 硬件故障 > 软件错误 > 外设请求
- 高速设备 > 低速设备
- 实时设备 > 非实时设备
3. 中断响应¶
中断响应条件
CPU响应中断需要满足以下条件:
- CPU处于开中断状态(IF=1)
- 当前指令执行完成
- 没有更高优先级的中断正在处理
响应过程:
sequenceDiagram
participant CPU
participant Stack
participant Memory
participant ISR
Note over CPU,ISR: 中断响应
CPU->>Stack: 保存PC
CPU->>Stack: 保存PSW
CPU->>CPU: 关中断
CPU->>Memory: 获取中断向量
Memory->>CPU: 返回ISR地址
CPU->>ISR: 转入中断服务程序
4. 中断服务¶
中断服务程序的结构:
| Text Only | |
|---|---|
5. 中断返回¶
- 恢复程序状态字(PSW)
- 恢复程序计数器(PC)
- 开中断
- 返回原程序继续执行
中断嵌套¶
中断嵌套
在处理一个中断时,又响应了更高优先级的中断,称为中断嵌套。
实现条件:
- 在中断服务程序中开中断
- 新中断的优先级更高
嵌套过程:
graph LR
A[主程序] -->|中断1| B[中断服务程序1]
B -->|中断2| C[中断服务程序2]
C -->|返回| B
B -->|返回| A
注意事项:
- 嵌套深度有限制
- 需要合理设置优先级
- 避免中断风暴
中断屏蔽¶
中断屏蔽
通过设置中断屏蔽字,可以禁止某些中断。
屏蔽字的作用:
- 禁止低优先级中断
- 保证重要中断的响应
- 实现中断优先级的动态调整
屏蔽字设置:
中断向量¶
中断向量
中断向量是中断服务程序的入口地址。
中断向量表:
| 中断类型号 | 中断向量 | 中断类型 |
|---|---|---|
| 0 | 0000H | 除零异常 |
| 1 | 0004H | 单步中断 |
| 2 | 0008H | 不可屏蔽中断 |
| 3 | 000CH | 断点中断 |
| ... | ... | ... |
| n | n×4 | 用户定义中断 |
中断向量的获取:
- 硬件中断: 由中断控制器提供
- 软件中断: 由中断指令提供
- 异常: 由CPU自动产生
典型中断处理示例¶
1. I/O中断处理¶
I/O中断处理流程
sequenceDiagram
participant Device
participant CPU
participant ISR
participant Buffer
Device->>CPU: I/O完成中断
CPU->>CPU: 保存现场
CPU->>ISR: 转入I/O中断服务程序
ISR->>Device: 读取数据
Device->>Buffer: 数据送缓冲区
ISR->>ISR: 唤醒等待进程
ISR->>CPU: 恢复现场
ISR->>CPU: 中断返回
2. 时钟中断处理¶
功能:
- 维护系统时间
- 实现时间片轮转
- 处理定时任务
处理过程:
- 更新系统时间
- 检查时间片是否用完
- 如果用完,进行进程调度
- 检查定时器队列
- 处理到期的定时任务
3. 缺页异常处理¶
功能:
- 处理虚拟存储器的缺页
- 实现按需调页
处理过程:
- 保存异常信息
- 计算缺页的逻辑地址
- 查找页表,获取页面信息
- 如果页面不在内存:
- 分配物理页框
- 从磁盘读入页面
- 更新页表
- 重新执行引起异常的指令
中断与异常的比较¶
| 特性 | 中断 | 异常 |
|---|---|---|
| 产生方式 | 外部事件 | 内部事件 |
| 产生时机 | 异步 | 同步 |
| 返回位置 | 下条指令 | 当前指令或下条指令 |
| 处理方式 | 转中断服务程序 | 转异常处理程序 |
| 屏蔽性 | 可屏蔽(部分) | 不可屏蔽 |