计算机组成原理 · 2027 考研计算机 408

第 7 章 输入输出系统

目标院校:四川大学 / 电子科技大学 | 建议用时:概念 3 小时 + 例题练习 4 小时

本章地位:I/O 方式是组成原理与操作系统的交汇处,也是组成原理主观题的最后一块高地——「主机太快、外设太慢」的矛盾催生了程序查询 → 程序中断 → DMA 三种方式的演进,408 真题沿着这条主线反复出题:屏蔽字设计与中断嵌套次序分析出过大题,DMA 与中断的对比、向量地址辨析、隐指令三件事是选择题常客,CPU 用于 I/O 的时间占比计算(2010 年真题)是必会送分计算。本章按「接口 → 三种方式 → 总对比」推进,所有计算均代入具体数值逐步核对。

考点常考题型热度对应小节
I/O 接口功能与端口编址选择题★★★★7.1
程序查询 CPU 效率计算选择 / 计算★★★7.2
中断判优、响应条件、隐指令、向量地址选择题★★★★ 高频7.3
多重中断与屏蔽字矩阵综合大题 / 选择★★★★★ 必考7.3
DMA 三种传送方式、三阶段、与中断对比选择 / 计算★★★★★ 必考7.4
三种方式总对比选择题★★★★7.5

7.1 I/O 系统与 I/O 接口

7.1.1 I/O 系统的组成

定义I/O 系统 = I/O 硬件 + I/O 软件,其任务是完成主机(CPU + 主存)与外部设备之间的信息交换。
  1. I/O 硬件:外部设备本身(机械 / 电气部分)、设备控制器 / I/O 接口(设备与主机间的「翻译官 + 中转站」)、I/O 总线及相关控制逻辑;
  2. I/O 软件:设备驱动程序、用户 I/O 程序以及操作系统中的 I/O 管理模块(操作系统科目详述)。
CPU 对设备的控制最终都体现为执行 I/O 指令。I/O 指令属特权指令(用户态不可执行),其典型格式为:操作码 + 命令码 + 设备地址(端口地址)——操作码指明「这是 I/O 类指令」,命令码指明「对该设备干什么(启动 / 测试 / 读 / 写)」,设备地址指明「对哪个设备 / 哪个端口干」。
一句话记忆I/O 指令的四类常用操作:控制(启动 / 停止设备)、测试(查询状态)、输入、输出。无论哪种 I/O 控制方式,主机与设备交换的信息都只有三类:数据、状态、控制信息——它们分别走接口中的数据口、状态口、控制口。

7.1.2 I/O 接口的功能与基本结构

接口的功能接口(interface)位于主机与设备之间,主要功能:
  1. 地址译码与设备选择:对地址总线上的端口地址译码,选中本设备(及本端口);
  2. 数据缓冲:用数据缓冲寄存器 DBR 暂存数据,匹配 CPU 与设备之间的速度差;
  3. 信号格式转换:串—并转换、电平转换、模拟 / 数字转换等,适配设备侧的电气与数据格式;
  4. 传送状态与控制信息:反映设备「忙 / 就绪 / 错误」等状态,接收 CPU 的命令;
  5. 中断请求逻辑(具备中断能力的接口):设备就绪时向 CPU 发中断请求。
数据总线 地址总线 控制总线 I/O 接口(设备控制器) 数据缓冲寄存器DBR(数据口) 状态 / 控制寄存器B、D、MASK、命令(状态口 / 控制口) 控制逻辑命令译码·时序·中断请求 地址译码与设备选择电路 I/O 设备(机械 + 电气) 数据 状态 / 控制 端口 = 接口中可被 CPU 编址访问的寄存器(数据口、状态口、控制口);接口 = 端口 + 控制逻辑
图 7-1 I/O 接口的基本结构:三大总线进入接口,地址译码选中端口,数据在 DBR 缓冲,状态 / 控制信息由状态口与控制口传递
基本结构接口的核心是几个可编址的寄存器(端口):
  1. 数据缓冲寄存器 DBR(数据口):暂存主机与设备交换的数据,实现速度匹配——主机与设备交换的数据必须经过它中转;
  2. 状态 / 控制寄存器(状态口 / 控制口,有些机器两者合一):状态寄存器记录设备情况,典型位有完成位 D(数据就绪)、忙位 B(设备正在工作)、屏蔽位 MASK;控制寄存器接收 CPU 写入的命令码(启动、读 / 写等);
  3. 地址译码与设备选择电路:决定「这次访问是不是我、是我的哪个端口」。
易错(接口 ≠ 端口)① 端口是接口中能被 CPU 编址访问的寄存器,一个接口通常含数据、状态、控制等多个端口;接口 = 端口 + 控制逻辑;
② DBR 的作用是数据缓冲 / 速度匹配,「串并转换」是部分接口(如串行口)的附加功能,不是所有 DBR 的本职;
③ 地址译码电路选中的是端口,不只是设备——同一设备的不同端口各有地址。

7.1.3 I/O 端口编址方式

两种编址CPU 如何给端口分配地址?分两大流派:
  1. 统一编址(存储器映射 I/O,Memory-Mapped I/O):I/O 端口与主存单元共用同一个地址空间,从主存地址中划出一块给端口。访问端口用普通访存指令(LOAD / STORE)即可,不需要专门的 I/O 指令;靠地址范围区分访主存还是访端口。
  2. 独立编址(单独编址,I/O-Mapped I/O):端口地址空间与主存地址空间相互独立(两套地址可以重号)。必须设专用 I/O 指令(IN、OUT),并靠控制总线上的区分信号(如 IORQ / MREQ)说明本周期访问的是端口还是主存。
对比项统一编址(存储器映射)独立编址
地址空间与主存共用一个空间,占用主存编址空间单独的端口空间,不占主存空间,两空间地址可重号
访问指令用访存指令(LOAD / STORE)即可,指令系统中无需专设 I/O 指令必须有专用 IN / OUT 指令
区分依据靠地址译码(地址落在端口区即访问端口)靠控制线(IORQ / MREQ)区分访存还是访端口
优点指令丰富、寻址方式多、端口操作灵活(可对端口数据直接运算)主存空间不受损失;端口地址位数少,译码电路简单、速度快
缺点占用主存空间;地址译码变复杂,执行速度略慢指令功能单一、编程不够灵活;控制信号与指令系统更复杂
例 1 高频考点 端口编址方式辨析

下列关于 I/O 端口编址的叙述中,错误的是( )
A. 统一编址方式下,可用访存指令访问 I/O 端口 B. 独立编址方式下,I/O 端口地址与主存单元地址可以相同 C. 独立编址方式需要设置专用的 I/O 指令和控制信号 D. 统一编址方式下,I/O 端口不占用主存的编址空间

查看解答

D。逐项分析:

A 对:统一编址正是「端口当主存单元用」,LOAD / STORE 一律通吃;

