8.5 I/O 专题:CPU 开销与多重中断

408 I/O 综合题的解法——程序查询、中断、DMA 三种方式下 CPU 用于 I/O 的时间占比计算,DMA 与 CPU 的访存冲突,中断响应优先级与处理优先级、屏蔽字的设置,以及多重中断时程序运行轨迹的画法。

考查要求 ★★★ 重点掌握 CPU 占用率 = 每秒事件数 × 每次 CPU 时间查询频率不低于数据传送频率DMA 只在预处理和后处理时占用 CPU响应优先级与处理优先级屏蔽字中断嵌套程序运行轨迹

三种方式的 CPU 开销

所有计算都基于同一个公式:

CPU 用于 I/O 的时间占比=外设数据率每次传送的数据量⏟每秒事件数×每次事件的时钟周期数CPU 主频⏟每次事件的 CPU 时间\text{CPU 用于 I/O 的时间占比} = \underbrace{\frac{\text{外设数据率}}{\text{每次传送的数据量}}}_{\text{每秒事件数}} \times \underbrace{\frac{\text{每次事件的时钟周期数}}{\text{CPU 主频}}}_{\text{每次事件的 CPU 时间}}

三种方式的区别在于”事件”是什么、每次事件传送多少数据:

方式一次”事件”每次传送的数据量每次占用 CPU 的时间
程序查询一次查询(为不丢失数据,查询频率不能低于数据的传送频率)一个数据(如 1 个字)查询程序的执行时间
中断一次中断一个数据(或一个缓冲区)中断服务程序 + 中断响应、保存/恢复现场等其他开销
DMA传送一个数据块整个数据块只有预处理(设置 DMA 控制器)和后处理(DMA 结束中断)的时间;块传送期间 CPU 不参与
计算器I/O 方式的 CPU 时间占用
方式外设数据率(MB/s)每次传送(B)每次占用 CPU(时钟周期)
每次查询传送 每次查询
每次中断传送 每次中断(含开销)
每个数据块 每块预处理 + 后处理
CPU 时间轴(每行显示该方式的 4 个事件周期;红色 = CPU 在为 I/O 服务,其余时间执行用户程序)中断每 8 µs 一次中断(每秒 125 K 次),每次 CPU 用 200 ns2.5%DMA每 1 ms 一次DMA 块(每秒 1 K 次),每次 CPU 用 1 µs0.1%
CPU 占用率 = 每秒事件数 × 每次事件的 CPU 时间 = (数据率 ÷ 每次传送量) × (每次周期数 ÷ 主频)。 例如中断:(0.5 MB/s ÷ 4 B) × (100 ÷ 500 MHz) = 125 K × 200 ns = 2.5%。
综合题(408 真题改编,对应计算器的第一个预置)

某计算机 CPU 主频为 500 MHz,CPI 为 5。(1) 某外设的数据传输率为 0.5 MB/s,采用中断方式与主机传送数据,以 32 位为传输单位,对应的中断服务程序包含 18 条指令,中断服务的其他开销相当于 2 条指令的执行时间。CPU 用于该外设 I/O 的时间占整个 CPU 时间的百分比是多少?(2) 当该外设的数据传输率达到 5 MB/s 时改用 DMA 方式,每次 DMA 传送的块大小为 5000 B,DMA 预处理和后处理的总开销为 500 个时钟周期。CPU 用于该外设 I/O 的时间占整个 CPU 时间的百分比是多少?(假设 DMA 与 CPU 之间没有访存冲突)

查看解答

(1) 每秒中断次数 = 0.5 MB/s ÷ 4 B = 1.25 × 10⁵ 次;每次中断执行 18 + 2 = 20 条指令,需 20 × 5 = 100 个时钟周期。

1.25×105×100500×106=2.5%\frac{1.25 \times 10^5 \times 100}{500 \times 10^6} = 2.5\%

(2) 每秒 DMA 传送次数 = 5 MB/s ÷ 5000 B = 1000 次;每次占用 CPU 500 个时钟周期。

1000×500500×106=0.1%\frac{1000 \times 500}{500 \times 10^6} = 0.1\%

数据率提高了 10 倍,CPU 开销反而降为原来的 1/25:DMA 适合高速、成块传送的外设。

例题

CPU 主频 50 MHz,一次查询操作需要 100 个时钟周期。分别计算以下设备采用程序查询方式时 CPU 用于查询的时间占比:(1) 软盘以 16 位为单位传送,数据率 50 KB/s;(2) 硬盘以 32 位为单位传送,数据率 2 MB/s。硬盘能否采用程序查询方式?若硬盘改用 DMA 方式,每次传送 4 KB 的块,每次 DMA 的预处理与后处理共 1500 个时钟周期,CPU 占用率是多少?

查看解答

(1) 为不丢失数据,每秒至少查询 50 KB/s ÷ 2 B = 2.5 × 10⁴ 次:2.5 × 10⁴ × 100 ÷ (50 × 10⁶) = 5%。

(2) 每秒至少查询 2 MB/s ÷ 4 B = 5 × 10⁵ 次:5 × 10⁵ × 100 ÷ (50 × 10⁶) = 100%——CPU 的全部时间都用来查询硬盘,不能采用程序查询方式。

改用 DMA:每秒传送 2 × 10⁶ ÷ 4096 ≈ 488.3 块,占用 488.3 × 1500 ÷ (50 × 10⁶) ≈ 1.46%。(在计算器中选择第二个预置即可验证。)

DMA 与 CPU 的访存冲突

DMA 传送期间 CPU 仍在执行程序,两者可能同时要访问主存。有三种处理方法:

