Skip to content

异常和中断机制

2026 大纲 五(五)异常和中断机制:基本概念、分类、检测与响应——只到硬件负责的那一半

这一节的分歧都来自一个问题:这件事能不能等

异常和中断的所有区别——什么时候检测、能不能屏蔽、处理完回哪里——都从同一个问题分叉出来:这件事是不是当前这条指令自己捅出来的

🔴 来源不同,检测时机就不同。异常由当前指令自身引发、不处理就没法继续,所以必须在指令执行过程中检测,可能打断指令执行到一半;中断与当前指令无关、可以等,所以在指令执行结束后检测,因此总落在指令边界上。

同一个问题也决定了处理完之后回哪里。异常按"触发它的那条指令算不算已经完成"分成三类:

🔴 故障(fault)是"条件不具备"——缺页把页调进来之后原指令就能成功,所以重新执行原指令自陷(trap)是"主动请求"——内核已经帮它做完了,所以接着执行下一条终止(abort)是"无法收拾"——机器状态已不可信,重来或继续都没有意义。

这条判据还能直接回答一个高频判断:

🔴 Cache 缺失不需要异常处理,缺页需要。 判据是能不能由硬件独自解决:Cache 缺失由硬件自动调入 Cache 行、对软件完全透明;缺页要操作系统去调页面、改页表,所以必须以异常的形式陷入内核(属故障,处理完重新执行原指令)。

本篇后面几节就是把这条主线铺开:响应条件、中断隐指令、向量表、屏蔽字、流水线里的精确中断。

交互可视化

加载可视化中...

一、分类

中断是 CPU 对内外部事件的响应机制:暂停当前程序转去执行中断服务程序(ISR),处理完毕后返回。广义的"中断"按事件来源分两大类:

类型又称来源举例
内中断(异常)ExceptionCPU 内部除零、溢出、缺页、系统调用
外中断(中断)InterruptCPU 外部I/O 完成、时钟、电源异常

异常按处理完之后返回哪里分三类:

类型触发时机处理后返回举例
故障(Fault)指令执行过程中检测到重新执行触发指令缺页、非法操作码
自陷(Trap)指令执行(主动触发)执行下一条指令系统调用、断点指令
终止(Abort)严重错误不返回,终止进程硬件故障、双重错误

外中断按能否屏蔽分两类:

类型特点举例
可屏蔽中断(INTR)可通过中断允许标志 IF 屏蔽I/O 设备完成
不可屏蔽中断(NMI)不能被屏蔽,优先级最高电源故障、硬件错误

二、检测与响应

响应一个可屏蔽中断必须同时满足三个条件,缺一不可:

#条件(卡的是哪一环)由什么表示
1中断源确实提出了请求(有没有事)该中断源的中断请求触发器为 1
2CPU 处于开中断状态(准不准打断)允许中断触发器 EINT(x86 中的 IF)=1
3一条指令执行完毕(打断安不安全)每条指令执行阶段结束前 CPU 发出中断查询信号

第 3 条是中断只能在指令边界响应的来源:指令执行到一半时中间结果散落在 MDR、暂存器里,无法准确保存现场。

这三条也正好定出异常与 NMI 的位置:

🔴 可屏蔽中断三条全要满足;异常绕开第 2、3 条(不受开 / 关中断控制,也不能等到指令结束);NMI 只绕开第 2 条,仍然在指令边界响应。归纳成两句话:"能不能等"决定检测时机,"要不要给程序留否决权"决定能不能屏蔽。

🔴 由此推出一条常被问反的:关中断之后 NMI 照样能进来。 关中断(IF =0)只屏蔽可屏蔽中断。NMI 报告的是掉电这类不处理就来不及的事件,给程序留出屏蔽它的能力反而危险。

响应动作由中断隐指令完成,它做三件事:

#动作为什么必须在这里做
1关中断防止保存断点的过程本身被新中断打断
2保存断点(PC、PSW)断点不保存就回不去;只能由硬件做,软件还没拿到控制权
3形成中断服务程序入口地址并送 PC交出控制权