B 对:独立编址是两个互不相干的空间,端口 100 号与主存 100 号完全可以并存,靠 IORQ / MREQ 控制线区分——这是独立编址最常考的隐含特征;

C 对:专用 IN / OUT 指令与 IORQ 控制线是独立编址的标配;

D 错:统一编址从主存地址空间里划出一块给端口,必然占用主存编址空间——这正是它的主要缺点。

易错① 「独立编址下端口地址与主存地址可以相同」——对!两个空间互不相干;
② 判断题目用哪种编址,抓两个关键词:出现 IN / OUT 专用指令、IORQ 控制线 → 独立编址;出现「用访存指令 / LOAD / STORE 访问端口」「占用存储空间」→ 统一编址;
③ 两种编址下 CPU 访问的都是端口(接口中的寄存器),不是直接访问设备内部的机械部分。
练习 1

判断下列说法的正误:(1) 接口中的端口本身也含有控制逻辑,端口与接口是同一个概念;(2) 数据缓冲寄存器 DBR 的主要作用是解决 CPU 与外设的速度匹配问题;(3) 某机器用指令 STORE R1, 2000 把 R1 内容写入端口地址 2000 的寄存器,该机最可能采用独立编址。

查看答案

(1) 错:端口是接口中可编址的寄存器,接口 = 端口 + 控制逻辑,范围更大。

(2) 对:DBR 在主机与设备之间起「蓄水池」作用,用缓冲吸收速度差;串并转换等只是部分接口的附加功能。

(3) 错:用访存指令 STORE 就能写端口,说明端口与主存单元在同一地址空间、同一套指令——这是统一编址的标志;独立编址必须用 IN / OUT 类专用指令。

7.2 程序查询方式

7.2.1 工作流程:查询状态位的循环

思想CPU 主动、反复地读设备的状态口,检查其中的就绪 / 完成标志位(如 D 位):设备未就绪就「原地踏步」继续查询,查询到就绪才通过数据口传送一个字。整个传送过程完全由 CPU 执行程序完成,接口只需提供数据口和状态口,不需要任何中断 / DMA 机构——接口硬件最简单。
程序查询方式输入一批数据的主循环(伪码)
向控制口写入启动命令;          ← 启动设备
主存指针 P ← 缓冲区首址;计数器 C ← 传送字数 n;
loop:
    读状态口,取出完成位 D;
    若 D = 0 则转 loop;          ← 原地踏步:CPU 空等,直到设备就绪
    从数据口读一个字 → 存入 (P);  ← 就绪后经 DBR 传给 CPU,再存主存
    P + 1;C − 1;
    若 C ≠ 0 则转 loop;
继续执行后续程序
两段完全串行一次传送中,设备准备数据阶段 CPU 踏步等待(设备忙、CPU 也被占着),传送阶段设备又闲下来等 CPU——CPU 与 I/O 设备完全串行工作,这是程序查询方式效率低下的根源。此外,就绪时刻不可预知,CPU 不能「查一下就去干别的」——只要转去做其他工作,就可能错过就绪窗口、丢失数据。
适用场景查询方式适合:CPU 任务单一、不忙(如嵌入式监控、系统初始化阶段),或设备速度与 CPU 匹配、查询开销可忽略的场合。优点是接口最简、控制程序直观;缺点是 CPU 利用率最低、实时性差。

7.2.2 CPU 效率分析与计算

计算模型设设备速率为 \(v\) 字 / 秒(相邻两个字就绪的间隔 \(\Delta t = 1/v\)),每轮查询耗时 \(t_{\text{查}}\)(含读状态口 + 判断转移)。由于就绪时刻未知,CPU 必须在整个 \(\Delta t\) 内连续轮询,故 CPU 用于该设备 I/O 的时间占比为 \[ \eta = \frac{\text{查询时间}}{\text{总时间}} \approx 100\% \] ——真正搬运数据的只是发现就绪后的那几条指令,占比微乎其微。真题常进一步问「\(\Delta t\) 内最多能查多少轮」「真正有效传送时间占比」,务必分清查询轮数与有效传送时间。
例 2 真题风格 · 计算 程序查询方式的 CPU 时间占比

某机 CPU 主频 1 GHz(时钟周期 1 ns),采用程序查询方式从输入设备读数据。设备速度 100 字 / 秒(每 10 ms 就绪一个字),每轮查询(读状态口 + 判断转移)需 100 个时钟周期。为保证不丢失数据,求:(1) 相邻两个字的就绪间隔内,CPU 最多执行多少轮查询?(2) CPU 用于该设备输入的时间占 CPU 总时间的百分比;(3) 其中真正用于搬运数据的时间占比。

查看解答

① 相邻就绪间隔:

\[ \Delta t=\frac{1}{100}\ \text{s}=10\ \text{ms}=10^{7}\ \text{ns} \]

② 每轮查询耗时 \(100\times1\ \text{ns}=100\ \text{ns}\),故最多查询轮数:

\[ \frac{10^{7}}{100}=10^{5}=100000\ \text{轮}\quad(\checkmark:\ 10\ \text{ms}/100\ \text{ns}=10^{5}) \]

其中仅最后一轮发现 D = 1,其余 99999 轮全部空转。

③ 就绪时刻不可预知,CPU 必须自上一字取走后连续轮询到下一字就绪,10 ms 全部花在查询上:

\[ \eta=\frac{10\ \text{ms}}{10\ \text{ms}}=100\% \]

真正搬运数据(读数据口、存主存等)约需 100 ns(按百条指令量级估计),占比仅:

\[ \frac{100\ \text{ns}}{10^{7}\ \text{ns}}=10^{-5}=0.001\%\quad(\checkmark) \]

结论:查询方式下 CPU 与设备完全串行,CPU 利用率极低;设备速率越高(\(\Delta t\) 越短),这种浪费也不会缓解——占用比例始终是 100%。这正是催生中断方式的原因。

易错① 查询期间 CPU 不能转去做其他工作——就绪时刻未知,离开就可能丢数据;
② 状态口与数据口是两个不同的端口,先查状态、后传数据,别混为一谈;
③ 程序查询方式不需要中断机构,「接口最简单」是它的唯一亮点;判断题说「查询方式需要 DMA 控制器 / 中断排队器」一律错。
练习 2

判断下列说法的正误:(1) 程序查询方式下,设备准备数据期间 CPU 可以转去处理其他任务;(2) 程序查询方式的接口只需数据口和状态口,是三种方式中接口最简单的;(3) 程序查询方式下主机与设备串行工作,但若设备速度足够慢,CPU 的时间开销比例可以降得很低。

查看答案

(1) 错:就绪时刻不可预知,CPU 必须原地踏步连续查询,一旦离开就可能错过数据。

(2) 对:查询方式不需中断机构、不需 DMA 控制器,数据口 + 状态口即可工作。

