第7章 输入/输出系统
第7章 输入/输出系统¶
核心是三种 I/O 方式(程序查询、程序中断、DMA)的原理与效率计算。中断的工作流程、中断屏蔽字、DMA 的三种共享主存方式几乎年年出现,且效率占比计算是固定套路题。
b_304_1【知识树】第7章骨架¶
- I/O 系统组成:I/O 软件 + I/O 硬件
- 外部设备:输入设备、输出设备(显示器 VRAM 计算)、外存
- I/O 端口编址:统一编址 vs 独立编址
- 三种 I/O 方式
- 程序查询:独占查询 / 定时查询
- 程序中断:请求 → 判优 → 响应 → 处理;中断隐指令;多重中断与屏蔽字
- DMA:控制器组成、三种共享主存方式、传送过程
- DMA 与中断的区别
b_304_07.1 I/O 系统与外部设备¶
I/O 系统由哪两大部分组成?¶
- I/O 软件:设备驱动程序、I/O 管理程序、用户应用程序
- I/O 硬件:外部设备、设备控制器、I/O 接口、I/O 总线
其中设备控制器负责控制外设的具体操作,I/O 接口实现与主机总线的连接。
b_297_0显存 VRAM 的容量和带宽怎么算? ★1考¶
- 若色深以 bit/像素给出,单帧最低容量(B)= 水平像素 × 垂直像素 × 色深 ÷ 8
- 最低像素数据率(B/s)= 单帧字节数 × 帧频
配套要记的参数:分辨率表示为“宽×高”(如 1920×1080);24 位真彩色约 1677 万色。实际显存容量/带宽还可能包含多缓冲、对齐、读改写、消隐和压缩等开销。
⚠️ “高于 30Hz 人眼就不感知闪烁”不是普遍生理阈值;亮度、占空比、显示方式与观看条件都会影响闪烁感知。
★ 考过 2010
💡 记忆法:"容量是一帧,带宽是每秒多少帧" —— 带宽就是容量再乘帧频。
b_297_16三种打印机的原理和适用场景?¶
- 针式打印机:点阵式击打,靠打印针撞击色带。唯一支持多层复写(发票打印)、耗材便宜;但噪声大、分辨率低、速度慢
- 喷墨式:喷射微小墨滴,基于青、品红、黄三基色混合,家庭办公用
- 激光打印机:激光扫描 + 静电成像(感光鼓形成静电潜像 → 显影 → 转印 → 定影),速度快质量高
b_297_3;PDF 第 297 页 · b_297_19I/O 端口的两种编址方式怎么选?¶
- 统一编址:把主存地址空间的一部分分配给 I/O 端口,可用普通访存指令直接访问
- 优点:编程简便;缺点:占用统一地址空间的一段,减少可用于 RAM 映射的地址范围
- 独立编址:I/O 地址空间与主存相互独立,不占用主存资源
- 优点:不占主存;缺点:需要专用 I/O 指令(IN、OUT),增加指令集复杂性
💡 记忆法:"统一编址省指令费地址,独立编址省地址费指令"。
⚠️ 统一编址不必然减少机器已经安装的物理 RAM 容量;地址空间足够大时只是占用了部分可映射地址。
b_331_57.2 程序查询方式¶
独占查询和定时查询的区别? ★1考¶
- 独占查询:启动外设后 CPU 连续不断查询直到完成,期间无法执行其他任务,CPU 与外设完全串行
- 定时查询:CPU 以固定时间间隔周期性查询,就绪则传一个数据单元后返回用户程序继续执行
⚠️ 查询间隔必须根据外设数据传输速率合理设置,否则会丢数据。
★ 考过 2023
b_304_4定时查询的间隔怎么算?效率占比怎么算? ★2考¶
核心思路:必须在外设填满数据缓冲区之前完成读取,否则新数据覆盖旧数据。
经典算例:主频 500MHz、CPI = 4、外设速率 2MB/s、32 位(4B)数据缓冲寄存器、每次查询 10 条指令 - 填满 4B 缓冲区需 4B ÷ 2MB/s = 2μs → 最多每 2μs 查询一次 - 每秒查询次数 = 1s ÷ 2μs = 5×10⁵ 次 - 每秒用于 I/O 的时钟周期 = 5×10⁵ × 10 × 4 = 2×10⁷ - 占比 = 2×10⁷ ÷ 500×10⁶ = 4%
★ 考过 2011、2018
b_304_167.3 程序中断方式¶
中断技术有哪些用途? ★2考¶
- 实现 CPU 与 I/O 设备的并行工作
- 处理硬件故障和软件异常
- 支持人机交互
- 支撑多道程序与分时操作系统的任务切换
- 满足实时系统的快速响应
- 实现用户程序向操作系统的切换(软中断、系统调用)
- 多处理器系统中协调处理器间通信与任务迁移
★ 考过 2022、2023
b_305_5高速外设为什么不适合单字中断? ★5考¶
经典算例:主频 500MHz、CPI = 4、外设速率 40MB/s、32 位缓冲寄存器、每次中断需 400 个时钟周期 - 中断响应与处理时间 = 400 ÷ 500MHz = 0.8μs - 外设填满 4B 缓冲区只需 4B ÷ 40MB/s = 0.1μs - 0.1μs < 0.8μs → 新数据在 CPU 处理完前次中断前就到了,缓冲区被覆盖、数据丢失
⚠️ 结论:外设准备数据的时间远小于中断处理时间时,就不能用单字中断方式,应改用 DMA。
★ 考过 2009、2014、2016、2018、2019
b_305_11中断响应优先级的一般规则?¶
- 不可屏蔽中断 > 可屏蔽中断
- I/O 传送类中断内部:高速设备 > 低速设备;输入设备 > 输出设备;实时设备 > 普通设备
判优由硬件排队器(或中断查询程序)实现。
b_306_6响应优先级和处理优先级有什么区别?¶
- 响应优先级:由当前硬件连线、判优器配置或软件查询顺序决定;在一道题给定的配置下按固定顺序分析,但可编程控制器/查询程序可以重配置
- 处理优先级:可通过中断屏蔽技术动态调整,以支持多重中断
两者的关系一句话:只有未被屏蔽的中断请求,才会被送入中断判优电路参与响应优先级的判定。
b_306_10CPU 响应中断必须满足哪三个条件? ★1考¶
- 存在有效的中断请求
- CPU 处于开中断状态(中断允许标志为 1;异常和不可屏蔽中断不受此限制)
- 当前指令已执行完毕(异常不受此限制),且无更高优先级任务待处理
⚠️ 因为 CPU 仅在每条指令执行结束时统一采样中断请求信号,所以响应 I/O 中断的时机总是在某条指令执行完成之后。
★ 考过 2023
b_306_11;PDF 第 306 页 · b_306_12中断隐指令包含哪三步? ★1考¶
中断隐指令并非指令系统中的真实指令,而是 CPU 响应中断后硬件自动完成的一系列操作: - ① 关中断:防止保存断点和现场时被新中断打断,否则现场信息可能不完整 - ② 保存断点:把 PC 和 PSW 保存到栈或专用寄存器 - ③ 引出中断服务程序:识别中断源,把服务程序入口地址送入 PC
★ 考过 2012
b_306_17中断和三类异常的断点分别是什么?¶
- 中断:发生在指令执行完成后 → 断点为下一条指令地址
- 故障类异常(缺页、除零):指令未完成 → 断点为当前指令地址,处理后重新执行
- 陷阱类异常(系统调用):指令成功执行后触发 → 断点为下一条指令地址
b_307_1中断向量、向量地址、向量中断三者的关系? ★1考¶
- 中断向量 = 中断服务程序的入口地址
- 向量地址 = 中断向量表中某一项的内存起始地址,由中断类型号 × 表项长度算出
- 例:表项占 4 字节、类型号为 5 → 向量地址 = 5 × 4 = 20
- 向量中断 = 一种处理方式:中断源提供类型号 → CPU 据此生成向量地址 → 从表中取出中断向量 → 转移执行
⚠️ 信号走哪条线要记清:中断请求和响应信号走 I/O 总线的控制线;中断类型号在中断响应阶段由中断控制器经数据总线提供给 CPU。
★ 考过 2023
b_307_5支持嵌套的中断处理流程九步? ★4考¶
- ① 关中断(硬件)
- ② 保存断点(硬件)
- ③ 中断服务程序寻址(硬件)
- ④ 保存现场和中断屏蔽字(软件)
- ⑤ 开中断 ← 允许更高优先级中断,实现嵌套的关键
- ⑥ 执行中断服务程序
- ⑦ 关中断 ← 确保恢复过程不被打断
- ⑧ 恢复现场和中断屏蔽字
- ⑨ 开中断、中断返回
⚠️ 分工:①~③ 由中断隐指令(硬件)完成,④~⑨ 由中断服务程序(软件)完成。 ⚠️ 单重中断只需去掉第 ⑤ 步开中断和第 ⑦ 步关中断。
★ 考过 2010、2017、2018、2021、2024
b_308_0断点和现场为什么一个硬件保存、一个软件保存?¶
- 断点信息由硬件在中断响应阶段自动保存
- 现场信息由软件在进入中断服务程序时显式保存 —— 因为现场信息(CPU 中可能被服务程序修改的寄存器)用指令可以直接访问
两者都不可被中断服务程序破坏。
b_308_3中断屏蔽字怎么设置? ★4考¶
规则:处理优先级越高,屏蔽的中断越多;每个中断源都要屏蔽自己。
经典例题:4 个中断源硬件响应优先级 A>B>C>D,要求处理优先级调成 A>D>C>B | 中断源 | A | B | C | D | |---|---|---|---|---| | A | 1 | 1 | 1 | 1 | | B | 0 | 1 | 0 | 0 | | C | 0 | 1 | 1 | 0 | | D | 0 | 1 | 1 | 1 |
读法:A 处理优先级最高 → 屏蔽全部(含自身)= 1111;D 次高 → 只允许被 A 打断 = 0111;C 第三 → 允许被 A、D 打断 = 0110;B 最低 → 仅屏蔽自身 = 0100。
★ 考过 2017、2020、2021、2024
💡 记忆法:"对角线全是 1"(人人屏蔽自己),然后按处理优先级从高到低,1 越来越少。
b_309_1中断屏蔽字什么时候生效?¶
中断服务程序常在保存现场后加载本级屏蔽字,用它调整嵌套关系;但屏蔽寄存器/状态也可由内核在主程序或其他控制路径设置,不能定义成“只在 ISR 期间才生效”。
做王道屏蔽字矩阵题时固定读法:行=当前正在执行的 ISR,列=请求源,1=屏蔽,0=允许参与后续判优。通常对角线为 1。
⚠️ 另外:即使在服务程序执行期间,若多个未屏蔽中断同时到达,其处理顺序仍由中断判优电路的响应优先级决定。
b_309_57.4 DMA 方式¶
DMA 方式的五个特点?¶
- 打破主存与 CPU 的固定关联 —— 主存既可被 CPU 访问,又可被外设直接访问
- 块传输过程中主存地址的生成与传送字数的计数均由硬件电路自动完成
- 传送区域必须是 DMA 控制器可寻址/映射并满足一致性要求的主存区域;这不等于所有系统都必须划出固定“专用缓冲区”
- 支持高速传输,CPU 与外设可并行工作
- 传输开始前需软件预处理,结束后通过中断完成后处理
⚠️ 在 DMA 方式中,中断的作用仅限于处理故障和通知正常传输完成。
b_310_9DMA 控制器由哪几部分组成?¶
- 主存地址计数器:存放当前主存地址,每传一个字自动加 1
- 传送长度计数器:存放总字数,每传一个字减 1,减到 0 表示结束
- 数据缓冲寄存器:暂存每次传送的数据(与主存之间以字为单位,与外设之间可能以字节或字为单位)
- DMA 请求触发器:设备准备好数据时置位
- 控制/状态逻辑:设定传送方向、更新参数、协调请求与响应
- 中断机构:一批数据传完后向 CPU 发中断请求
⚠️ DMA 控制器必须具备控制系统总线的能力(传送时接管总线,结束后交还 CPU)。
b_311_0DMA 与 CPU 共享主存的三种方式? ★3考¶
- 停止 CPU 访存:DMA 请求时让 CPU 放弃总线并暂停访存,直到整块数据传完
- 优点:控制逻辑简单,适合速率很高的成组传送;缺点:DMA 期间 CPU 基本空闲
- 周期挪用(周期窃取):挪用一个主存存储周期,传完一个数据字就立即释放总线(单字传送)
- 三种情形:① CPU 不在访存 → 直接用;② CPU 正在访存 → 等当前存储周期结束;③ 同时请求 → CPU 暂时放弃总线
- 优点:兼顾 I/O 需求和 CPU 效率;缺点:每次挪用都要申请释放总线,有开销
- DMA 与 CPU 交替访存:把 CPU 工作周期分成两个子周期,一个给 CPU、一个给 DMA
- 适用于 CPU 工作周期长于主存存储周期的场景(如 CPU 周期 1.2μs、主存周期 < 0.6μs)
- 优点:无须申请和释放总线,速率高;缺点:硬件控制逻辑复杂
★ 考过 2012、2020、2022
b_312_5DMA 的效率占比怎么算? ★2考¶
经典算例:主频 500MHz、CPI = 4、外设速率 40MB/s、每次 DMA 传送块 1000B、预处理+后处理共 500 个时钟周期 - 每秒 DMA 次数 = 40MB/s ÷ 1000B = 40000 次 - 只有预处理和后处理需要 CPU,数据传送全程由 DMA 控制 - CPU 用于 I/O 的时钟周期 = 40000 × 500 = 2×10⁷ - 占比 = 2×10⁷ ÷ 500M = 4%
★ 考过 2011、2018
b_312_17DMA 传送的三个阶段各由谁完成? ★2考¶
- ① 预处理(CPU 完成):设置主存起始地址、传送方向、传送数据个数,启动 I/O 设备;随后 CPU 继续执行原程序
- ② 数据搬运(DMA 控制器完成):整项任务以块为单位由 DMA 自动推进,但每次获得总线后传多少数据取决于模式
- 停止 CPU 访存/块模式可连续占用总线传较大一段
- 周期挪用通常只占一个存储/总线周期,传一个字后释放,再为下一字重新仲裁
- ③ 后处理(CPU 完成):DMA 发中断请求,CPU 执行中断服务程序做校验数据完整性等工作,出错则转诊断程序
★ 考过 2019、2025
b_313_3DMA 方式和中断方式的六点区别? ★2考¶
- 现场:DMA 的总线请求/数据搬运阶段不是程序中断,不需要按中断服务程序保存完整现场;但 DMA 完成后发出的完成中断仍会打断指令流,并按体系结构保存必要上下文
- 响应时机:外部中断通常在指令边界响应;DMA 的总线请求可在当前总线事务/存储周期允许的边界仲裁
- 传送手段:中断靠 CPU 执行指令传送;DMA 由专用硬件直接在主存与外设间传送
- 优先级:同时访问主存时,DMA 请求优先级通常更高
- 能力范围:中断具备处理异常事件的能力;DMA 仅用于大批量数据传输
- 控制方式:中断由软件控制,DMA 由硬件完成
★ 考过 2013、2023
b_314_17.5 本章疑难点¶
开中断时 CPU 检测到中断一定会立即响应吗?¶
不一定。 开中断只说明全局允许可屏蔽中断;请求还要通过中断源屏蔽、优先级与仲裁,并等到体系结构规定的可响应/提交边界。若有更高优先级请求或处于短暂不可中断窗口,也可能延后。
王道题若已经明确“请求有效、未屏蔽、优先级最高,且 CPU 到达指令边界”,才可判断此时立即转入响应流程。
b_331_9程序中断和调用子程序有哪四点区别?¶
- 触发时机:子程序调用由程序员用 CALL 主动发起,时刻确定;中断随机触发、异步不可预测
- 服务关系:子程序与主程序是主从关系;中断服务程序与主程序通常无直接关联,属平行关系
- 实现机制:子程序是纯软件行为(只用堆栈保存返回地址);中断需软硬件协同(中断请求线、中断控制器、判优电路)
- 嵌套级别:子程序嵌套深度主要受堆栈空间限制;中断嵌套受优先级机制约束,层次有限
b_332_2【易混点】第7章成对概念对照¶
| 易混对 | 分界线 |
|---|---|
| 统一编址 vs 独立编址 | 用普通访存指令、占主存空间 vs 用专用 I/O 指令、不占主存 |
| 独占查询 vs 定时查询 | 一直查到完(完全串行)vs 定时查一次就返回 |
| 响应优先级 vs 处理优先级 | 硬件固定不可改 vs 靠屏蔽字动态调整 |
| 可屏蔽 vs 不可屏蔽中断 | INTR、优先级低、关中断时不响应 vs NMI、优先级最高 |
| 断点 vs 现场 | 断点硬件自动存 vs 现场软件显式存 |
| 中断向量 vs 向量地址 | 服务程序入口地址 vs 该入口地址在向量表中的位置 |
| 单重中断 vs 多重中断 | 服务期间不响应新中断 vs 中途开中断允许嵌套 |
| 中断 vs DMA | 指令结束才响应、软件传送 vs 总线周期结束即响应、硬件传送 |
| 停止 CPU 访存 vs 周期挪用 vs 交替访存 | 整块阶段独占 vs 按一次总线/主存服务量挪用(常见例题为一字)vs 子周期固定分配 |
| 程序中断 vs 子程序调用 | 随机异步、平行关系、软硬协同 vs 主动确定、主从关系、纯软件 |
b_332_0【必背数字】第7章¶
- 若色彩深度单位为 bit/pixel:VRAM 最小字节容量 = 分辨率 × 色深 ÷ 8;最低字节带宽 = 分辨率 × 色深 × 帧频 ÷ 8(再按题设计消隐/编码等开销)
- 刷新率是题设参数;不能用“>30Hz 人眼一定不闪”作无条件生理结论
- 24 位真彩色 ≈ 1677 万种颜色
- 定时查询间隔:缓冲区容量 ÷ 外设速率
- 中断处理流程 9 步,其中 ①~③ 硬件(中断隐指令)、④~⑨ 软件
- 单重中断 = 九步中去掉开中断⑤和关中断⑦
- 向量地址 = 中断类型号 × 表项长度
- 本书常用中断屏蔽矩阵:行=当前 ISR、列=请求源,1 表示屏蔽;通常对角线为 1,具体优先关系按题设矩阵读
- DMA 三种共享主存方式:停止 CPU 访存 / 周期挪用 / 交替访存
- DMA 三阶段:预处理(CPU)→ 数据传送(DMA)→ 后处理(CPU 中断)
- CPU 响应中断的 3 个条件;DMA 与中断的 6 点区别
b_297_16;PDF 第 297 页 · b_297_17