Skip to content

程序查询与中断驱动I/O

考情分析

中断驱动 I/O 是 408 大题的高频考点。中断响应过程(关中断→保存断点→识别中断源→转中断服务程序)几乎是必背流程。程序查询方式的 CPU 时间占用计算也常作为小题出现。

程序查询方式

工作原理

CPU 通过不断读取设备状态端口来判断设备是否就绪,就绪后再进行数据传输。

开始:
  CPU 向设备发出启动命令
循环:
  读取状态端口
  if (设备忙)
    goto 循环       // 忙等待
  else
    传输一个字/字节数据
    if (传输未完成)
      goto 循环
    else
      结束

性能分析

假设 CPU 时钟周期为 Tcpu,每次查询(读状态 + 判断)需要 c 个时钟周期,设备准备一个数据需要 td 时间:

CPU 等待时间tdcTcpu×cTcpu=td

也就是说,在设备准备数据期间,CPU 全部时间都消耗在轮询上,CPU 利用率为:

η=1I/O 查询时间总时间

当外设很慢时,η 接近 0,CPU 几乎完全被浪费。

适用场景

  • I/O 操作很少且简单的嵌入式系统
  • 对实时性要求极高、不能有中断延迟的特殊场合
  • 设备速度与 CPU 速度差异不大时

中断驱动方式

基本思想

CPU 发出 I/O 命令后不再等待,转去执行其他程序。当设备完成操作后,通过中断请求通知 CPU,CPU 暂停当前程序,执行中断服务程序完成数据传输。

中断的分类

类型来源举例
外中断(硬件中断)CPU 外部设备I/O 完成、定时器、键盘
内中断(异常)CPU 内部除零错误、缺页、非法指令

I/O 中断属于外中断。

中断响应过程

当 CPU 检测到中断请求且允许响应时,执行以下步骤(由硬件自动完成):

  1. 关中断:将中断允许标志 IF 置 0,防止响应过程中被其他中断打断
  2. 保存断点:将当前 PC(和 PSW)压入栈,记录返回地址
  3. 识别中断源:确定是哪个设备发出的中断
  4. 转中断服务程序:将中断服务程序的入口地址送入 PC

上述硬件自动完成的步骤统称为中断隐指令——它不是指令系统中的一条真实指令,而是硬件在中断响应时自动执行的一系列操作。

中断服务程序的执行过程(由软件完成):

  1. 保护现场:保存通用寄存器等 CPU 状态
  2. 中断服务:执行实际的 I/O 数据传输
  3. 恢复现场:恢复之前保存的寄存器
  4. 中断返回:执行中断返回指令(如 IRET),恢复 PC 和 PSW

中断源识别

两种方式:

软件查询法:CPU 逐一检查各设备的中断标志位,先查到的先处理。

硬件向量法(中断向量表):每个中断源有唯一编号,对应中断向量表中的一个表项,表项存放中断服务程序的入口地址(即中断向量)。

中断类型号查表中断向量(入口地址)执行中断服务程序

使用中断向量表的方式称为向量中断(响应速度快,硬件自动定位 ISR 入口);使用软件查询的方式称为非向量中断(速度慢,需逐一检查中断标志)。408 中一般考查的是向量中断。

中断优先级

多个设备同时请求中断时,按优先级排队。优先级通常的排列:

机器故障(硬件故障)>自愿中断(访管/系统调用)>程序性异常>外部 I/O 中断

注意:DMA 请求不属于中断优先级体系,它通过总线仲裁机制处理(详见 DMA 章节)。硬件实现上,可通过中断屏蔽字设置每个中断源在被服务时屏蔽哪些中断。

多重中断(中断嵌套)

在处理一个中断的过程中,如果出现更高优先级的中断请求,CPU 可以暂停当前中断服务程序,转去处理更高优先级中断。

实现多重中断的条件:

  1. 中断服务程序中开中断(否则所有新中断都被屏蔽)
  2. 新中断的优先级高于当前正在处理的中断

中断屏蔽字的作用就是控制"哪些中断可以打断当前中断":

屏蔽字中第 i 位为 1中断源 i 被屏蔽

中断屏蔽字详解

中断屏蔽字用于调整中断的处理优先级。每个中断源在被服务时加载自己的屏蔽字,屏蔽字中某位为 1 表示屏蔽对应中断源(不允许打断),为 0 表示允许。

设置原则:

  • 每个中断源至少屏蔽自身(防止同级中断重入)
  • 处理优先级比自己低的中断源全部屏蔽
  • 处理优先级比自己高的中断源允许通过(对应位为 0)

例 4:某机有 A、B、C、D 四个中断源,硬件响应优先级为 A>B>C>D。现要求将实际处理优先级调整为 A>D>C>B

(1)写出每个中断源的中断屏蔽字。

中断源处理优先级需屏蔽屏蔽字(A B C D)
A最高A、B、C、D1 1 1 1
D第二B、C、D0 1 1 1
C第三B、C0 1 1 0
B最低B0 1 0 0

规律:屏蔽字中为 1 的位 = 自身 + 处理优先级比自己低的所有中断源。

(2)若 CPU 执行用户程序时 A、C、D 同时请求;随后在执行 C 的中断服务程序期间 B 请求。分析执行轨迹。

时间 →
用户程序 ──→ A中断服务 ──→ 返回用户程序 ──→ C中断服务 ──→ D中断服务 ──→ 返回C ──→ 返回用户 ──→ B中断服务 ──→ 返回用户

