目录
- 核心思想
- 一、中断
- 二、异常
- 三、中断与异常的相同点
- 四、中断与异常的关键区别
- 五、总结与重要性
计算机系统中的两个核心概念:异常和中断。
它们都是计算机体系结构中的重要机制,用于处理CPU正常指令流之外的“意外”事件,使得CPU能够高效地响应内部错误和外部请求。两者非常相似,有时会混用,但在严格意义上,它们有明确的区别。
核心思想
CPU通常按顺序一条接一条地执行指令(程序计数器PC顺序递增)。但有时需要打断这个流程,去处理一些更紧急或更重要的事情。处理完后,再回到原来的地方继续执行。为了实现这个功能,就需要中断和异常机制。
一、中断
中断主要来自CPU外部,与当前执行的指令无关,是异步事件。
-
定义:
- 中断是由外部硬件设备(如键盘、鼠标、硬盘、网卡、定时器等)发出的信号,用来通知CPU某个事件已经发生,需要CPU来处理。
- 因为它是由外部硬件触发的,与CPU正在执行的指令没有直接关系,所以它的发生是异步的(无法预知确切时间)。
-
目的:
- 实现CPU与外部设备之间的高效协同(I/O方式之一)。如果没有中断,CPU就需要不断地去查询各个设备的状态(轮询),这会浪费大量计算资源。有了中断,设备准备好后“主动”通知CPU,CPU就可以去处理其他任务,大大提高了效率。
-
分类:
- 可屏蔽中断:可以通过在CPU中设置中断屏蔽位来忽略的中断。例如,网卡、声卡产生的中断。当CPU正在处理非常关键、不允许被打断的任务时,就会屏蔽这些中断。
- 不可屏蔽中断:非常紧急的硬件故障,绝对不能忽略,必须立即处理。例如,电源故障、内存读写错误等。
-
类比:
- 你正在看书(CPU执行程序),突然电话铃响了(外部设备发起中断请求)。你会在书上做个记号(保存当前上下文),然后去接电话(执行中断处理程序)。通完电话后,你回来找到记号的地方继续看书(恢复上下文,继续执行)。
二、异常
异常主要来自CPU内部,由当前正在执行的指令直接导致,是同步事件。
-
定义:
- 异常是CPU在执行指令过程中检测到的特殊或错误情况。例如,除以零、访问非法内存地址、执行了一条特权指令等。
- 因为它是由当前指令的执行直接引发的,所以它的发生是同步的(只要执行这条指令,就一定会发生)。
-
目的:
- 处理程序运行时的错误,或为操作系统提供陷入内核的接口。
-
分类:
- 故障:通常是可以修复的错误。CPU会转到处理程序,修复后重新执行这条出错的指令。例如缺页异常:程序访问的内存地址不在物理内存中,操作系统会从硬盘加载所需页面,然后重新执行那条指令,这次就能成功了。
- 陷阱:有意安排的异常,通常用于实现系统调用。程序主动执行一条特殊指令(如
int 0x80
或syscall
)来触发异常,从而进入操作系统内核,请求内核服务。这是用户程序主动向操作系统请求服务的方式。 - 中止:非常严重的、不可恢复的错误硬件错误。通常无法修复,处理程序只能尽力记录错误信息并终止程序。例如硬件校验错误。
-
类比:
- 你正在看书(CPU执行程序),遇到一个不认识的字(执行指令时发生异常,如除零)。你停下来,去查字典(执行异常处理程序)。查完后,你可能回来继续读这个字(故障,重试指令),或者发现是书印错了,只好跳过这一行(中止,终止程序)。
三、中断与异常的相同点
- 硬件机制:都是通过硬件来检测和发起的。
- 处理流程:处理过程类似。
- 响应:CPU检测到事件。
- 保护现场:暂停当前程序,将其状态(寄存器、程序计数器等)保存到栈中。
- 查找处理程序:根据一个预先设定好的表(中断描述符表IDT或异常向量表),通过一个唯一的编号(向量号)找到对应的处理程序地址。
- 执行处理程序:跳转到该地址执行特定的处理代码(通常是操作系统内核的一部分)。
- 恢复现场:处理完毕后,恢复之前保存的状态,返回原程序继续执行。
四、中断与异常的关键区别
特性 | 中断 | 异常 |
---|---|---|
来源 | 外部于CPU(各种硬件设备) | 内部于CPU(当前执行的指令) |
同步/异步 | 异步:发生时间不确定,与指令流无关 | 同步:由特定指令执行导致,必然发生 |
是否可屏蔽 | 部分可屏蔽(可屏蔽中断) | 不可屏蔽:一旦发生必须处理 |
主要目的 | 响应外部事件,实现设备通信 | 处理错误,实现系统调用 |
五、总结与重要性
中断和异常机制是现代计算机系统的基石,它们使得:
- 高效I/O:CPU不用浪费时间去轮询设备,实现了CPU与外部设备的并行工作。
- 多任务与分时:操作系统依靠时钟中断(一种外部中断)来强制收回CPU使用权,在不同的程序间切换,从而实现“同时”运行多个程序的效果。
- 系统保护:当用户程序试图执行非法操作(如访问内核内存)时,会触发异常,将控制权交还给操作系统,由操作系统来决定如何处理(通常是终止程序),从而保护了系统的稳定和其他程序的安全。
- 用户与内核的桥梁:系统调用通过陷阱异常实现,这是用户程序使用操作系统服务的唯一方式。
简单来说,中断让CPU“眼观六路,耳听八方”,能及时响应外部世界;而异常让CPU“三省吾身”,能及时处理内部错误和请求系统服务。 两者完美结合,共同构建了一个稳定、高效、功能强大的计算环境。