Appearance
408 > ### 计算机组成原理 > #### CO-05-04 异常与中断
一、定位信息
| 项目 | 内容 |
|---|---|
| 所属章节 | 第5章 中央处理器 |
| 知识单元编号 | CO-05-04 |
| 主题 | 异常与中断 |
| 考纲要求 | 理解异常和中断的概念、分类及处理过程 |
| 历年考查频率 | 中高频(选择题为主) |
| 预计分值 | 2-4分(选择)/ 6-10分(综合) |
二、知识点讲解
1. 基本概念
异常(Exception):也称为内中断或同步中断,是由CPU内部事件引起的中断。异常的发生与当前执行的指令直接相关,在相同的程序状态下必定会重复出现,因此是"同步"的。
中断(Interrupt):也称为外中断或异步中断,是由CPU外部事件引起的中断。中断的发生与当前执行的指令无关,是随机的、不可预测的,因此是"异步"的。
| 对比维度 | 异常(内中断/同步中断) | 中断(外中断/异步中断) |
|---|---|---|
| 来源 | CPU内部(指令执行过程中) | CPU外部(I/O设备、定时器等) |
| 与指令关系 | 与当前指令直接相关 | 与当前指令无关 |
| 发生时机 | 指令执行期间 | 任意时刻 |
| 可重复性 | 相同条件下必定重复 | 随机发生 |
| 典型例子 | 除零错误、缺页、溢出 | 键盘输入、定时器、I/O完成 |
| 检测方式 | 在指令执行过程中检测 | 在指令执行完毕后检查 |
2. 异常的分类
异常按其性质和处理方式可分为以下几类:
(1)故障(Fault)
- 由错误条件引起,但有可能被修复
- CPU保存的返回地址是引起故障的指令的地址(即重新执行该指令)
- 典型例子:缺页异常(Page Fault)、段错误、除零错误(部分实现)
- 处理完异常后,可能重新执行引起故障的指令
(2)自陷(Trap)
- 也称陷入或陷阱,是有意安排的异常
- 由特殊指令(如系统调用指令syscall、断点指令INT 3)主动触发
- CPU保存的返回地址是引起自陷的指令的下一条指令地址
- 处理完后,从下一条指令继续执行
- 典型例子:系统调用、调试断点
(3)终止(Abort)
- 由不可恢复的严重错误引起
- CPU保存的返回地址不确定
- 程序无法继续执行,通常终止进程
- 典型例子:硬件故障、非法指令、存储器校验错误
3. 中断的分类
(1)可屏蔽中断
- 通过中断屏蔽标志位可以暂时禁止响应的中断
- 优先级通常较低
- 典型例子:I/O设备完成数据传输的中断
- CPU可以通过关中断指令(CLI)暂时不响应
(2)不可屏蔽中断(NMI)
- 无法被屏蔽,CPU必须立即响应
- 用于紧急事件处理
- 典型例子:电源掉电、硬件严重故障
4. 中断响应过程
CPU响应中断需要满足两个条件:
- 中断源有中断请求(有中断事件发生)
- CPU允许响应中断(中断允许标志IF=1,即CPU处于开中断状态)
中断响应的完整过程:
第一步:关中断 CPU在响应中断后,首先将中断允许标志IF清零(关中断),防止在中断处理过程中被新的中断打断。这保证了中断现场保存的完整性。
第二步:保存断点 将当前程序计数器PC的值(即被中断指令的地址)和程序状态字PSW压入堆栈保存。这是为了中断处理完毕后能够正确返回原程序继续执行。
第三步:识别中断源 如果有多个中断源同时请求,需要通过中断判优逻辑(硬件排队器或软件查询)确定优先级最高的中断源。
第四步:保护现场 将中断处理程序可能用到的寄存器内容(如通用寄存器、状态寄存器等)压入堆栈保存。
第五步:执行中断服务程序 根据中断向量号找到中断服务程序的入口地址,开始执行中断服务程序。
第六步:恢复现场 中断服务程序执行完毕后,从堆栈中恢复之前保存的寄存器内容。
第七步:开中断并返回 将中断允许标志IF置1(开中断),执行中断返回指令(如IRET),从堆栈中弹出PC和PSW,返回原程序继续执行。
5. 中断判优
当多个中断源同时请求时,需要确定响应优先级。常用方法:
(1)硬件排队器(优先级编码器)
- 速度快,每个中断源有固定的硬件优先级
- 优先级最高的中断源被首先响应
(2)软件查询法
- 按查询顺序确定优先级(先查询的优先级高)
- 灵活但速度慢
(3)中断控制器(如8259A)
- 可编程设置优先级
- 支持中断嵌套(高优先级中断可以打断低优先级中断的处理)
6. 中断向量与中断向量表
中断向量:中断服务程序的入口地址。
中断向量表:所有中断向量组成的表,存放在内存的固定区域。CPU根据中断类型号(向量号)在中断向量表中查找对应的中断服务程序入口地址。
以x86架构为例:
- 中断向量表位于内存地址0x00000-0x003FF
- 每个中断向量占4字节(2字节段地址+2字节偏移地址)
- 共256个中断向量(向量号0-255)
7. 中断嵌套
中断嵌套是指在处理一个中断的过程中,允许更高优先级的中断打断当前中断处理,转去处理更高优先级的中断。
中断嵌套的条件:
- 在保护好当前中断的现场后,需要开中断(设置IF=1)
- 新中断的优先级高于当前中断的优先级
中断嵌套的执行流程: 程序A执行 → 中断1到来 → 保存A现场 → 执行中断1服务程序 → 中断2(更高优先级)到来 → 保存中断1现场 → 执行中断2服务程序 → 恢复中断1现场 → 继续中断1 → 恢复A现场 → 继续程序A
三、记忆辅助
"内同外异":异常是内中断(同步),中断是外中断(异步)。异常与当前指令相关(同步),中断与当前指令无关(异步)。
"故障重执行,自陷下一条,终止不可回":Fault保存引起故障的指令地址(可重执行),Trap保存下条指令地址(从下条继续),Abort无法恢复(终止程序)。
中断响应七步口诀:"关断识保,执恢开"——关中断、保存断点、识别中断源、保护现场、执行中断服务程序、恢复现场、开中断返回。
中断向量表位置记忆:x86中中断向量表在内存最低地址处(0x000-0x3FF),256个入口,每个4字节。记忆:"向量表在最前面,256口4字节。"
四、例题精解
例题1
题目:在中断系统中,CPU响应中断后首先进行的操作是( )。 A. 保护现场 B. 关中断 C. 保存断点 D. 执行中断服务程序
四步解题:
第一步:审题——考查中断响应的第一步操作。
第二步:分析——CPU响应中断后的标准流程是:①关中断 → ②保存断点 → ③识别中断源 → ④保护现场 → ⑤执行中断服务程序 → ⑥恢复现场 → ⑦开中断返回。
第三步:验证——关中断必须在最前面,因为如果不先关中断,在保存断点和现场的过程中可能被新的中断打断,导致现场保存不完整。所以第一步是关中断。
第四步:答案——选 B。
例题2
题目:下列关于异常和中断的叙述中,正确的是( )。 A. 缺页异常属于中断 B. 自陷(Trap)的返回地址是引起自陷的指令地址 C. 中断响应时需要保存断点,断点是指令寄存器IR的内容 D. 可屏蔽中断可以通过设置中断屏蔽字来禁止响应
四步解题:
第一步:审题——考查异常与中断的基本概念。
第二步:分析:
- A:缺页是在指令执行过程中检测到的,与当前指令直接相关,属于异常(内中断),不是外中断。A错误。
- B:自陷是主动触发的,保存的返回地址是引起自陷的指令的下一条指令地址,而非引起自陷的指令本身。B错误。
- C:断点是被中断程序的PC值(下条要执行的指令地址),不是IR的内容。IR存放的是当前指令的内容。C错误。
- D:可屏蔽中断可以通过中断允许标志IF或中断屏蔽字来禁止响应。D正确。
第三步:验证——D的描述完全正确,可屏蔽中断的特征就是可以被屏蔽。
第四步:答案——选 D。
例题3
题目:某系统有4个中断源I1、I2、I3、I4,优先级从高到低为I1>I2>I3>I4。若采用中断屏蔽技术,当处理I2中断时,为了允许I1可以打断I2的处理但不允许I3和I4打断,中断屏蔽字应设置为( )。(设屏蔽字中1表示屏蔽,0表示开放)
四步解题:
第一步:审题——需要设置中断屏蔽字,使得I1可以打断I2(I1不被屏蔽),I3和I4不能打断I2(I3、I4被屏蔽)。
第二步:分析——屏蔽字通常从高优先级到低优先级排列为I1I2I3I4:
- I1:允许响应(开放)→ 0
- I2:自身正在处理 → 1(或0,取决于具体实现,通常自身也屏蔽)
- I3:不允许打断 → 1
- I4:不允许打断 → 1
第三步:计算——屏蔽字 = 0111(I1开放,I2/I3/I4屏蔽)。注意I2本身通常也被屏蔽(防止自己打断自己),所以I2位为1。
第四步:答案——中断屏蔽字设置为 0111。
五、考情分析
| 维度 | 说明 |
|---|---|
| 考查题型 | 选择题为主(概念辨析+中断流程) |
| 考查重点 | 异常与中断的分类区别、中断响应流程、中断屏蔽字设置 |
| 命题趋势 | 近年倾向于将异常/中断与流水线异常处理结合考查 |
| 分值预估 | 选择题2-4分 |
| 复习建议 | 理解异常与中断的本质区别,熟记中断响应流程,掌握中断屏蔽字的计算 |
六、易错点
"断点"保存的是PC值,不是IR值:断点是被中断后需要返回继续执行的地址,即PC的值。IR中存放的是当前指令的内容,不是地址。很多考生会混淆这两个概念。
故障(Fault)和自陷(Trap)的返回地址不同:Fault保存引起故障的指令地址(以便重新执行),Trap保存下一条指令地址(从下条继续)。这是最容易混淆的点。典型例子:缺页是Fault(重新执行该指令),系统调用是Trap(从下条指令继续)。
关中断必须在保存断点之前:如果不先关中断,在保存断点的过程中可能被新中断打断,导致断点保存不完整。所以标准流程是先关中断再保存断点。
可屏蔽中断与不可屏蔽中断的区别:可屏蔽中断可以通过IF标志位控制是否响应;不可屏蔽中断(NMI)不受IF标志影响,CPU必须响应。电源掉电是典型的NMI。
中断判优 ≠ 中断嵌套:中断判优解决的是"同时有多个中断请求时先响应谁"的问题;中断嵌套解决的是"正在处理一个中断时能否被另一个中断打断"的问题。两者相关但不相同。
七、来源标注
| 来源 | 说明 |
|---|---|
| 主要教材 | 唐朔飞《计算机组成原理》第3版,第5章5.5节 |
| 辅助教材 | 袁春风《计算机组成与系统结构》第3版 |
| 考纲依据 | 全国硕士研究生招生考试计算机学科专业基础综合考试大纲(408) |
| 补充参考 | Patterson & Hennessy《计算机组成与设计》第4章 |