(3) 错:恰恰相反——设备越慢,\(\Delta t\) 越长,CPU 踏步等待的绝对时间越长;由于必须全程轮询,时间占比始终约为 100%,与设备快慢无关(见例 2 第 ② 问)。

7.3 程序中断方式 本章最重

7.3.1 中断的基本概念

定义CPU 在执行程序过程中,出现某些随机事件(中断源)时,暂停现行程序,转去执行处理该事件的中断服务程序,处理完后自动返回断点继续执行原程序——这一过程称为中断。完成中断处理的软件和硬件总称中断系统。与查询方式相比,CPU 不再空等:设备准备数据期间 CPU 并行执行其他程序,就绪时设备「主动报告」(发中断请求),实现 CPU 与设备部分并行。
中断分类(与 OS 科目衔接)按中断源在 CPU 内部还是外部:
  1. 内中断(异常):与当前指令有关、来自 CPU 内部——除零、溢出、缺页、自陷(trap,如系统调用指令)、故障(fault)、终止(abort),一般不可被屏蔽;
  2. 外中断(硬件中断):与现行程序无关的外部事件——外设 I/O 请求、时钟、掉电;又分可屏蔽中断 INTR(受中断允许位和屏蔽字控制)与不可屏蔽中断 NMI(掉电等紧急事件,不受开关中断限制)。
本章讨论的外设 I/O 中断属可屏蔽的外中断。

7.3.2 中断请求与中断判优

中断请求的形成每个中断源配一个中断请求触发器 INTR和一个屏蔽触发器 MASK。设备工作完成(完成标志 D = 1)且未被屏蔽(MASK = 0)时,请求触发器置位、向 CPU 发出请求: \[ \text{INTR}=\text{D}\wedge\overline{\text{MASK}} \] MASK = 1 表示该源被封锁——即使设备已完成,请求也发不到 CPU 的排队器。
中断判优多个源同时请求时,必须先响应谁?——由优先级决定。实现方法两种:
  1. 硬件排队器(链式排队器 / 独立请求并行排队):接线固定,响应优先级不可改变;速度快,408 默认采用;
  2. 软件轮询:CPU 依次查询各源状态,查询次序即优先级,可由程序改变;无需排队硬件但响应慢。
优先级安排的常识:硬件故障(掉电)最高 > 实时时钟 > 高速设备 > 低速设备;同为 I/O 时,输入高于输出(输入数据不及时取走会丢失)。
易错(两大优先级,先埋个伏笔)① 响应优先级:多个请求同时到达时先响应谁,由硬件排队器决定,不可变;
② 处理优先级:服务程序执行中谁能打断谁,由屏蔽字决定,可以改变(见 7.3.6);
③ 排队器只管「同时到达先理谁」,不管嵌套打断——两件事用的机制不同,大题的坑全在这里。

7.3.3 中断响应:条件、时机与隐指令

响应条件与时机(三者缺一不可)CPU 响应(可屏蔽)中断必须同时满足:
  1. 有中断请求:至少一个源 INTR 有效且未被屏蔽,并经排队器胜出;
  2. CPU 开中断:中断允许触发器 EINT = 1(关中断期间请求被挂起、不丢失);
  3. 一条指令执行完毕:CPU 只在每条指令周期结束时采样中断请求线——指令执行中途不响应 I/O 中断。
中断隐指令(纯硬件完成)CPU 响应中断后、进入服务程序之前,由硬件自动完成的操作称为中断隐指令。它不是指令系统中的真实指令(无操作码、程序员无法书写),共做三件事:
  1. 关中断(EINT ← 0):保证接下来的保存断点等操作不被新中断打断;
  2. 保存断点:把 PC(和 PSW)压入堆栈或存入指定单元,以便处理完返回;
  3. 引出中断服务程序的入口地址:硬件向量法(向量地址 → 取中断向量 → 送 PC)或软件查询法。
注意区分:保存断点由隐指令(硬件)完成;保护现场(通用寄存器、屏蔽字等)由服务程序(软件)完成——这是选择题最爱的分界线。
中断响应时间从 CPU 采样到(或中断源发出)中断请求,到开始执行中断服务程序的第一条指令为止所经历的时间。主要构成:等待当前指令执行完的时间(最长约一条指令的执行时间)+ 排队判优时间 + 隐指令(关中断、保存断点、取向量地址)时间。
注意与中断处理时间区分:后者是整个服务程序的执行时间。响应时间在「关中断」或执行长指令期间会被拉长。
易错① 「CPU 可在一条指令执行的中间响应中断」——错,I/O 中断只在指令周期末响应;
② 隐指令三件事里没有「保护现场」——保护现场是服务程序开头用软件做的;
③ 关中断由硬件自动完成(隐指令),不是程序员关的;服务程序返回前的开中断才是软件行为;
④ 不可屏蔽中断 NMI 不受条件 ② 限制(无需开中断即可响应)。
练习 3 易错

判断下列说法的正误:(1) 保存断点和保护现场都由中断隐指令完成;(2) CPU 在任何时刻都可以响应可屏蔽中断;(3) 中断隐指令做的三件事是关中断、保存断点、引出服务程序入口。

查看答案

(1) 错:保存断点(PC、PSW)由隐指令硬件完成;保护现场(通用寄存器、屏蔽字等)由中断服务程序软件完成——「断点 vs 现场」一字之差,归属两分。

(2) 错:必须同时满足「有未屏蔽请求 + 开中断 + 一条指令执行完毕」三个条件,缺一不可。

(3) 对:这正是隐指令的标准三件事,全部由硬件自动完成。

7.3.4 向量中断与两组地址辨析

三个名词
  1. 向量中断:一种找服务程序的方式——由硬件直接产生向量地址,再按向量地址取出服务程序入口,从而快速转入服务程序(与「软件查询法」相对);
  2. 中断向量:中断服务程序的入口地址(严格说还含程序状态字,常简称入口地址);
  3. 向量地址:存放中断向量的存储单元的地址(中断向量表中的表项地址),由排队器选中中断源后经编码器产生。
三者串成一条链:排队器选出最高优先源 → 硬件产生该源的向量地址 → 按向量地址访存取出中断向量(入口地址)→ 送入 PC,这段「找入口」的动作属于隐指令的第三件事。
一句话记忆向量地址是「门牌号」,中断向量是「门牌号房间里住的入口地址」——访问两次:先按向量地址访问向量表,取出入口地址,再跳过去执行。
例 3 高频考点 向量地址辨析

采用向量中断的计算机中,「向量地址」指的是( )
A. 中断服务程序的入口地址 B. 中断服务程序入口地址所在的存储单元的地址 C. 中断源设备的端口地址 D. 中断服务程序中断点的地址

查看解答

B。逐项分析:

A 是中断向量,不是向量地址——这是本题的题眼,两个名词一字之差;

