5.3 异常和中断机制
异常与中断的基本概念与区别;故障、自陷、终止三类异常和可屏蔽、不可屏蔽两类中断;异常和中断的检测时机与响应过程(关中断、保存断点、识别并转入处理程序)。
基本概念
程序执行过程中,CPU 有时会遇到一些特殊情况,使正在执行的程序被”中断”:CPU 中止当前程序的执行,转去执行相应的处理程序;处理完后,一般再返回断点继续执行原来的程序。
- 异常(exception,也称内中断):由 CPU 内部产生的意外事件,与当前执行的指令有关,如整数除以 0、缺页、非法操作码、系统调用。
- 中断(interrupt,也称外中断):来自 CPU 外部、与 CPU 执行的指令无关的事件,如 I/O 设备完成输入/输出、定时器到时、网络数据到达。
异常和中断的处理都需要操作系统的支持:发生异常或中断时,CPU 从用户态切换到内核态,执行操作系统内核中的处理程序。
分类
异常的三种类型
| 类型 | 含义 | 例子 | 处理后返回到 |
|---|---|---|---|
| 故障(fault) | 在引起故障的指令启动后、执行结束前检测到的异常事件 | 缺页、缺段;非法操作码;整数除以 0;存储保护错 | 可恢复的(如缺页):发生故障的那条指令,重新执行;不可恢复的(如除 0):终止进程 |
| 自陷(trap,陷阱) | 预先安排的一种”异常”事件:在程序中用陷阱指令主动引发 | 系统调用(int 0x80、syscall);断点设置(int 3);单步跟踪(TF = 1) | 陷阱指令的下一条指令 |
| 终止(abort) | 执行指令过程中出现了使计算机无法继续执行的硬件故障 | 控制器出错、存储器校验错、总线错误 | 不返回,通常要重启系统 |
故障和自陷属于程序性异常(软件中断),终止是硬件故障引起的异常。
中断的两种类型
- 可屏蔽中断:通过可屏蔽中断请求线 INTR 向 CPU 发出的中断请求。CPU 可以通过设置中断屏蔽字(或关中断)来屏蔽它们,被屏蔽的中断请求暂不被送到 CPU。
- 不可屏蔽中断:通过专门的不可屏蔽中断请求线 NMI 发出,通常是非常紧急的硬件故障,如电源掉电。这类中断请求不受中断允许触发器和屏蔽字的控制。
交互练习给事件分类:异常还是中断?
1 / 12 答对 0
执行 load 指令时访问的页面不在主存中(缺页)
异常(内中断)
中断(外中断)
故障返回原指令重新执行,自陷返回下一条指令,终止不再返回;中断在当前指令执行完后才响应,返回下一条指令。
异常和中断的检测与响应
检测
- 异常由 CPU 在执行指令的过程中检测:例如取指令时检测到页面不在主存(缺页)、译码时检测到非法操作码、执行除法时检测到除数为 0。一旦检测到就立即响应,不必等到指令执行结束。
- 中断是 CPU 在每条指令执行结束时(中断周期)检查中断请求线来发现的;若有中断请求且 CPU 允许中断,就进入中断响应。
响应过程
CPU 检测到异常或中断后,由硬件自动完成以下三件事,这一过程称为中断响应,对应的操作称为中断隐指令:
- 关中断:在保存断点和程序状态期间禁止响应新的中断,否则断点会被破坏。通常把 PSW 中的中断允许标志 IF 清 0。
- 保存断点和程序状态:把返回地址(断点)和程序状态字 PSW 保存到栈或特定寄存器中,以便处理完后正确返回。异常的断点与类型有关(故障是当前指令,自陷是下一条指令),中断的断点是下一条指令。
- 识别异常和中断,转到相应的处理程序:
软件识别:设置一个异常状态寄存器(如 MIPS 的 Cause 寄存器)记录原因,操作系统用统一的处理程序按优先级查询该寄存器;
硬件识别(向量中断):每个异常和中断都有一个中断类型号,硬件根据类型号到中断向量表中找到对应的中断向量(处理程序的入口地址),送入 PC。
处理程序执行完毕后,用中断返回指令(如 x86 的 iret)恢复断点和 PSW,回到被中断的程序。保存和恢复通用寄存器等”现场”的工作则由处理程序中的指令(软件)完成。中断的优先级、屏蔽、多重中断等内容在第 7 章「中断方式」中详细讨论。
即时练习
即时练习5 题
点击选项即可作答
- 1内部异常(内中断)可分为故障(fault)、陷阱(trap)和终止(abort)三类。下列有关内部异常的叙述中,错误的是( )。
- 2异常是指令执行过程中在处理器内部发生的特殊事件,中断是来自处理器外部的请求事件。下列关于中断或异常情况的叙述中,错误的是( )。
- 3下列关于「自陷」(trap,也称陷阱)的叙述中,错误的是( )。
- 4下列事件中,属于外部中断事件的是( )。
Ⅰ. 访存时缺页 Ⅱ. 定时器到时 Ⅲ. 网络数据包到达 - 5响应外部中断的过程中,中断隐指令完成的操作,除保护断点外,还包括( )。
Ⅰ. 关中断 Ⅱ. 保存通用寄存器的内容 Ⅲ. 形成并转向中断服务程序入口地址
学完了吗?
标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。