异常与中断

CPU 正常执行指令时,可能因为某个事件临时改变控制流,转去执行操作系统内核中的处理程序。这个机制常被统称为“中断机制”,分为以下两种:

  • 异常:由 CPU 内部原因产生,通常和当前正在执行的指令有关。
  • 中断:由 CPU 外部设备产生,通常和当前正在执行的指令无关。

异常

异常来自 CPU 内部,可以分为三类。

类型 英文 含义 处理后返回位置
故障 fault 指令执行过程中发现问题,但通常可以修复 返回引发故障的指令,重新执行;若不可恢复故障则退出当前进程(如除0故障)
自陷 trap 指令正常执行完毕触发,主动转入OS内核,常用于系统调用 返回下一条指令
终止 abort 严重硬件错误,通常无法恢复 程序被迫终止

故障的典型例子是缺页故障:进程访问某个逻辑地址,地址变换时发现目标页不在主存,于是转入缺页处理程序;页面调入后,原访存指令重新执行。

自陷通常是程序主动进入内核的方式。例如用户程序执行系统调用指令,请求操作系统完成文件读写、进程创建等特权操作。

终止表示严重错误。例如无法恢复的机器检查错误,操作系统通常会终止相关进程,甚至导致系统停止。

中断

中断来自 CPU 外部,通常由 I/O 设备、定时器、外部控制信号等硬件因素触发。它和当前指令本身无关,只是 CPU 在合适的时机响应外部事件。

类型 信号线 含义 例子
可屏蔽中断 INTR 可以被 CPU 的中断屏蔽位临时禁止响应 普通 I/O 完成中断、定时器中断
不可屏蔽中断 NMI 不能被普通屏蔽机制禁止,优先级高 断电

CPU 在一条指令执行结束后检查是否有外部中断请求。如果允许响应,就保存现场、转入对应的中断处理程序;处理完成后,再恢复现场继续执行原程序。

对比

对比项 异常 中断
来源 CPU 内部 CPU 外部
与当前指令关系 通常有关 无关
发生位置 指令执行过程中或指令执行结束处 通常在指令之间被检测和响应
常见类型 故障、自陷、终止 可屏蔽中断、不可屏蔽中断
例子 缺页故障、系统调用、总线错误 I/O 完成、时钟中断、断电信号