方法做法特点
停止 CPU 访存DMA 传送一批数据期间,CPU 让出总线控制权,暂停访存控制简单;但外设两次传送之间主存空闲,CPU 也不能访存,效率低
周期挪用(周期窃取)DMA 每传送一个数据,就”挪用”一个存储周期;若 CPU 此时也要访存,DMA 优先最常用;适合 I/O 设备读写周期大于主存周期的情况
DMA 与 CPU 交替访存把一个 CPU 周期分成两半,分别供 DMA 和 CPU 访存不需要总线控制权的申请与归还;要求 CPU 周期是主存周期的 2 倍以上

多重中断与屏蔽字

多个中断源同时请求时,有两种”优先级”:

  • 响应优先级:同时有多个请求时,先响应谁。它由硬件排队电路决定,不能改变。
  • 处理优先级:一个中断正在处理时,能否被另一个中断打断。它由各级中断服务程序设置的屏蔽字决定,可以由软件改变。

屏蔽字中某位为 1 表示屏蔽对应级别的中断。若要求处理优先级为某一顺序,则每一级的屏蔽字应屏蔽它自己以及所有处理优先级比它低的级别,对处理优先级更高的级别置 0。

处理优先级 1 > 4 > 3 > 2屏蔽 1屏蔽 2屏蔽 3屏蔽 4
第 1 级中断服务程序1111
第 2 级中断服务程序0100
第 3 级中断服务程序0110
第 4 级中断服务程序0111

CPU 执行某级服务程序时,若到来的请求未被屏蔽,就暂停当前服务程序(保存断点),转去执行新的服务程序,结束后再返回——这就是中断嵌套。下面的实验按照硬件响应优先级 1 > 2 > 3 > 4 进行模拟,点击屏蔽字中的数字可以修改屏蔽关系,拖动时刻滑块查看任意时刻 CPU 在做什么:

实验多重中断:屏蔽字与程序运行轨迹
中断服务程序屏蔽 1屏蔽 2屏蔽 3屏蔽 4
第 1 级
第 2 级
第 3 级
第 4 级
级别请求时刻服务时间
第 1 级
第 2 级
第 3 级
第 4 级
响应优先级(硬件排队):1 > 2 > 3 > 4
处理优先级(由屏蔽字决定):1 > 4 > 3 > 2
服务程序完成顺序:3 → 1 → 4 → 2
用户程序第 1 级服务第 2 级服务第 3 级服务第 4 级服务✔✔✔✔0510152025303540▼ 请求时刻 ✔ 服务程序结束 蓝线 = CPU 的运行轨迹(不计中断响应和现场保护的时间)
t = 0:CPU 正在执行第 2 级中断服务程序;已发出请求、尚未被响应的:第 3 级。第 2 级发出中断请求。第 3 级发出中断请求。响应第 2 级中断,打断用户程序
综合题(408 真题风格)

设某机有 4 级中断,硬件响应优先级从高到低为 1 → 2 → 3 → 4。现要求把处理优先级改为 1 → 4 → 3 → 2。(1) 写出各级中断服务程序的屏蔽字;(2) CPU 执行用户程序时,同时出现 2、3 级中断请求,15 μs 后又同时出现 1、4 级中断请求。设每级中断服务程序的执行时间都是 10 μs,不计中断响应和保存现场的时间。画出 CPU 执行程序的轨迹,并写出各级中断服务程序的完成顺序。

查看解答

(1) 屏蔽字见上表:第 1 级 1111,第 2 级 0100,第 3 级 0110,第 4 级 0111。

(2) 轨迹(时间单位 μs):

  1. t = 0:2、3 级同时请求,按响应优先级先响应 2 级;2 级服务程序开中断后,它的屏蔽字 0100 没有屏蔽 3 级,于是立即被 3 级打断。
  2. t = 0~10:执行 3 级服务程序(屏蔽字 0110,此时没有其他请求),t ≈ 10 结束,返回 2 级。
  3. t = 15:1、4 级同时请求,2 级的屏蔽字未屏蔽它们,按响应优先级先响应 1 级;1 级屏蔽所有中断,执行到 t = 25 结束,返回 2 级。
  4. 返回 2 级后,4 级请求未被 2 级屏蔽,立即响应 4 级,执行到 t = 35 结束,返回 2 级。
  5. 2 级服务程序继续执行剩余部分,约 t = 40 结束,返回用户程序。

完成顺序为 3 → 1 → 4 → 2,与要求的处理优先级 1 > 4 > 3 > 2 一致(同时到达的请求中,处理优先级高的先完成)。在实验中选择第一个预置即可看到这条轨迹;改用第二个预置(处理优先级与响应优先级相同),完成顺序变为 2 → 1 → 3 → 4。

即时练习

即时练习5 题
点击选项即可作答
  1. 1
    CPU 主频为 50 MHz。某外设以中断方式传送数据,数据率为 20 KB/s(1 K = 1000),每次中断传送 2 B,每次中断(含服务程序和其他开销)需要 500 个时钟周期,则 CPU 用于该外设的时间占比为( )。
  2. 2
    CPU 主频为 200 MHz。某磁盘以 DMA 方式传送,数据率 40 MB/s,每个数据块 4000 B,每次 DMA 预处理和后处理共 1000 个时钟周期,忽略访存冲突,则 CPU 用于该磁盘 I/O 的时间占比为( )。
  3. 3
    某机有 4 级中断,硬件响应优先级为 1 > 2 > 3 > 4。若要求处理优先级为 3 > 1 > 2 > 4,则第 1 级中断服务程序的屏蔽字(依次对应 1、2、3、4 级,1 表示屏蔽)为( )。
  4. 4
    下列关于中断优先级的叙述中,正确的是( )。
  5. 5
    采用 DMA 方式传送一个数据块时,下列工作中不需要 CPU 参与的是( )。
学完了吗?

标记完成后,侧栏会显示进度。进度仅保存在本浏览器中。