B 对:向量地址指向中断向量表(跳转表)中的一个表项,该表项里存放着入口地址;

C 错:设备端口地址用于访问接口寄存器,与找服务程序入口无关;

D 错:断点地址是被打断程序的 PC,由隐指令保存,不由向量地址指示。

套路总结:中断向量 = 入口地址;向量地址 = 入口地址的地址;向量中断 = 用硬件产生向量地址找入口的这种方式。

7.3.5 单重与多重中断的服务流程

单重中断系统只允许执行服务程序期间不再响应任何新的中断请求(响应时隐指令已关中断,服务全程保持关中断):流程为响应(隐指令)→ 保护现场 → 设备处理 → 恢复现场 → 开中断 → 中断返回。结构简单,但更紧急的事件也只能排队等候。
多重中断(中断嵌套)服务程序在「保护现场 + 设置屏蔽字」之后开中断,允许处理优先级更高的请求打断自己;「恢复现场」之前必须先关中断,恢复完再开中断、执行中断返回。CPU 响应新中断的条件与 7.3.3 相同:有未屏蔽请求 + 开中断 + 一条指令执行完。断点与现场靠堆栈逐层保存,最大嵌套深度不超过中断源级数。
CPU 执行现行程序 指令周期末采样:有未屏蔽请求且开中断,才响应 中断响应 · 中断隐指令(硬件自动) 关中断 / 保存断点 PC、PSW / 按向量地址取入口→PC 保护现场(软件)通用寄存器、PSW 入栈;设置本源屏蔽字 开中断(单重中断无此步,全程保持关中断) 设备处理段:可被更高处理优先级中断嵌套打断 关中断保证恢复现场不被打断 恢复现场屏蔽字、寄存器、PSW 开中断 → 中断返回 硬件完成 服务程序(软件) 返回断点继续执行
图 7-2 程序中断处理的完整流程:隐指令(红框,硬件)负责关中断、保存断点、找入口;服务程序(软件)在保护现场并设置屏蔽字之后才开中断,允许更高优先级嵌套
时间 主程序 主程序(断点 k+1 之后继续) ① 服务程序 (先响应、后被嵌套) ② 服务程序 ① 请求,响应 ② 处理优先级更高,嵌套打断 ① ② 完成,返回 ① 的断点 m+1 ① 完成,返回主程序断点 k+1 断点 k 断点 m
图 7-3 多重中断嵌套执行示意:主程序被 ① 打断,① 执行中又被处理优先级更高的 ② 打断;② → ① → 主程序逐层返回,断点靠堆栈「后进先出」恢复
多重中断方式的中断服务程序框架(伪码)
中断服务程序入口:            ← 由隐指令按向量地址转入
    关中断                    ← 响应时硬件已关;软件再确认,保证下段安全
    保护现场: 通用寄存器、PSW 压栈
    设置本源屏蔽字            ← 屏蔽处理优先级不高于自己的中断源
    开中断                    ← 关键:保护现场之后才开,允许更高级打断
设备处理段:
    与设备交换数据、发应答……  ← 本段可被更高处理优先级的中断嵌套
    关中断                    ← 保证恢复现场不被打断
恢复现场: 恢复屏蔽字,寄存器、PSW 出栈
    开中断
    中断返回(IRET)          ← 弹出断点,回到原程序继续执行
易错(开 / 关中断的三个时机)① 保护现场期间必须关中断——现场未保存完就被打断,恢复时张冠李戴;
② 设备处理段开中断(多重中断才开;单重中断全程关);
③ 恢复现场期间必须关中断,恢复完、返回前再开。判断题把「保护现场前开中断」「恢复现场时开中断」设为错误选项,是最常见的考法。

7.3.6 中断屏蔽技术 大题重点

屏蔽字每个中断源一位,\(n\) 个源对应 \(n\) 位屏蔽字,1 表示屏蔽该源(封锁其请求),0 表示开放。CPU 每进入一个服务程序,就把该源的屏蔽字写入屏蔽寄存器(接口中的 MASK 触发器组),离开时恢复原来的屏蔽字。作用:① 改变处理优先级——决定服务程序执行期间谁能打断自己;② 屏蔽自己,防止同源请求把服务程序再打断一次。
屏蔽字的写法规则(必背)设 \(n\) 个源的处理优先级为 \(P_1>P_2>\cdots>P_n\),则 \(P_i\) 的服务程序中设置的屏蔽字为:对 \(P_i\) 自身及所有处理优先级更低的位置 1,对更高的位置 0。由此得到三条检验规律:
  1. 对角线全 1(每行都屏蔽自己);
  2. 按处理优先级从高到低重排各行后,矩阵呈「上三角全 1」;
  3. 屏蔽字中 1 的个数随处理优先级降低而递增——优先级最高的源只有 1 个 1(仅自己),最低的源全是 1。
验证关系:\(Y\) 的屏蔽字中 \(X\) 位为 0 ⟺ \(X\) 处理优先级高于 \(Y\) ⟺ \(X\) 可以打断 \(Y\)。
例 4 方法 · 大题 按要求的处理优先级设计屏蔽字矩阵

某机 4 个中断源 A、B、C、D,响应优先级 A > B > C > D(硬件排队器固定)。现要求通过屏蔽字把处理优先级改为 C > A > D > B。(1) 写出每个服务程序的屏蔽字(位序 A、B、C、D);(2) 用三条规律检验;(3) 若 A、C 同时发出请求且 CPU 处于开中断的主程序,谁先被响应?谁先执行完?

查看解答

(1) 按「屏蔽自己 + 屏蔽所有更低者,放开更高者」:

服务程序A 位B 位C 位D 位依据
C(处理级最高)1111无人可打断它,全屏蔽
A1101只放开比它高的 C
D0101放开 C、A,屏蔽 B 与自己
B(处理级最低)0100只屏蔽自己,其余都可打断它

(2) 检验:对角线(A 行 A 位、B 行 B 位、C 行 C 位、D 行 D 位)全为 1 ✓;1 的个数 C 有 4 个、A 有 3 个、D 有 2 个、B 有 1 个,随处理优先级降低而递减 ✓;按 C、A、D、B 重排后上三角全 1 ✓。

(3) 先响应的是 A——排队器仍按响应优先级 A > B > C > D 工作,屏蔽字管不了它。A 的服务程序开中断后,C 未被屏蔽(A 行 C 位 = 0),C 随即打断 A,于是 C 先执行完,返回 A 续做,A 完成后才轮到别人。

套路总结:「先响应」看响应优先级(排队器,不变),「先完成 / 谁打断谁」看处理优先级(屏蔽字,可变)——第 (3) 问正是大题最爱考的双优先级分离。

例 5 真题风格 · 大题 由屏蔽表推实际执行次序

