扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

CPU中断机制详解

2025/11/27
1967
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

欢迎各位朋友关注“郝旭帅电子设计团队”公众号,本公众号会定时更新相关技术类资料、软件等等,感兴趣的朋友可以浏览一下本公众号的其他“模块”,希望各位朋友都能在本公众号获得一些自己想要的“东西”。

本篇主要是CPU中断机制详解

1. 什么是中断?

简单来说,中断是一个信号,它通知 CPU 暂停当前正在执行的程序,转而去执行另一段特定的程序(称为中断处理程序),执行完毕后再返回到原程序被中断的地方继续执行。

你可以把它想象成生活中的一个场景:

你正在专心看书(CPU执行主程序),这时门铃响了(中断信号)。你会在书上做个记号(保存当前状态),然后去开门(执行中断处理程序)。处理完开门的事情后,你回来找到刚才的记号(恢复状态),继续看书(继续执行主程序)。

如果没有中断,CPU 就只能一直轮询(Polling),即不断地检查每个设备的状态:“键盘有输入吗?没有。鼠标动了吗?没有。网络有数据吗?没有……” 这种方式效率极低,浪费了大量 CPU 资源。

2. 中断的主要作用

提高 CPU 效率:让 CPU 不必等待慢速的 I/O 设备(如键盘、硬盘),可以先去执行其他任务,等设备准备好后再来通知 CPU。

实现实时处理:对于紧急事件(如电源掉电、硬件故障),CPU 能够立即响应,而不是等轮到它的时候才处理。

实现多任务与分时系统:操作系统依靠时钟中断来强制切换正在执行的程序,从而实现多个程序“同时”运行的错觉。

3. 中断的类型

中断主要分为两大类:

3.1 外部中断(硬件中断) :由计算机硬件设备发起的中断。

可屏蔽中断(INTR):可以通过程序指令(如 CLI、STI)来屏蔽或忽略的中断。大部分常见的 I/O 设备中断都属于此类,如键盘、鼠标、网卡的中断。当系统在处理更紧急的任务时,可以暂时屏蔽它们。

不可屏蔽中断(NMI):绝对不能被屏蔽的中断,用于处理必须立即响应的紧急情况,如内存校验错误、电源掉电等。CPU 必须无条件立即处理。

3.2 内部中断(软件中断/异常) :由 CPU 在执行指令时检测到异常情况或由特定指令触发的中断。

陷阱(Trap):有意安排的、用于实现系统功能调用的中断。例如,在 x86 架构中,程序执行 INT 0x80(Linux)或 INT 0x2E(Windows)指令来请求操作系统提供服务(如打开文件、分配内存)。这是用户程序主动与操作系统内核通信的主要方式。

故障(Fault):一种可纠正的异常。当指令执行出错时(如访问了不在物理内存中的“页”,即缺页异常),CPU 会触发故障。在中断处理程序中纠正错误后,CPU 会重新执行刚才出错的指令。

中止(Abort):一种严重的、不可恢复的异常。通常由硬件错误或严重的系统数据损坏(如内存校验错误)引起。处理程序通常无法修复,只能终止出错的程序甚至整个系统。

4. 中断处理的全过程

这是一个精心设计的硬件和软件协同工作的流程:

中断请求:中断源(硬件设备或 CPU 内部)产生一个中断信号。

中断响应:  CPU 在执行完当前指令后,会检查是否有中断请求。  如果中断未被屏蔽且优先级足够高,CPU 则响应中断。

保护现场:  CPU 自动将当前程序的关键状态保存到栈(Stack)中。这通常包括:  程序计数器(PC)/指令指针(IP):即下一条要执行的指令地址。  标志寄存器(Flags):包含各种状态位(如进位、零标志等)。  有时还会自动保存其他寄存器的值,或者由后续的中断处理程序来保存。

识别中断源与获取入口地址:  CPU 需要知道该执行哪一个中断处理程序。这是通过中断向量表(IVT) 或中断描述符表(IDT) 来实现的。  每个中断都有一个唯一的编号,称为中断向量号。  中断向量表是一个在内存中预先设置好的数组,其中每一项(一个向量)存储着对应中断处理程序的入口地址。  CPU 根据中断向量号,去表中查找对应的入口地址。

执行中断处理程序:  CPU 跳转到中断处理程序的地址开始执行。  这是一个由操作系统或驱动程序编写好的软件程序,负责处理中断事件。例如,键盘中断处理程序会从键盘控制器读取按下的键值,并将其放入输入缓冲区。

恢复现场与返回:  中断处理程序执行完毕后,会执行一条特殊的中断返回指令(如 x86 的 IRET)。  这条指令会从栈中恢复之前保存的现场信息(如标志寄存器和指令指针)。  CPU 接着从被中断的主程序断点处继续执行,就像什么都没发生过一样。

5. 中断的优先级与嵌套

优先级:系统中同时有多个中断请求时,CPU 需要根据事件的紧急程度来决定先处理哪个。不可屏蔽中断(NMI)的优先级最高,其次是可屏蔽中断,内部异常的优先级也各不相同。

中断嵌套:当一个中断处理程序正在执行时,如果来了一个优先级更高的新中断,CPU 可以暂停当前的中断处理程序,转而去处理更高优先级的中断,处理完后再返回。这就像你在开门(处理中断A)时,手机又响了(更高优先级的中断B),你可能先接起电话说“稍等”,然后继续开门,开完门再继续讲电话。

总结

中断机制是计算机系统的“神经系统”,它使得 CPU 能够:

从被动轮询变为主动响应,极大提升了效率。

处理异步事件,使多任务操作系统成为可能。

实现用户程序与操作系统内核的安全隔离与通信。

它是现代计算机体系结构中不可或缺、至关重要的一环。

 

本篇内容中有部分资源来源于网络,如有侵权,请联系作者。

相关推荐