中断是计算机系统中一种至关重要的硬件机制,它的正式定义是:CPU在执行程序的过程中,由于发生了某种内部或外部事件,暂时中止当前正在执行的程序,转而执行一段预先设定的与该事件对应的处理程序,处理完毕后恢复被中止程序的执行并继续运行的过程。这个定义中的四个关键要素——事件触发、程序中止、转去处理、恢复继续——构成了中断处理的完整生命周期。
在软考体系中,中断是横跨多个科目和级别的核心考点。在信息处理技术员和信息系统管理工程师等中级考试中,中断作为计算机硬件基础知识的组成部分,通常以选择题形式出现。在系统架构设计师等高级考试中,中断可能深入到中断向量表的结构、中断优先级仲裁机制以及中断与实时操作系统调度的协同关系等更深层次的主题。中断之所以如此重要,是因为它是计算机从被动轮询模式转向主动响应模式的技术基石——没有中断机制,CPU只能不断地循环检查每一个外设是否有数据需要处理,这种轮询方式在等待时间长而CPU速度快的场景下造成了算力的巨大浪费。
从中断的触发来源来看,中断可以分为两大类:硬件中断和软件中断。硬件中断由CPU外部的硬件设备产生——键盘被按下一个键、网卡接收到一个数据包、定时器倒计时归零、DMA传送完成——这些外部事件通过中断控制器向CPU发送中断请求信号。软件中断则由CPU内部执行指令时产生的异常事件触发——除数为零、缺页异常、非法指令、断点调试——这些内部事件由CPU自身的异常检测电路捕获。在x86架构中,硬件中断通过INTR和NMI两个引脚接收,软件异常则在指令执行阶段由微码检测并触发。在软考的教材体系中,这两类中断的区分是基础考点——考生需要能够根据具体场景判断某个事件属于硬件中断还是软件异常。
中断处理的完整流程可以分解为七个步骤,每一步都由硬件和操作系统协同完成。理解这个流程是掌握中断全部考点的基础。
第一步是中断请求的发出与传递。外部设备通过中断请求线向中断控制器发送信号。在早期的PC架构中,中断控制器是两片级联的8259A可编程中断控制器芯片,主片和从片通过级联管理共十五个硬件中断源。现代x86系统则使用高级可编程中断控制器取代了传统的8259A,支持更多的中断源、更灵活的中断优先级配置以及多核环境下的中断路由。中断控制器汇集所有中断请求后,按照优先级排序,将最高优先级的中断请求发送给CPU。
第二步是中断响应。CPU在每条指令执行完毕后的微操作周期中检查是否有中断请求到达。如果有且CPU的中断允许标志为置位状态,则进入中断响应周期——CPU向中断控制器发送中断响应信号,中断控制器通过数据总线向CPU发送该中断源对应的中断向量号。CPU将当前程序的关键上下文——包括程序计数器、程序状态字和可能的部分通用寄存器——压入系统栈中保存。这个保存上下文的过程在x86架构中由硬件自动完成,在ARM架构中则需要软件显式保存。
第三步是中断向量的查找。CPU用中断控制器提供的中断向量号作为索引,在中断向量表中查找该中断对应的处理程序的入口地址。中断向量表是操作系统在系统启动时初始化的一张表格,位于内存中的固定位置——实模式下为物理地址零开始的一千零二十四字节区域,保护模式下通过中断描述符表寄存器指向任意位置。每个表项包含一个中断门描述符,其中记录了该中断处理程序的段选择子和偏移地址。
第四步是执行中断服务程序。CPU根据向量表中的入口地址跳转到中断服务程序开始执行。中断服务程序的第一件事是保存额外的CPU寄存器状态——那些硬件没有自动保存的寄存器需要由软件手动保存。然后是实际的中断处理逻辑——对于键盘中断,读取键盘控制器的数据寄存器获取按键码,将其放入键盘缓冲区;对于网卡中断,读取网卡的接收描述符环获取新到达的数据包,将其交给网络协议栈。处理完成后,中断服务程序向中断控制器发送EOI命令表示该中断已处理完毕,然后恢复之前保存的寄存器状态,执行中断返回指令,CPU自动从系统栈中弹出之前硬件保存的上下文,恢复到中断前的程序执行点。
从中断的可屏蔽性角度,中断可以分为可屏蔽中断和非屏蔽中断两大类。可屏蔽中断是指CPU可以通过清除中断允许标志来暂时忽略的中断请求——绝大多数外设中断属于此类。非屏蔽中断则是CPU无法屏蔽的中断,通常用于报告致命硬件故障——如内存校验错误或电源掉电告警。在软考中,CPU响应中断的条件有两个:有中断请求到达,且CPU的中断允许标志为置位状态。如果中断允许标志被清除,即使中断控制器的中断请求信号持续有效,CPU也不会响应。当CPU响应中断进入中断处理流程后,硬件会自动清除中断允许标志以防止中断嵌套——除非中断服务程序显式地重新置位中断允许标志。
从中断的嵌套处理角度,现代实时操作系统通常支持中断优先级和中断嵌套——一个低优先级的中断正在处理时,如果来了一个高优先级的中断,CPU可以暂停当前低优先级中断的处理,先响应高优先级中断,处理完毕后再继续低优先级中断的处理。中断嵌套的层数由硬件的栈深度和中断优先级的级数共同决定。不支持中断嵌套的简单系统中,CPU在处理一个中断期间会屏蔽所有其他中断请求,直到当前中断处理完毕并执行中断返回指令。
此外,软考中还涉及一个与中断密切相关的概念——DMA与中断的协同工作模式。在磁盘读取操作中,CPU向磁盘控制器发出读命令后,磁盘控制器开始将数据从盘片读入自己的内部缓冲区。当数据准备就绪后,磁盘控制器通过DMA直接将数据从内部缓冲区传输到主存中指定位置,这个传输过程不需要CPU参与,CPU可以继续执行其他程序。当DMA传输完成后,磁盘控制器通过中断通知CPU数据已经就绪。这种DMA加中断的协同模式将CPU从低速外设的数据搬运中解放出来,是计算机输入输出子系统性能提升的关键技术。
第一个陷阱是混淆中断响应和异常响应的触发时机。中断是异步事件——它的发生时机与当前正在执行的指令无关,任何时候都可能到达。异常是同步事件——它由当前正在执行的指令直接触发(如除数为零异常),因此异常的发生时机与特定指令的边界精确对应。软考题中常见的干扰选项是将除数为零描述为中断而非异常——这是错误的,除数为缺属于内部异常而非外部中断。
第二个陷阱是混淆中断允许标志的作用范围。中断允许标志只影响可屏蔽中断的响应,对非屏蔽中断和软件异常无效。即使CPU清除了中断允许标志,非屏蔽中断和内部异常仍然会被立即响应。考生在判断CPU在关中断状态下是否响应某个事件时,需要先确认该事件属于可屏蔽中断、非屏蔽中断还是内部异常。
第三个陷阱涉及中断向量表的寻址。实模式下中断向量表的每个表项占四个字节——两个字节的段地址和两个字节的偏移地址。保护模式下中断描述符表的每个表项占八个字节。软考选择题中可能出现要求计算某个中断号的向量在向量表中的偏移地址的题目——计算方法是中断号乘以表项大小。
2023年上半年信息系统管理工程师真题第2题直接考察了中断的定义:在CPU执行程序的过程中由于发生了某事件而需要CPU临时中止正在执行的程序转去处理该事件,处理完之后再回到被中止的程序继续执行,这个过程称为中断处理。这道题考察的是对中断过程四个关键阶段——中止、转去处理、处理完毕、返回继续——
本篇完!