分析过程:

  1. A、C、D 同时请求,按响应优先级 A>C>D,先响应 A
  2. A 的屏蔽字 = 1111,所有中断被屏蔽,A 独占 CPU 直至完成
  3. A 完成后返回用户程序,C 和 D 仍然有效。按响应优先级先响应 C
  4. 进入 C 的服务程序,加载屏蔽字 0110。D 未被屏蔽(D 位 = 0),立即响应 D
  5. D 完成后返回 C,继续执行。此时 B 请求到达,但 C 的屏蔽字中 B 位 = 1,B 被屏蔽
  6. C 完成后返回用户程序,B 不再被屏蔽,CPU 响应 B
  7. B 完成后返回用户程序

交互可视化

加载可视化中...
加载可视化中...

例题

例 1:某 CPU 主频 500 MHz,每次查询 I/O 状态需要 50 个时钟周期。一个外设数据传输速率为 100 KB/s,每次传输 1 B,采用程序查询方式时 CPU 用于 I/O 查询的时间占比是多少?

:程序查询方式是忙等待模型,CPU 发出 I/O 命令后反复轮询状态端口,在设备准备数据期间不执行其他任务。因此 CPU 用于 I/O 查询的时间占比为 100%

补充:若题目问的是"查询指令本身占 CPU 总能力的比例"(即假设 CPU 可以在查询间隙做其他事),则每秒需查询 100×1024=102400 次,每次 50 个时钟周期,开销 =102400×50/(500×106)1.024%。但这不是标准程序查询模型——标准模型下 CPU 全程忙等,占比 100%。

例 2:中断响应过程中,哪些操作由硬件完成?哪些由软件完成?

:硬件完成:关中断、保存断点(PC/PSW 入栈)、识别中断源、送入口地址到 PC。软件完成:保护现场(保存通用寄存器)、中断服务、恢复现场、中断返回。

例 3:设有 A、B、C 三个中断源,优先级 A > B > C。C 正在被服务时 A 和 B 同时请求,CPU 如何响应?

:A 和 B 的优先级都高于 C,可以打断 C。因为 A > B,CPU 先暂停 C → 处理 A。A 完成后执行中断返回,恢复到 C 的断点并重新开中断。此时 B 的请求仍然有效且 B > C,CPU 立即响应 B → 处理 B → B 完成后返回继续 C。最终执行顺序:C(部分)→ A → B → C(完成)

注意:A 处理完返回 C 后,CPU 一旦开中断就会立即检测到 B 的请求并响应,不会真正执行 C 的代码。具体处理顺序也可能因中断屏蔽字的设置而不同。

易混淆知识点

1. 向量中断、中断向量、向量地址有什么区别?

  • 中断向量:中断服务程序的入口地址
  • 向量地址:中断向量在中断向量表中的存储位置(由中断类型号 × 表项长度计算得出)
  • 向量中断:一种中断处理方式,由硬件自动提供中断类型号并查表定位服务程序入口

三者关系:向量中断方式下,CPU 获取中断类型号 → 计算向量地址 → 从向量地址处取出中断向量 → 转入中断服务程序。

2. 响应优先级和处理优先级一样吗?

不一定。响应优先级由硬件排队电路固定,决定多个请求同时到达时谁先被识别。处理优先级由中断屏蔽字动态控制,决定谁能打断谁。二者可以不同(如本文例 4)。

3. 程序中断和子程序调用有什么区别?

子程序调用由 CALL 指令主动发起,时机确定;中断由外部事件随机触发,具有异步性。子程序为主程序服务(主从关系);中断服务程序与主程序无关(平行关系)。子程序调用是纯软件行为,中断需要硬件支持(中断控制器、判优电路等)。

考点清单

  • 程序查询方式 CPU 全程忙等,利用率最低
  • 中断响应四步(硬件):关中断 → 保存断点 → 识别中断源 → 转入口地址
  • 中断隐指令 = 关中断 + 保存断点 + 送入口地址(硬件自动,非真实指令)
  • 向量中断(查表定位 ISR)vs 非向量中断(软件轮询定位 ISR)
  • 中断向量 = 入口地址;向量地址 = 入口地址在向量表中的位置
  • 中断向量表存放的是中断服务程序的入口地址,不是中断服务程序本身
  • 多重中断需要两个条件:开中断 + 新中断优先级更高
  • 中断屏蔽字控制当前中断服务期间可以被哪些中断打断
  • 响应优先级(硬件固定)和处理优先级(屏蔽字调整)可以不同

真题练习

相关真题(10题)

2024Q21选择题2分

中断I/O方式中屏蔽字与中断响应过程辨析

2022Q21选择题2分

中断I/O方式的工作条件与适用场景

2020Q21选择题2分

可屏蔽中断与不可屏蔽中断的响应机制

2019Q21选择题2分

中断方式下CPU用于I/O的时间占比计算

2018Q43综合题8分

中断I/O与DMA方式的CPU开销对比综合题

2016Q44综合题9分

中断I/O方式下串行通信与CPU时间占比综合题

2015Q21选择题2分

中断I/O方式下CPU与I/O端口交换的信息类型

2011Q21选择题2分

中断屏蔽字的设置方法

2010Q21选择题2分

单级中断系统中断服务程序的执行顺序

2009Q43综合题8分

中断方式与DMA方式的CPU开销对比综合题