某机 4 个中断源 ①②③④,响应优先级 ① > ② > ③ > ④(硬件排队)。各服务程序设置的屏蔽字如下表(1 = 屏蔽):

服务程序① 位② 位③ 位④ 位
①1011
②1111
③0010
④0011

(1) 推出处理优先级;(2) 设主程序屏蔽字全 0(全开放)。主程序执行时 ③④ 同时发出请求,此后 ② 在 ④ 的服务程序执行期间到达,① 在 ② 的服务程序执行期间到达。写出实际执行次序。

查看解答

(1) 读表找「谁能打断谁」:② 行全 1 → 无人可打断 ②,处理级最高;① 行仅放开 ② → ② > ①;④ 行放开 ①②、屏蔽 ③ → ②① > ④;③ 行只屏蔽自己 → ③ 可被所有人打断,处理级最低。故 处理优先级 ② > ① > ④ > ③。(1 的个数:②4、①3、④2、③1,递减规律验证通过 ✓)

(2) 逐时刻推演(记住两条规则:主程序屏蔽字全 0;嵌套时生效的是「当前最内层服务程序」的屏蔽字,返回时恢复):

· ③④ 同时请求 → 排队器按响应优先级 ③ > ④ 选 ③,执行 ③ 服务程序(屏蔽字 0010);期间 ② 未到,③ 顺利执行完,返回主程序;

· 只剩 ④ 请求 → 响应 ④,设屏蔽字 0011(屏蔽 ③④);

· ② 到达:④ 行 ② 位 = 0 未被屏蔽 → 打断 ④,执行 ② 服务程序(1111,全屏蔽);

· ① 到达:② 行 ① 位 = 1,被屏蔽,挂起等待;② 执行完,返回 ④(恢复 ④ 的屏蔽字 0011);

· ④ 行 ① 位 = 0,① 未被屏蔽 → 打断 ④,执行 ① 服务程序(1011);无新请求,① 执行完返回 ④;

· ④ 执行完,返回主程序。

实际执行轨迹:③ → ④ → ②(嵌套于 ④)→ ①(嵌套于 ④)→ ④ 收尾。

验算三处关键打断:② 打断 ④(②>④ ✓)、① 打断 ④(①>④ ✓)、① 没能打断 ②(②>① ✓);③ 始终没能打断 ④(④ 行 ③ 位 = 1 ✓)。推演大题就按「时间线 + 每步看当前屏蔽字」机械推进,不要凭感觉。

例 6 高频辨析 响应优先级 vs 处理优先级

接例 4:响应优先级 A > B > C > D,处理优先级 C > A > D > B。B 的服务程序已设置屏蔽字并开中断执行,此时 A、C、D 三个源同时发出请求。问:(1) 最先打断 B 的是谁?(2) 最先执行完毕的是谁?

查看解答

(1) B 的屏蔽字为 0100(仅屏蔽自己),A、C、D 都未被屏蔽,都有权打断 B;三个请求同时到达,由排队器按响应优先级裁决:A > C > D,故 A 最先打断 B。

(2) 进入 A 的服务程序(屏蔽字 1101)后,C 未被屏蔽 → C 打断 A;C 的屏蔽字 1111 全屏蔽 → 无人再打断 C,C 最先执行完;返回 A 续做,A 完成后返回 B,此时 D(处理优先级高于 B)再打断 B,最后 B 收尾。

完整次序:A → C → A → D → B。「先打断 B 的」由响应优先级定,「先做完的」由处理优先级定——两个小问分别考两条规则,务必分开作答。

练习 4 易错

判断下列说法的正误:(1) 修改屏蔽字可以改变 CPU 响应中断的次序;(2) 每个中断源的服务程序中都必须屏蔽它自己;(3) 屏蔽字中 1 的个数越多,该源的处理优先级越低;(4) 响应优先级由硬件排队器决定,机器运行中不可改变。

查看答案

(1) 错:屏蔽字改变的是处理优先级(谁能打断谁、先做完谁),响应次序仍由排队器决定——这是最典型的偷换概念。

(2) 对:不屏蔽自己,同一源的重复请求可能把自己的服务程序再嵌套进去,破坏断点管理。

(3) 对:1 越多,能打断它的源越多、它能屏蔽的越少——处理优先级越低(例 4、例 5 均可验证)。

(4) 对(408 默认硬件排队器):接线固定,不可运行中改变;若采用软件轮询判优,次序才可由程序改变。

7.4 DMA 方式

7.4.1 DMA 控制器的组成

DMA 的思想中断方式仍要 CPU 逐字执行服务程序(每传一个字介入一次),高速设备(磁盘)根本等不起。DMA(直接存储器存取)在主存与设备之间开辟直接数据通路:数据传送完全由 DMA 控制器这一硬件接管总线后独立完成,不经过 CPU;CPU 只在传送前(预处理)和传送后(后处理)介入。CPU 对 I/O 的干预从「每个字」降到「每个块两次」。
DMA 控制器的组成
  1. 主存地址计数器 AR:存放主存缓冲区地址,每传一个字自动 +1;
  2. 字计数器 WC:存放待传送字数,每传一个字自动 −1,计满溢出表示整块传送结束,触发中断机构;
  3. 数据缓冲寄存器 DBR:暂存设备与主存之间传送的数据(速度缓冲);
  4. DMA 请求触发器:设备准备好一个字(或一批数据到齐)时置位,向 CPU 发 DMA 请求申请总线控制权;
  5. 中断机构:字计数器溢出(块传送结束)时向 CPU 发中断请求,请 CPU 做后处理——DMA 离不开中断技术的配合;
  6. 控制 / 状态逻辑:命令译码、时序、读写控制,以及设备地址寄存器等。
工作一句话:设备数据 → DBR → 发 DMA 请求 → 获总线权 → DBR 内容写入 AR 所指主存单元 → AR + 1、WC − 1 → WC 溢出发中断。
CPU 主存储器 系统总线(数据 / 地址 / 控制) DMA 控制器 主存地址计数器 AR 字计数器 WC 数据缓冲寄存器 DBR DMA 请求触发器 控制 / 状态逻辑 中断机构 设备地址寄存器 · 读写控制 · 时序 WC 计满溢出 → 中断机构向 CPU 发中断请求(块传送结束) DMA 请求(申请总线) DMA 响应(让出总线) 高速设备(磁盘等) 数据(不经 CPU)
图 7-4 DMA 控制器与主存、设备的连接:DMA 请求 / 响应握手借用总线;数据经 DBR 在设备与主存之间直接传送,全程不经过 CPU;块结束时中断机构发中断请 CPU 后处理

7.4.2 DMA 的三种传送方式