"通常由硬件"和"必须由硬件"是两个不同的问题:

工作谁做
保存断点只能硬件——软件此刻还没接管
关中断硬件(隐指令),但 ISR 里也能用关中断指令,不是只能硬件
中断判优硬件软件:硬件排队器/菊花链可判优,软件查询法逐个轮询中断源同样可判优
保存通用寄存器、开中断软件(ISR 保护现场、用开中断指令)

这张表里有两条最容易答错:

🔴 中断隐指令不包含"保存通用寄存器"。 它是纯硬件行为,指令系统里并没有这么一条指令;保存通用寄存器是 ISR 里的"保护现场",由软件做。另外关中断必须排在第一位——保存断点期间若又响应中断,新断点会覆盖或错位,原程序再也回不去了。

🔴 "必须由硬件完成"的只有"保存断点"这一件。中断判优不属于"必须由硬件"——非向量中断就是用软件轮询各中断源来确定中断源与优先次序的。只要存在软件方案,就不能叫"必须由硬件"。

图 5.30 异常和中断的处理过程
图 5.30 异常和中断的处理过程
(袁春风《计算机组成与系统结构》第 3 版,见文末教材出处)

图给的是控制流怎么走:用户进程执行到第 i 条指令时发生事件 → 控制权转到操作系统的处理程序 → 处理完后按故障/自陷/终止三选一地回来。教材在此定了一条分界:

检测和响应硬件具体的处理过程软件

三、中断服务程序:软件阶段

步骤单级中断多级中断(允许嵌套)
1保护现场保护现场
2开中断(这样更高优先级中断才能打进来)
3中断事件处理中断事件处理
4关中断(准备恢复现场,不能被打断)
5恢复现场恢复现场
6开中断开中断
7中断返回(IRET)中断返回(IRET)

🔴 单级中断只在最后开一次中断。 它全程不允许被打断,所以中间那两次开 / 关中断都不需要:保护现场 → 事件处理 → 恢复现场 → 开中断(还原中断允许状态)→ 中断返回。⚠️ "保存断点"与"关中断"不在这个序列里——它们属于中断隐指令,ISR 开始之前硬件已经做完了。这一条被问到时,答案里多写"保存断点"就错了。

IRET 从栈中恢复 PC 和 PSW(含 IF 位)。ISR 运行在内核态,它要用的一批指令普通用户程序不许执行,即特权指令

指令是否特权理由
I/O 指令(IN / OUT)直接操作设备端口,乱用会破坏其他进程的设备状态
开中断 / 关中断指令用户程序若能关中断,就能永久霸占 CPU
中断返回指令(IRET)它会恢复 PSW,包括特权级字段——若用户可用,就能把自己提到内核态
停机、修改页表基址、加载 PSW同理
系统调用指令(陷入指令)它恰恰是给用户程序准备的入口

最后一行的逻辑是反的:正因为要保护内核,才必须留一扇由硬件把守的门,而这扇门本身对所有人开放。

在 ISR 执行中若发生更高处理优先级的中断,CPU 可暂停当前 ISR 转去处理它,即中断嵌套

主程序 → 中断 A(低)→ 中断 B(高)→ 返回 A 继续 → 返回主程序

四、中断向量与入口地址的形成

中断向量是 ISR 的入口地址;中断向量表中断类型号为索引存放各中断向量,通常放在内存低地址区:

中断类型号查中断向量表ISR 入口地址送 PC
方式做法速度
向量中断由中断类型号直接查表
非向量中断由软件轮询各设备确定中断源,再转相应处理程序

🔴 中断向量 向量地址,两者差一层间接。中断向量是 ISR 的入口地址,也就是表项的内容向量地址是存放它的那个表项的地址。CPU 拿向量地址去访存,取出来的内容才是入口地址。这两个词只差一个字,考的就是这层间接。

