什么是系统中断?深入解析计算机的紧急通知机制
当 CPU 正在执行程序时,键盘被按下、鼠标移动或网卡收到数据包,CPU 是如何即时感知的?如果 CPU 需要不断轮询询问每个设备是否有事,大量时间将浪费在等待和检查上。为了解决这一效率问题,计算机引入了**中断(Interrupt)**机制。中断允许 CPU 暂停当前任务,优先处理更紧急或需要响应的事件,处理完毕后再恢复原状。
`` 是摘要与正文的分隔标记,请保留。中断的工作原理
中断的核心逻辑可以概括为:暂停 -> 保存 -> 处理 -> 恢复。
以网卡接收数据为例,当网卡收到一个数据包时,它会向 CPU 发送一个中断信号,告知“数据已到,请处理”。CPU 收到信号后,并不会直接丢弃当前正在运行的程序,而是执行以下步骤:
- 保存现场:记录当前执行到的指令位置以及寄存器中的关键状态。
- 跳转处理:CPU 跳转到对应的中断处理程序(Interrupt Handler),处理网卡数据。
- 恢复现场:处理完成后,CPU 读取之前保存的状态,恢复上下文。
- 继续执行:回到被中断前的程序,继续执行后续指令。

这个过程通常极快,用户几乎无法察觉。如果没有中断机制,操作系统与硬件设备之间的协作将变得极其低效。
中断的分类:硬件中断与软件中断
中断大致可以分为两类:硬件中断和软件中断。
1. 硬件中断
硬件中断来自外部设备。当设备需要 CPU 处理时,会通过中断控制器通知 CPU。常见的触发场景包括:
- 输入设备:键盘按键、鼠标移动。
- 网络与存储:网卡收到数据包、磁盘读写完成。
- 定时器:定时器时间到达。
2. 软件中断
软件中断是由程序主动触发的。例如,应用程序需要调用操作系统功能时,由于不能直接操作硬件,必须通过系统调用进入内核。许多系统调用的底层机制与软中断、陷入(Trap)或异常有关。

容易混淆的概念:中断 vs 异常
在系统编程中,“中断”和“异常”都是打断 CPU 正常执行流程的事件,但来源不同:
- 中断(Interrupt):通常来自外部设备主动寻找 CPU。例如外设通知 CPU 数据就绪。
- 异常(Exception):通常来自 CPU 执行指令时自身发现的问题。例如除以零、访问非法内存、缺页异常等。
- 软件触发:程序主动请求操作系统服务,可理解为软件触发的受控切换。

中断向量表:如何找到正确的处理程序?
不同设备触发的中断需要交给不同的程序处理:键盘有键盘的处理逻辑,网卡有网卡的逻辑,定时器有定时器的逻辑。
操作系统维护着一张中断向量表(Interrupt Vector Table)。当中断发生时,CPU 根据中断号查表,确定应该跳转到哪个地址执行对应的处理程序。
中断与多任务调度
中断在现代操作系统中还有一个至关重要的用途:实现任务调度。
当你同时打开浏览器、音乐播放器和编辑器时,它们看起来像是在同时运行。但实际上,单个 CPU 核心在某一瞬间只能执行一个线程。操作系统如何让它们“轮流”执行?答案就是定时器中断。
- 定时器每隔一小段时间触发一次中断。
- CPU 暂停当前任务,进入操作系统内核。
- 内核检查当前任务是否运行时间过长,是否需要切换到另一个任务。
- 如果需要切换,内核保存当前任务状态,恢复另一个任务的状态。
因此,你所看到的多任务并发体验,背后离不开中断机制的支持。

中断开销与性能优化
虽然中断至关重要,但中断并非越多越好。
如果中断过于频繁,CPU 会不停被打断,花费大量时间在“保存现场”和“恢复现场”上,真正执行业务代码的时间反而减少。这种现象称为中断开销。
为了优化性能,高性能系统常采用以下策略:
- 中断合并:批量处理中断请求。
- 软中断与 NAPI:例如在网卡流量极大时,不是每收到一个包就打断 CPU 一次,而是积累一批数据后一次性处理,从而减少上下文切换的成本。
总结
中断是计算机系统中的紧急通知机制。它让 CPU 能够在正常执行程序的同时,及时响应外部设备、系统事件和异常情况。通过高效的中断处理,操作系统得以实现硬件协作与多任务调度,构成了现代计算体验的基石。