DMA 与 CPU 如何共用主存DMA 传数据也要经过系统总线访问主存,与 CPU 访存发生冲突时怎么办?三种方式:
  1. 停止 CPU 访存:DMA 请求一到,CPU 交出总线权,整块传完才归还。控制最简单、传送最快;缺点是 CPU 在整块传送期间不能访存(只能干等或做不访存的内部操作),且设备两批数据之间的空闲间隔主存也被白白占着,CPU 利用率低。适合传送速度接近主存、CPU 此刻恰好无访存任务的场景;
  2. 周期挪用(周期窃取,最常用):DMA 每传一个字挪用(窃取)一个存取周期,传完这个字立即把总线还给 CPU。CPU 与 DMA 分时使用主存;两者同时申请访存时 DMA 优先——设备缓冲小、数据不等人(晚一步就丢失),而 CPU 延迟一个周期访存并无大碍。兼顾了传送效率与 CPU 利用率;
  3. CPU 与 DMA 交替访问:把一个存储周期切成两个时间片,规定片 1 归 CPU、片 2 归 DMA,各用各的、无需申请归还总线。效率最高、无需总线权切换;但要求存储器速度加倍、控制逻辑复杂、硬件开销大,实际较少采用。
易错① 冲突裁决:「CPU 优先」不对——DMA 优先,理由是设备数据的实时性(缓冲寄存器小,不及时挪用数据就丢),且 DMA 只借一个存取周期、马上归还;
② 周期挪用挪走的是存储器存取周期,不是 CPU 的指令周期——CPU 只是在那个周期不能访存而已;
③ 三种方式中「最常用」的是周期挪用,「传送期间 CPU 完全不访存」的是停止 CPU 访存。
例 7 计算 周期挪用的主存占用比例

某机主存存取周期 100 ns,某高速设备经 DMA 以周期挪用方式输入数据,传输率 2 MB/s,每次挪用一个存取周期传送 4 B(本题按 1 MB = 10⁶ B 换算)。求 DMA 挪用主存周期的比例,并估计 CPU 访存速度最多受多大影响。

查看解答

① 每秒需传送 \(2\times10^{6}\) B,每次挪用传 4 B,故每秒挪用次数:

\[ \frac{2\times10^{6}}{4}=5\times10^{5}\ \text{次} \]

② 每次挪用占用一个存取周期 100 ns,每秒共占用:

\[ 5\times10^{5}\times100\ \text{ns}=5\times10^{5}\times10^{-7}\ \text{s}=0.05\ \text{s} \]

③ 占主存总时间的比例:

\[ \eta=\frac{0.05\ \text{s}}{1\ \text{s}}=5\%\quad(\checkmark:\ 5\times10^{5}\times10^{-7}=5\times10^{-2}) \]

即 DMA 窃取了主存 5% 的访问机会。CPU 若满负荷访存,访存速度至多下降约 5%;若 CPU 本来就不必每个周期都访存,实际影响更小——这正是周期挪用「以极小代价换取设备与 CPU 高度并行」的含义。

7.4.3 DMA 传送的三阶段

预处理 → 数据传送 → 后处理一次完整的 DMA 传送分三阶段,归属必须分清:
  1. 预处理(初始化)——由 CPU 执行程序完成:向 DMA 控制器写入主存缓冲区首址(→AR)、传送字数(→WC)、传送方向与设备号,然后启动设备;CPU 随即转去执行其他程序;
  2. 数据传送——由 DMA 控制器硬件独立完成:设备就绪一个字 → DBR → DMA 请求 → 挪用一个存取周期写入主存 → AR + 1、WC − 1 …… 全程无 CPU 干预;
  3. 后处理——由 CPU 执行中断服务程序完成:WC 计满溢出,DMA 的中断机构发中断请求,CPU 在服务程序中校验数据、判断是否继续传送下一块、报告结束等。
可见 DMA 与中断并非二选一:DMA 负责「搬数据」,中断负责「报告搬完」——DMA 把 CPU 从字一级的干预解放到块一级,中断技术在块边界处仍然不可缺。
练习 5

判断下列说法的正误:(1) DMA 的预处理由中断服务程序完成;(2) 数据传送阶段由 DMA 控制器硬件完成,CPU 可并行执行原程序;(3) 后处理由 CPU 执行中断服务程序完成;(4) DMA 请求也必须在一条指令执行结束时才能被响应。

查看答案

(1) 错:预处理是 CPU 执行普通程序(启动程序)完成的初始化工作,发生在传送开始之前;中断服务程序负责的是传送结束后的后处理。

(2) 对:这正是 DMA 的核心价值——传送阶段 CPU 与设备高度并行。

(3) 对:字计数器溢出发中断,后处理在中断服务程序中完成。

(4) 错:DMA 请求的响应时机是一个存取周期(总线周期)结束即可,不必等一条指令执行完——这正是 DMA 响应比中断响应更快的原因。

7.4.4 DMA 与中断的对比及结合

对比项程序中断方式DMA 方式
请求的来源中断源(设备就绪、每字一次)DMA 控制器(DBR 数据到齐,成块搬运)
响应时机一条指令执行结束才响应一个存取周期结束即可响应,更快
数据通路设备 → 接口 → 经 CPU 寄存器中转 → 主存设备 → DBR → 与主存直接交换,不经过 CPU
优先级低高(高速设备数据不等人,防丢失)
CPU 参与度与程序切换每字一次:保护 / 恢复现场、执行服务程序,开销大每块两次(预处理 + 后处理),传送期间无程序切换
DMA 与中断结合的完整例子(磁盘读一个 4 KB 块)① CPU 执行启动程序做预处理:把主存缓冲区首址写入 AR、块长 1024 字写入 WC、方向为「盘 → 内存」、启动磁盘,随后 CPU 转去干别的;② 磁头找到扇区,数据源源不断进入 DBR,每凑齐一个字(4 B)DMA 请求一次、周期挪用一个存取周期把它写进主存,AR、WC 随之增减——数据传送阶段 CPU 完全没有介入;③ WC 减到 0 溢出,DMA 的中断机构发中断请求,CPU 响应后执行服务程序做后处理:校验、决定是否再读下一块、通知上层「读盘完成」。一句话:DMA 管搬数据,中断管交报告。
例 8 2010 真题改编 · 必考计算 中断与 DMA 的 CPU 时间占比对比

某计算机 CPU 主频 500 MHz,CPI = 5。某外设数据传输率 0.5 MB/s,采用中断方式与主机传送,以 32 位为传输单位,对应的中断服务程序含 18 条指令,中断的其他开销相当于 2 条指令的执行时间。(1) 中断方式下 CPU 用于该外设 I/O 的时间占比是多少?(2) 若外设速率提高到 5 MB/s,改用 DMA 方式,每次 DMA 传送 4 KB 的块,预处理与后处理共需 500 个时钟周期,此时占比又是多少?(按 1 MB = 10⁶ B、1 KB = 10³ B 换算)

查看解答

(1) 每次中断传送 32 bit = 4 B,每秒中断次数:

