Exception And Interrupt Brief
异常与中断
CPU 正常执行指令时,可能因为某个事件临时改变控制流,转去执行操作系统内核中的处理程序。这个机制常被统称为“中断机制”,分为以下两种:
- 异常:由 CPU 内部原因产生,通常和当前正在执行的指令有关。
- 中断:由 CPU 外部设备产生,通常和当前正在执行的指令无关。
异常
异常来自 CPU 内部,可以分为三类。
| 类型 | 英文 | 含义 | 处理后返回位置 |
|---|---|---|---|
| 故障 | fault | 指令执行过程中发现问题,但通常可以修复 | 返回引发故障的指令,重新执行;若不可恢复故障则退出当前进程(如除0故障) |
| 自陷 | trap | 指令正常执行完毕触发,主动转入OS内核,常用于系统调用 | 返回下一条指令 |
| 终止 | abort | 严重硬件错误,通常无法恢复 | 程序被迫终止 |
故障的典型例子是缺页故障:进程访问某个逻辑地址,地址变换时发现目标页不在主存,于是转入缺页处理程序;页面调入后,原访存指令重新执行。
自陷通常是程序主动进入内核的方式。例如用户程序执行系统调用指令,请求操作系统完成文件读写、进程创建等特权操作。
终止表示严重错误。例如无法恢复的机器检查错误,操作系统通常会终止相关进程,甚至导致系统停止。
中断
中断来自 CPU 外部,通常由 I/O 设备、定时器、外部控制信号等硬件因素触发。它和当前指令本身无关,只是 CPU 在合适的时机响应外部事件。
| 类型 | 信号线 | 含义 | 例子 |
|---|---|---|---|
| 可屏蔽中断 | INTR | 可以被 CPU 的中断屏蔽位临时禁止响应 | 普通 I/O 完成中断、定时器中断 |
| 不可屏蔽中断 | NMI | 不能被普通屏蔽机制禁止,优先级高 | 断电 |
CPU 在一条指令执行结束后检查是否有外部中断请求。如果允许响应,就保存现场、转入对应的中断处理程序;处理完成后,再恢复现场继续执行原程序。
对比
| 对比项 | 异常 | 中断 |
|---|---|---|
| 来源 | CPU 内部 | CPU 外部 |
| 与当前指令关系 | 通常有关 | 无关 |
| 发生位置 | 指令执行过程中或指令执行结束处 | 通常在指令之间被检测和响应 |
| 常见类型 | 故障、自陷、终止 | 可屏蔽中断、不可屏蔽中断 |
| 例子 | 缺页故障、系统调用、总线错误 | I/O 完成、时钟中断、断电信号 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elian's blog page!