Appearance
I/O 与 CPU 占用率:数 CPU 被这台外设拉走了多少拍(专题总纲)
Intro
这一类题的题面给的东西很有规律:一个主频、一个 CPI、一个外设数据传输率,再加一个「每次要花多少条指令 / 多少个时钟周期」。然后问一句话——
CPU 用于该外设 I/O 的时间占整个 CPU 时间的百分比是多少?
这是 2009 年那道两小问的原话。2018 年那道换了个说法——「CPU 用于设备 A 输入/输出的时间占 CPU 总时间的百分比至少是多少?」——问的是同一个量。2016 年那道换了记法,问的是绝对的时钟周期数;2022 年那道不问时间,改数总线请求次数。但它们背后是同一件事:
数 CPU 被这台外设拉走了多少拍。
而这个数永远等于两个因子相乘:
程序查询、中断、DMA 是同一个问题的三档答案——搬这批数据时 CPU 参与多少。算法从头到尾不变,换的只有
三档只改两个因子
| 方式 | ||
|---|---|---|
| 程序查询 | 查询程序的指令数 | |
| 中断 | 数据传输率 | 题面直接给周期数就用它(2018、2016 都是这样),只给指令数才乘 CPI |
| DMA | 数据传输率 | 预处理 + 后处理的周期数 |
DMA 的 里没有搬运
这是这个专题最贵的一分。在题面声明「DMA 与 CPU 无访存冲突」(或按交替访问方式)时,DMA 的
- 2009 年那道写「假设 DMA 与 CPU 之间没有访存冲突」,块大小 5000 B;
- 2018 年那道第 (3) 问没有这句声明,只给了「CPU 用于 DMA 预处理和后处理的总时钟周期数为 500」和块大小 1000 B,按统考通行做法默认无冲突。
把 5000 或 1000 乘进
分母不一定是主频
边界必错点
2016 年那道有两个时间,差着两个量级。 题面连着问「完成这一任务所需时间大约是多少个时钟周期?CPU 用于完成这一任务的时间大约是多少个时钟周期?」——
- 任务总时间含 CPU 等设备 D 备好一个字符的
拍,一个字符 25 070 拍,1000 个字符是 ; - CPU 用于该任务的时间只有中断响应 10 拍加服务程序 80 拍,一个字符 90 拍,1000 个字符是
。
两个数相差近 280 倍,写反就整问归零。等设备的那段时间 CPU 并没有闲着,它在跑别的程序,所以不进 CPU 占用。
同一道题里,
- 算任务总时间只算到第 15 条为止(
拍)——第 15 条一执行,D 就开始备下一个字符了,后 5 条与它重叠; - 算 CPU 占用时间要把 20 条算满(
拍)——重叠归重叠,这 5 条 CPU 是真的在跑。
15 和 20 这两个数在同一道题里都要用到,各用在各的地方。
问「能不能」的时候不要去算占比。 2018 年那道第 (2) 问是「设备 B 能否采用中断 I/O 方式?为什么?」——做法是拿
2018 年那道第 (1) 问的方向别写反。 「最多间隔多长时间查询一次」求的是上界
2022 年那道数的是次数,而且单位要先统一。 「磁盘控制器中的数据缓冲区大小为 64 位,则在一个扇区读写过程中,DMA 控制器向 CPU 发送了多少次总线请求?」——缓冲区给的是位,扇区容量 512 是字节:
不换单位会算成 8 次。
一道题的答卷长什么样
以 2018 年那道为例——它把三档在一道题里摆齐了。中间量要一个不落地写在卷面上——这类题的分是按推导步骤给的,跳步直接写结果,中间那几步的分就没了。(408 官方不公布小问级细则,本文引的分值摊法是本站按同一标准拟的,只作对照。)
先把三小问共用的分母写在最上面:
T_clk = 1 / 500 MHz = 2 ns
CPU 每秒提供 5×10⁸ 个时钟周期 ← 后面三问都除它(1) 设备 A · 定时查询
设备 A 备好 32 位(4 B):4 B / 2 MB/s = 2 μs
→ 查询间隔最多 2 μs(超过就丢数据)
N = 1 s / 2 μs = 5×10⁵ 次/s
C = 10 条 × CPI 4 = 40 个时钟周期
占比 = 5×10⁵ × 40 / 5×10⁸ = 2×10⁷ / 5×10⁸ = 4%(2) 设备 B · 中断能不能用
一次中断 C = 400 × 2 ns = 0.8 μs
设备 B 备好 4 B = 4 B / 40 MB/s = 0.1 μs
0.8 μs > 0.1 μs
→ CPU 还没处理完上一个,下一个数据就把缓冲寄存器覆盖了 → 丢数据
→ 设备 B 不能采用中断方式(3) 设备 B · DMA
N = 40 MB/s / 1000 B = 4×10⁴ 次/s
C = 500 个时钟周期 ← 只有预处理 + 后处理,1000 B 的搬运不占 CPU
占比 = 4×10⁴ × 500 / 5×10⁸ = 2×10⁷ / 5×10⁸ = 4%⚠️ 第 (1) 问和第 (3) 问算出来都是 4%,这是这道题的巧合。同样 4% 底下服务的数据量差 20 倍:设备 A 是 2 MB/s,设备 B 是 40 MB/s。写完回头看见两个 4% 别慌着改。
第二组的卷面:同一段过程,两个分子
2016 年那道的第 (2) 问 9 分,是本专题最大的一个小问。它把「设备忙了多久」和 「CPU 为它忙了多久」摆在同一段过程上分别问,两个数差了两个数量级——分母都不除,直接要拍数。
先把时钟周期折出来:
时钟周期 = 1 / 50 MHz = 20 ns
设备准备一个字符 0.5 ms = 0.5 ms / 20 ns = 2.5 × 10⁴ 拍分子一:一个字符从开始到送完,整段占了多少拍(含 CPU 在等的时间)
2.5 × 10⁴(等设备准备)
+ 10 (中断响应)
+ 15 × 4 (服务程序前 15 条指令,CPI = 4,第 15 条启动 D)
= 25070 拍
1000 个字符 ≈ 1000 × 25070 = 2.507 × 10⁷ 拍⚠️ 后 5 条指令不计入——它们与下一个字符的准备时间重叠,题面把这个重叠写在了指令序列里。
分子二:这段过程里 CPU 真正为它花了多少拍(等设备的时间不算)
1000 × (10 + 20 × 4) = 9 × 10⁴ 拍两个数相差约 280 倍,而这 280 倍正是中断方式的意义所在:CPU 只在那 90 拍里被占住, 其余 2.5 万拍它可以去跑别的。
最后一小问问的是操作而不是数:中断响应阶段 CPU 做四件事——关中断、保护断点、 保护 PSW、识别中断源。这一档 2 分,答成「保护现场」笼统一句拿不满。
真题的三种形态
第一组 · 三档换算(2009-43、2018-43)——给主频、CPI、数据传输率和每次的开销,问占 CPU 总时间的百分比。两道题骨架完全一样:算分母、填
第二组 · 同一个分子,两种问法(2016-44)——不除主频了,直接问周期数,并且要求同时给出「任务总时间」和「CPU 用于该任务的时间」两个数。这一组的功夫全在分清哪些拍算进 CPU 占用。它还多问一句「在中断响应阶段 CPU 进行了哪些操作」——答关中断、保护断点即可。
第三组 · 数次数与判优(2022-44)——不算时间了,改数一个扇区读写里 DMA 要打断总线几次;再问 CPU 和 DMA 同时要总线时谁让谁。
其中两道是拼盘题,外挂的小问独立给分。
- 2016-44 的第 (1) 问前半是外挂:「每传送一个字符,在异步串行通信线上共需传输多少位」考的是异步串行帧格式(起始 1 + 数据 7 + 校验 1 + 停止 1 = 10 位),属于通信规程,1 分。同一问的后半「每秒钟最多可向 I/O 端口送入多少个字符」(
)已经是本专题 那个因子的原型了,2 分。 - 2022-44 的第 (1)(2) 问是外挂:CHS 三个地址字段的名称与位数、一个扇区的平均访问时间,属于外存储器那一章,各 2 分共 4 分。只有第 (3) 问的 4 分挂在本专题的骨架上。
外挂的小问单独给分,本专题那部分不熟也不会连累它们,反过来也一样。
交卷前扫一眼
先把主频折成「每秒几拍」放在最上面 · 再填
(被拉走几次)和 (每次几拍)· DMA 的 里没有搬运 · 问「能不能」就拿 和设备产出周期比大小 · 题目问周期数就别除主频
配套内容
大纲这几条的其余打法、这 4 道真题没有正面考过的(前四条在专题的巩固栏里配了题):
- DMA 三种工作方式在 CPU 占用上的差别——停止 CPU 访存、周期挪用、交替访问三档,2022 年那道题面写了「周期挪用」四个字当前提,另外三道的题干里这三个名字一个都没出现;三种方式各占多少、为什么分这三档,没让算过
- 多个 DMA 设备之间的总线优先级仲裁(⚠️ 总线仲裁在 2026 大纲里查无此项,属大纲外的延伸)——2022 年那道只问了 DMA 和 CPU 二选一;两台 DMA 设备同时申请总线谁先上、依据什么,没考过
- 中断向量地址怎么算、断点入栈之后栈里是什么——2016 年那道问到「在中断响应阶段 CPU 进行了哪些操作」就停了,答关中断、保护断点就给分;向量表基址加类型号乘表项长度这一步,以及 PC 和 PSW 压栈后 SP 变成多少,没往下问
- 多重中断与中断屏蔽字——四道真题的题干里一次都没出现「屏蔽」或「嵌套」;2016 年那道停在中断响应阶段,而多重中断要在保护现场之后再开中断——这一步以及屏蔽字怎么设,没考过
- I/O 端口的编址方式——统一编址还是独立编址、各自用什么指令访问,大纲要求;2016 年那道题干里出现了「I/O 端口」,但只当作字符的落脚点,没问过它怎么编址
- I/O 通道方式(⚠️ 通道已移出大纲,I/O 控制方式只剩程序查询、程序中断、DMA 三种;这里保留一句是为了让你知道见到它可以跳过)
- SSD 的组成与磨损均衡——2022 年那道考的是机械磁盘的 CHS 与平均访问时间,固态盘没出现过
逐题精讲(建设中)——真题作答与 AI 判分入口见站内大题专题。