\[ \frac{0.5\times10^{6}}{4}=1.25\times10^{5}\ \text{次} \]

每次中断开销 \( (18+2)=20 \) 条指令,共 \( 20\times5=100 \) 个时钟周期;每秒用于 I/O 的周期数与占比:

\[ 1.25\times10^{5}\times100=1.25\times10^{7}\ \text{个周期},\qquad \eta=\frac{1.25\times10^{7}}{500\times10^{6}}=2.5\%\quad(\checkmark) \]

(2) 每秒传送块数:

\[ \frac{5\times10^{6}}{4\times10^{3}}=1250\ \text{块} \]

每块 CPU 只花预处理 + 后处理 500 周期(传送本身不占 CPU):

\[ 1250\times500=6.25\times10^{5}\ \text{个周期},\qquad \eta=\frac{6.25\times10^{5}}{500\times10^{6}}=0.125\%\quad(\checkmark) \]

结论:速率提高 10 倍,CPU 占用反而从 2.5% 降到 0.125%(降为 1/20)——DMA 把「每字一次开销」变成「每块一次开销」,这正是高速设备必须配 DMA 的原因。

7.5 三种 I/O 方式总对比

时间 程序查询 查询等待(踏步)——CPU 几乎 100% 被占 程序中断 CPU 执行程序;每传一个字插入一段服务程序(红块) DMA CPU 执行程序;整块传送不介入,仅块首预处理、块末后处理(红块) 蓝 = CPU 时间归原程序 灰 = CPU 空等 红 = CPU 用于 I/O 的服务 / 处理
图 7-5 三种 I/O 方式下 CPU 的时间分配:查询方式 CPU 全程被占(约 100%);中断方式按例 8 数据仅占 2.5%(每字一小块);DMA 方式仅占 0.125%(每块两小块,块间传送零介入)
对比维度程序查询程序中断DMA
数据流向设备 → 接口 → CPU → 主存设备 → 接口 → 经 CPU 寄存器 → 主存设备 ↔ 主存直接交换,不经 CPU
CPU 干预粒度全程每一刻(踏步等待)每传一个字介入一次每传一个块介入两次(头、尾)
传送单位字字数据块
CPU 与设备并行性完全串行部分并行(设备准备时 CPU 干别的)高度并行
介入(响应)时机CPU 主动反复查询一条指令执行结束一个存取周期结束(最快)
接口 / 控制器复杂度最简单(数据口 + 状态口)需中断机构(请求、排队、屏蔽、向量)需 DMA 控制器(最复杂)
适用场景慢速设备、CPU 不忙、简单系统中低速设备、随机事件(键盘、打印机)高速批量传送(磁盘、网卡、显卡)
速率升高对 CPU 开销始终约 100% 占用线性增长,高速时 CPU 不堪重负按块摊薄,速率越高优势越大
再往前一步:通道比 DMA 更进一步的是 I/O 通道 / I/O 处理机:通道有自己的通道指令(通道程序),能独立管理多台设备的 I/O 全过程(含差错处理),CPU 只需发出启动命令、等通道整批做完后中断报告——把「每块两次」进一步压缩为「每批一次」。它把 I/O 控制彻底从 CPU 剥离,思想与操作系统科目的「I/O 软件」一脉相承,选择题记住「通道能执行通道程序、管理多设备」即可。

7.6 章末自测 真题风格

限时 50 分钟,先做后看答案。难度:★★ 基础 / ★★★ 强化 / ★★★★ 冲刺。计算题要求代入具体数值逐步演算,并用第二种方式验算。

自测 1(选择 · ★★)

I/O 接口中,用于暂存主机与设备交换数据、实现速度匹配的部件是( )
A. 地址译码器 B. 数据缓冲寄存器 DBR C. 状态寄存器 D. 中断排队器

查看答案

B。A 负责选端口,C 记录设备忙 / 就绪等状态,D 负责多请求判优——只有 DBR 承担数据中转与缓冲、匹配 CPU 与设备的速度差。

自测 2(选择 · ★★★ 高频考点)

下列关于独立编址方式的叙述中,正确的是( )
A. 端口地址与主存地址不能相同 B. 用访存指令即可访问端口 C. 需要专用 I/O 指令和区分访存 / 访端口的控制信号 D. 端口占用主存编址空间

查看答案

C。独立编址两空间相互独立、地址可重号(A 错),必须设 IN / OUT 专用指令(B 是统一编址的特征),靠 IORQ / MREQ 等控制线区分(C 对);不占主存空间(D 错,占主存空间是统一编址的缺点)。

自测 3(选择 · ★★★)

下列操作中,不属于中断隐指令完成的是( )
A. 关中断 B. 保存断点 C. 引出中断服务程序入口地址 D. 保护现场

查看答案

D。隐指令三件事:关中断、保存断点(PC、PSW)、找服务程序入口,全部由硬件完成;保护现场(通用寄存器、屏蔽字等)由服务程序(软件)完成——「断点归硬件,现场归软件」。

自测 4(选择 · ★★★ 易错)

采用向量中断的机器中,中断服务程序入口地址存放在( )
A. 中断向量(表项)中,由向量地址指示的存储单元取出 B. 程序计数器 PC 中 C. 中断排队器中 D. 设备的控制寄存器中

查看答案

A。链路:排队器选中源 → 硬件产生向量地址 → 按向量地址访存,从表项(中断向量)中取出入口地址 → 送 PC。排队器只产生优先级与向量地址,不存入口地址;控制寄存器存的是命令码。

自测 5(选择 · ★★★)

多重中断方式下,中断服务程序中「开中断」应安排在( )
A. 保护现场之前 B. 保护现场(含设置屏蔽字)之后、设备处理之前 C. 恢复现场之后、中断返回之前才第一次开 D. 任意位置均可

查看答案

B。现场未保存完就被打断会导致恢复错乱,故先关中断保护现场;随后开中断进入设备处理段,允许更高处理优先级嵌套;恢复现场前再关中断,返回前最后开中断。C 是单重中断的做法(全程关中断,仅返回前开)。

自测 6(选择 · ★★★)

CPU 对 DMA 请求的响应时机是( )
A. 一条指令执行结束 B. 一个存取周期(总线周期)结束 C. 一个时钟周期结束 D. 一个机器周期内任意时刻

查看答案

B。DMA 只借主存一个存取周期,不必等指令执行完;而中断必须等到一条指令执行结束——「DMA 响应快于中断响应」的根源就在于此。这也是 DMA 优先级高于中断的体现。

自测 7(填空 · ★★★ 计算)

某机主存存取周期 50 ns,设备经 DMA 以周期挪用方式传送,速率 4 MB/s,每次挪用传一个 4 B 的字(按 1 MB = 10⁶ B 换算)。DMA 挪用主存周期的比例为 \(\underline{\hspace{1cm}}\)。