🔴 另有一处方向容易搞反:EOI(中断结束命令)的方向是 CPU → 中断控制器,由 ISR 告诉控制器"这个中断处理完了,可以放行同级或更低级的中断"。不是外设 → CPU——外设只负责发中断请求,处理有没有结束只有 CPU 自己知道

五、两种优先级与中断屏蔽字

由什么决定能否改变含义
响应优先级硬件排队器不可改变同时来了先响应谁
处理优先级中断屏蔽字可由软件调整谁能打断谁

两者可以不一致:一个中断被优先响应,不代表处理过程中不会被别人打断。屏蔽字中每个中断源占一位,1 屏蔽0 允许

🔴 屏蔽字只与处理优先级有关,响应优先级完全不参与构造。 规则是:在第 i 级的中断服务程序里,屏蔽掉"处理优先级不高于自己"的所有中断,包括它自己——不屏蔽自己的话,同级中断会不断打断自己、无限嵌套下去。

⚠️ 位序要单独摆一遍。 M4M3M2M1M0 最左边是 M4,这个顺序与优先级顺序无关;算出"要屏蔽哪几级"之后,必须按下标把 1 填回对应的位上,不能按优先级顺序连着写。

顺带说清总体次序与嵌套条件。优先级的总体次序是内部异常 > NMI > 可屏蔽中断——内部异常最高,是因为它直接由当前指令引发,不处理指令就走不下去(分层地说,是在外中断内部才有 NMI 高于可屏蔽中断)。中断嵌套的成立条件有两条:当前 ISR 中已经开中断(IF =1),且新中断的处理优先级更高;每次嵌套都要额外的栈空间保存断点,所以嵌套深度受栈大小限制

