目录
- 一、中断的分类
- 1. 可屏蔽中断
- 2. 不可屏蔽中断
- 二、异常的分类
- 1. 故障
- 2. 陷阱
- 3. 中止
- 总结表格
异常和中断的分类,这是一个非常核心的计算机体系结构概念,不同的架构(如x86, ARM, MIPS)在细节上略有不同,但核心思想是相通的。
下图从来源和目的的角度,清晰地展示了异常与中断的整体分类框架:
flowchart TD
A[CPU外部事件] --> B[<b>中断 Interrupt</b><br>异步]
A --> C[<b>异常 Exception</b><br>同步]
B --> D[<b>可屏蔽中断</b><br>e.g. 来自网卡、声卡、硬盘等]
B --> E[<b>不可屏蔽中断</b><br>e.g. 硬件故障、电源掉电]
C --> F[<b>故障 Fault</b><br>可修复,重试指令<br>e.g. 缺页异常]
C --> G[<b>陷阱 Trap</b><br>有意为之,继续下条指令<br>e.g. 系统调用、调试断点]
C --> H[<b>中止 Abort</b><br>严重错误,终止程序<br>e.g. 硬件错误、非法指令]
一、中断的分类
中断主要根据其紧急程度和是否可被忽略来分类。
1. 可屏蔽中断
- 特点:CPU可以通过设置程序状态字中的中断屏蔽位来禁止响应这类中断。当屏蔽位被设置时,即使中断发生,CPU也会忽略它。
- 目的:允许操作系统在执行一些关键、不允许被打断的代码段(如内核调度、修改重要数据结构)时,暂时关闭中断。
- 来源:绝大多数由外部设备产生的中断都属于此类。
- 示例:
- 硬件定时器中断:用于操作系统实现时间片轮转调度。
- I/O设备中断:如键盘按键、鼠标移动、网卡收到数据包、硬盘数据读写完成。
- 示例:
2. 不可屏蔽中断
- 特点:无法通过中断屏蔽位来禁止。一旦发生,CPU必须立即处理。它拥有最高的优先级。
- 目的:用于处理非常紧急、关乎系统存亡的硬件故障,必须立即响应。
- 来源:通常是严重的硬件错误。
- 示例:
- 内存奇偶校验错误:内存数据在读写过程中发生错误。
- 总线错误:在数据传输过程中发生严重错误。
- 电源掉电警告:电源即将耗尽,通知CPU尽快保存关键数据。
- 示例:
二、异常的分类
异常主要根据其产生原因、处理方式以及返回行为来分类。在x86架构中,异常通常分为以下三类:
1. 故障
- 特点:
- 在执行指令的过程中检测到错误。
- 异常处理程序会尝试修复这个错误。
- 修复成功后,返回并重新执行那条引发异常的指令。
- 类比:你读一句话时发现有个词不认识(故障),去查字典(处理程序),回来后重新读这个词(重试指令)。
- 示例:
- 缺页异常:这是最经典的故障。当程序访问一个不在物理内存中的虚拟地址时,CPU会触发缺页故障。操作系统的处理程序会从硬盘上加载所需的数据到内存,然后返回并重新执行那条访问内存的指令,这次就能成功执行了。
- 段错误的一部分情况:例如访问了一个合法但尚未加载的地址。
2. 陷阱
- 特点:
- 在执行指令后立即报告异常。
- 通常是有意触发的,用于调试或请求系统服务。
- 异常处理程序执行完毕后,返回并执行引发陷阱指令的【下一条】指令。
- 类比:你主动设置一个闹钟(陷阱),闹钟响后(触发异常),你去处理一件事(处理程序),处理完后回来继续做下一件事(执行下一条指令)。
- 示例:
- 系统调用:这是陷阱最重要的应用。用户程序通过执行一条特殊指令(如x86的
int 0x80
或更现代的syscall/sysenter
指令)来主动陷入内核,请求操作系统提供服务(如打开文件、创建进程)。处理完后,返回用户空间继续执行系统调用之后的指令。 - 调试断点:程序员在代码中设置断点,调试器实际上会将断点处的指令替换为一条陷阱指令(如x86的
int 3
)。当CPU执行到这里时,触发陷阱,控制权交给调试器。
- 系统调用:这是陷阱最重要的应用。用户程序通过执行一条特殊指令(如x86的
3. 中止
- 特点:
- 无法确定引发异常的指令的精确位置。
- 错误非常严重,通常是硬件级别的致命错误。
- 异常处理程序无法修复错误,通常只能收集尽可能多的错误信息,然后终止出错的程序甚至整个系统。
- 类比:书中的某一页被撕掉了,而且你不知道具体是哪一行(无法定位),你完全无法继续阅读,只能合上书(终止程序)。
- 示例:
- 硬件错误:如内存校验错误、处理器温度过高等。
- 非法指令:CPU遇到了一条它无法识别的指令编码。
- 严重的系统一致性错误。
总结表格
类型 | 特点 | 返回行为 | 示例 |
---|---|---|---|
可屏蔽中断 | 来自外设,可被CPU屏蔽 | 返回被中断指令 | 键盘、鼠标、定时器中断 |
不可屏蔽中断 | 来自硬件故障,不可屏蔽 | 返回被中断指令(如果可能) | 内存错误、掉电 |
故障 | 指令执行中出错,可修复 | 返回并重试原指令 | 缺页异常、段错误(部分) |
陷阱 | 指令执行后主动触发 | 返回执行下一条指令 | 系统调用、调试断点 |
中止 | 严重硬件错误,不可恢复 | 无法返回,终止程序/系统 | 硬件故障、非法指令 |
理解这些分类有助于深入理解操作系统如何管理硬件、处理错误以及为用户程序提供服务。