查看答案

每秒挪用次数:

\[ \frac{4\times10^{6}}{4}=10^{6}\ \text{次} \]

每秒占用主存:

\[ 10^{6}\times50\ \text{ns}=10^{6}\times5\times10^{-8}\ \text{s}=5\times10^{-2}\ \text{s} \]

\[ \eta=5\times10^{-2}=5\%\quad(\checkmark) \]

验算(另法):每秒主存共 \(1/50\,\text{ns}=2\times10^{7}\) 个周期,被挪用 \(10^{6}\) 个,\(10^{6}/2\times10^{7}=5\%\) ✓。

自测 8(填空 · ★★★★ 计算)

某机主频 1 GHz,CPI = 4。外设以 0.2 MB/s 与主机传送数据,采用中断方式,以 32 位为传送单位,每次中断的服务程序及开销折合 30 条指令(按 1 MB = 10⁶ B 换算)。CPU 用于该外设 I/O 的时间占比为 \(\underline{\hspace{1cm}}\)。

查看答案

每秒中断次数:

\[ \frac{0.2\times10^{6}}{4}=5\times10^{4}\ \text{次} \]

每次中断 \(30\times4=120\) 个周期,每秒共:

\[ 5\times10^{4}\times120=6\times10^{6}\ \text{个周期} \]

\[ \eta=\frac{6\times10^{6}}{1\times10^{9}}=0.6\%\quad(\checkmark) \]

验算:0.6% × 10⁹ = 6×10⁶ 周期 = 5×10⁴ 次中断 × 120 周期 ✓。

自测 9(填空 · ★★★★ 计算)

上题外设速率提高到 8 MB/s 改用 DMA,每次传 8 KB 的块,预处理加后处理共 400 个时钟周期(按 1 MB = 10⁶ B、1 KB = 10³ B 换算)。CPU 用于 I/O 的时间占比为 \(\underline{\hspace{1cm}}\),是中断方式(0.2 MB/s 时 0.6%)的 \(\underline{\hspace{1cm}}\) 倍速率下仍更低开销,说明 DMA 适合高速设备。

查看答案

每秒传送块数:

\[ \frac{8\times10^{6}}{8\times10^{3}}=1000\ \text{块} \]

每秒 CPU 开销与占比:

\[ 1000\times400=4\times10^{5}\ \text{个周期},\qquad \eta=\frac{4\times10^{5}}{10^{9}}=0.04\%\quad(\checkmark) \]

速率提高为原来的 40 倍(0.2 → 8 MB/s),CPU 占用反而从 0.6% 降到 0.04%——按字摊销变按块摊销,开销与速率基本解耦,故高速设备必配 DMA。

自测 10(解答 · ★★★★)

为下列设备选择最合适的 I/O 控制方式并说明理由:(1) 每 2 秒输出一次数据的工业温控仪;(2) 键盘;(3) 传输率 500 MB/s 的固态硬盘;(4) 若键盘误用 DMA 方式,会出什么问题?

查看解答

(1) 程序查询:数据频率极低(0.5 次 / 秒),查询开销可忽略,接口与程序最简、成本最低;也可用中断,但查询已够用。

(2) 程序中断:击键随机、速度慢(每秒至多几十次),中断方式让 CPU 平时完全不管键盘、有键按下才响应,开销小、实时性好。

(3) DMA:速率极高、成块传送,若用中断每 4 B 一次服务程序,每秒需上亿次中断(\(500\times10^{6}/4=1.25\times10^{8}\) 次),CPU 完全被淹没;DMA 按块介入,传送阶段零占用。

(4) 键盘数据是单字节、随机到达:DMA 为成块传送设计,每传 1 B 也要做一次预处理 / 后处理(设首址、字数、启动、结束中断),开销反而远超一次中断服务;且 DMA 控制器资源有限,被慢速随机设备占用毫无意义——方式选择的关键是「按开销与数据形态匹配」,并非越先进越好。

7.7 本章考点总结

考点常考题型热度核心方法
I/O 接口与端口选择题★★★★端口 = 接口中可编址寄存器(数据 / 状态 / 控制口);DBR 管缓冲与速度匹配;接口 = 端口 + 控制逻辑
端口编址选择题★★★★统一编址:访存指令、占主存空间、靠地址区分;独立编址:IN / OUT 专用指令 + IORQ 控制线、地址可重号、不占主存
程序查询选择 / 计算★★★查忙 / 就绪位循环;CPU 与设备完全串行;占用 ≈ 100%(先算就绪间隔 \(\Delta t=1/v\),再算查询轮数)
中断判优与响应选择题★★★★ 高频响应三条件:有未屏蔽请求 + 开中断 + 指令执行完;隐指令三件事(关中断、保存断点、找入口)全由硬件做;保护现场归软件
向量中断辨析选择题★★★★中断向量 = 入口地址;向量地址 = 存入口地址的单元地址;向量中断 = 硬件产生向量地址找入口的方式
多重中断与屏蔽字大题 / 选择★★★★★ 必考保护现场后开中断、恢复现场前关中断;屏蔽字屏蔽自己 + 更低者,对角线全 1、1 的个数随处理优先级递减;响应优先级(排队器)不可变,处理优先级(屏蔽字)可变;推次序按「时间线 + 当前屏蔽字」机械推进
DMA 组成与三方式选择题★★★★AR + 1、WC − 1、DBR、DMA 请求触发器、中断机构;停止 CPU 访存 / 周期挪用(最常用,DMA 优先) / 交替访问
DMA 三阶段与 CPU 占用率选择 / 计算★★★★★ 必考预处理(程序)→ 传送(纯硬件)→ 后处理(中断服务程序);DMA 响应在存取周期末(快于中断);占比 = 每秒介入次数 × 每次周期数 ÷ 主频
DMA vs 中断五点对比选择题 / 简答★★★★请求源(字 vs 块)、响应时机(指令末 vs 周期末)、数据通路(经 CPU vs 直接)、优先级(DMA 高)、CPU 参与度(每字 vs 每块两次)
三方式选用解答题★★★慢速随机 → 中断;低速且 CPU 闲 → 查询;高速成块 → DMA;开销与数据形态匹配,不是越新越好
下一步本章过关标准:例题(尤其例 4、例 5 两道屏蔽字大题与例 8 的 CPU 占用率计算)全部独立重做;自测 10 题至少 8 题正确;能脱口而出「隐指令三件事、响应三条件、DMA 三方式三阶段、DMA 与中断五点对比」。至此组成原理全科目收官——建议回头串一遍「存储层次(第 3 章)→ 指令与 CPU(第 4、5 章)→ 总线(第 6 章)→ I/O(本章)」的大图谱,再进入操作系统部分:那里的「中断与异常、I/O 软件层次、设备驱动」正是本章概念在 OS 视角的延伸。返回总目录选择下一科目。