屏蔽字的三步构造法与一道完整演算(想核对"排序—定位—按位序回填"每一步时展开)Mj={1若 Lj 的处理优先级Li(含 j=i0若 Lj 的处理优先级高于 Li
  1. 处理优先级顺序从高到低排成一行
  2. 找到本级在这行里的位置
  3. 本级及其右边(处理优先级更低的)全部置 1,左边全部置 0;再按 M4M3M2M1M0位序填进去

演算。 五级中断 L4L0,屏蔽字为 M4M3M2M1M0Mi=1 表示屏蔽 Li)。响应优先级为 L0>L1>L2>L3>L4,要求处理优先级为 L4>L0>L2>L1>L3。求 L1 的中断服务程序中的屏蔽字。

第 1 步,处理优先级从高到低排开:L4, L0, L2, L1, L3;第 2 步,L1 排在第 4 位;第 3 步,屏蔽 L1 自己和右边的 L3,其余(L4L0L2)置 0:

M4M3M2M1M0
对应L4L3L2L1L0
取值01010
屏蔽字=01010

全程没有用到响应优先级——它只决定"同时来了先响应谁"。第 3 步的回填是最容易错的一步:算出"要屏蔽 L1L3"之后,必须按下标把 1 放到 M1M3 的位置上,而不是按优先级顺序连着写。

六、流水线中的精确中断

流水线里同一时刻有多条指令处于不同阶段,可能同时产生异常,且发生顺序未必等于程序顺序。

🔴 精确中断必须等到 WB 段才处理。 只有到了 WB 段,才能确定这条指令前面的所有指令都已完成(流水线按序推进);若在 EX 段一发现溢出就立刻处理,它前面可能还有指令停在 MEM 段没做完。这与超标量的"无序执行、按序提交"是同一个思路。

精确中断的两条要求、实现方式与各段可能产生的异常(想弄清"标记而不立即处理"具体怎么做时展开)

精确中断要求两条:① 异常指令之前的所有指令都已完成(结果已写回);② 异常指令及其之后的指令都没有修改机器状态。

实现方式是异常发生后只标记不立即处理,等它到达 WB 段再统一处理——之前的指令正常完成,之后的全部冲刷。

各段可能产生的异常:IF 取指地址未对齐、取指缺页;ID 非法操作码;EX 算术溢出、地址计算错误;MEM 数据地址未对齐、数据缺页;WB 一般不产生异常。

中断方式的 CPU 占比公式(属大纲六(三)I/O 方式,想顺带核对 u 取什么值时展开)

响应与处理一次中断要花掉若干个时钟周期,设备越快、中断越频繁,CPU 被占用的比例越高:

CPU 占比=R/u×mf×100%

其中 R 为设备数据传输率,u每次中断搬运的字节数(由数据缓冲寄存器的宽度决定,不是默认 1 字节),m 为每次中断的开销周期数,f 为主频。完整推导、算例以及"设备快到什么程度中断方式就会丢数据"的判据,见文末《程序查询方式与程序中断方式》。

考点速记

  1. 异常在指令执行过程中检测、中断在指令结束后检测;三种异常的返回方式取决于触发它的指令算不算已完成(故障重执行、自陷执行下一条、终止不返回)。响应可屏蔽中断要同时满足有请求、开中断、一条指令执行完毕异常绕开后两条、NMI 绕开"开中断"这条
  2. 中断隐指令由硬件自动做三件事:关中断 → 保存断点 → 形成入口地址送 PC不含保存通用寄存器;两阶段划分是检测与响应由硬件、具体处理由软件,而只能由硬件完成的只有"保存断点"——中断判优软硬件都能做。
  3. 响应优先级由硬件排队器定且不可改,处理优先级由屏蔽字定且可调;屏蔽字屏蔽"处理优先级不高于本级"的所有中断(含自己),再按 M4M0 位序回填。精确中断等到 WB 段才处理,因为只有此时才能确定前面的指令全部完成。

这一节在真题里被考过的形式(下方「真题练习」逐题对应):

  • 问哪些工作"必须由硬件完成":只有保存断点。关中断硬件做但 ISR 也能做,中断判优软硬件都能做(非向量中断就是软件轮询),保存通用寄存器是软件的事。
  • 问中断隐指令包含哪些动作关中断、保存断点、形成入口地址送 PC 三件。⚠️ 把"保存通用寄存器"算进去就错了,那是 ISR 的保护现场。
  • 问单级中断的服务程序执行顺序:保护现场 → 事件处理 → 恢复现场 → 开中断 → 中断返回。⚠️ 保存断点与关中断不在这个序列里,它们在 ISR 开始前就由硬件做完了。
  • 给响应优先级与处理优先级,求某级中断服务程序中的屏蔽字:三步——按处理优先级从高到低排开、找到本级位置、本级及右边全置 1,最后按下标回填到 M4M0。响应优先级不参与。
  • 挑关于异常与中断的错误叙述:常设的错点有"关中断后 NMI 也不能响应"(错,NMI 不可屏蔽)、"中断向量就是向量地址"(错,差一层间接)、"EOI 由外设发给 CPU"(错,方向是 CPU → 中断控制器)、"缺页处理完执行下一条指令"(错,故障要重执行原指令)。
  • 问哪个事件不需要异常处理 / 不在 MMU 地址转换过程中检测Cache 缺失——它由硬件自动解决、对软件透明。缺页、越权、TLB 缺失都要。
  • 问数据通路是否包含异常检测电路包含。溢出、地址越界这些信号就是从运算与访存路径上引出来的。

易错:把"保存通用寄存器"算进中断隐指令。

易错:答"中断判优必须由硬件"。软件轮询同样能判优。

易错:单级中断的服务程序里多写了"保存断点"或"关中断"。

易错:构造屏蔽字时用了响应优先级,或算完不按下标回填。

易错:认为关中断能挡住 NMI。IF 只管可屏蔽中断。

教材出处
  • 异常和中断的处理过程(图 5.30)、"检测与响应由硬件、具体处理由软件"的两阶段划分:袁春风《计算机组成与系统结构》第 3 版 §5.4.1 CPU 对异常和中断的处理,印刷页 p158

相关知识

程序查询方式与程序中断方式I/O 方式对比指令执行过程流水线性能分析与多发射技术

真题练习