适用范围:计算机组成原理 · 第七章 · I/O 系统
考点覆盖:程序查询 / 中断 / DMA · 异步串行通信 · 磁盘存取 · Cache 缺失 · 多体交叉存储
核心思想:先认题型 → 找对公式 → 统一单位 → 按链条推导


快速导航(先看这里!)

题型关键词跳转
程序查询/中断/DMA CPU 占比”占 CPU 时间”、“百分比”、“传输速率 MB/s”第一类
异步串行通信帧 + 中断耗时”异步串行”、“ASCII”、“停止位”、“多少个时钟周期”第二类
磁盘存取时间 + 地址编码”磁道”、“扇区”、“rpm”、“平均存取时间”第三类
Cache 缺失 + 缺页 + 带宽”命中率”、“缺失次数”、“主存带宽”、“缺页率”第四类
多体交叉存储最大带宽”低位交叉”、“体数”、“存取周期”、“最大带宽”第五类

万能基础公式(所有题型共用)

MIPS 与时钟周期换算

符号含义常见单位
CPU 主频Hz / MHz
CPI每条指令平均消耗的时钟周期数
MIPS每秒执行百万条指令
单个时钟周期的时长s / ns

记忆口诀:主频除以 CPI 就是 MIPS,主频倒数就是一个周期。


第一类题型:I/O 方式与 CPU 时间占用率

如何识别这类题?

  • 题目给出:CPU 主频、CPI、外设数据传输速率、I/O 缓冲区大小、中断/查询处理指令数
  • 问:CPU 用于该 I/O 的时间占百分之几?

解题路线图(万能四步法)

第一步:确定单次传输数据量(读清题目,是字节/字/块?)
            ↓
第二步:计算 1 秒内发生的次数 N
         N = 外设传输速率(B/s)÷ 单次传输数据量(B)
            ↓
第三步:计算单次 CPU 开销周期数 C_单次
         程序查询:C = 查询指令数 × CPI
         中断方式:C = 硬件响应周期 + 服务程序指令数 × CPI
         DMA 方式:C = 预处理周期 + 后处理周期(数据搬运不算CPU!)
            ↓
第四步:代入公式求占比
         CPU 占比 = (N × C_单次) / f

核心公式

符号含义
1 秒内发生 I/O 请求(中断/查询/DMA)的总次数
单次 I/O 事件中 CPU 消耗的时钟周期数
CPU 主频(= 1 秒内 CPU 总时钟周期数)

三种方式对比表

I/O 方式传输单位单次 CPU 开销 N 的计算分母
程序定时查询字/字节(缓冲区大小 查询指令数 × CPI
中断方式字/字节(缓冲区大小 + 服务程序指令数 × CPI
DMA 方式数据块(块大小 预处理周期 + 后处理周期

特殊考点:中断方式能否使用?

判断步骤

  1. 算出
  2. (即占比 > 100%)→ 不能使用中断,会发生”中断风暴”导致数据丢失

答题模板:“设备 X 不能采用中断方式。原因:每秒中断次数 次,处理每次中断需 个时钟周期,共需 个时钟周期,超过 CPU 1 秒总周期数 (负荷达 %),CPU 无法及时响应,必然丢失数据。“

易错点

  • 速率单位按十进制(不是 !)
  • 存储容量按二进制(不是 !)
  • DMA 的数据传输时间不算 CPU 开销:数据在硬件总线上跑,CPU 仅计预处理+后处理

经典例题(2009、2018 统考真题)

例1(中断 vs DMA):CPU 主频 ,CPI = 5。外设速率 ,中断方式,传输单位 32 位,中断服务程序 18 条指令,其他开销 2 条指令。

解题过程:

  • 传输单位:
  • 次/秒
  • 周期
  • CPU 占比

例2(定时查询):主频 ,CPI = 4,设备 A 速率 ,32 位缓冲区,每次查询 10 条指令。

  • 最长查询间隔:
  • 周期
  • CPU 占比

第二类题型:异步串行通信帧结构与中断耗时

如何识别这类题?

  • 题目给出:“异步串行通信”、“ASCII 码”、“n 位数据位”、“校验位”、“停止位”
  • 问:一共传输几位?每秒传几个字符?完成任务共用多少时钟周期?

解题路线图

第一步:算帧总位数
         1(起始位,必须加!)+ 数据位 + 校验位(0 或 1)+ 停止位
            ↓
第二步:算外设每秒最多送字符数(最大字符率)
         = 1 / 外设单次准备时间 t_外设
            ↓
第三步(时钟周期换算):
         外设准备周期数 C_外设 = t_外设 × f
            ↓
第四步:分别算"完成任务总周期"和"CPU 占用周期"
         总周期 ≈ N × C_外设  (外设慢,它决定总时间)
         CPU 周期 = N × C_单次中断

核心公式

帧结构

时钟换算

符号含义
外设从启动到数据准备好的物理时间(s 或 ms)
CPU 主频
外设准备一个字符期间,CPU 走过的时钟周期数

并行重叠模型(中断方式的精髓):

符号含义
需要传输的字符总个数
每次中断 CPU 花费的总周期(硬件响应 + 软件执行)
中断响应(隐指令)消耗的周期

关键理解:外设独立准备数据期间,CPU 早已执行完中断服务程序并回去跑主程序了(因为 CPU 重启外设只需极少周期,远小于外设准备时间)。所以”完成任务总时间”由外设决定,“CPU 占用时间”只算中断处理的时间。

中断响应阶段(隐指令)三步骤

遇到”中断响应阶段 CPU 做了什么”的问答题,背这三步:

  1. 关中断:将中断允许触发器置 0,屏蔽后续中断
  2. 保护断点:将 PC(程序计数器)和 PSW(程序状态字)压栈或存入专用寄存器
  3. 引出中断服务程序:根据中断向量找到服务程序入口地址,送入 PC

易混淆:

  • “保护断点”(PC、PSW)→ 硬件自动完成,发生在中断响应阶段
  • “保护现场”(通用寄存器)→ 软件(服务程序开头)完成,发生在中断服务程序执行阶段

易错点

  • 起始位必须有:异步通信帧哪怕题干不提,也必须加 1 位起始位!漏算则全部位数计算出错
  • 区分”总时间”和”CPU 时间”:总时间 = 外设决定(大);CPU 时间 = N × 单次中断周期(小得多)
  • 保护现场 ≠ 保护断点:回答”中断响应阶段”只写”保护断点”,不要写”保存通用寄存器”

经典例题(2016 统考真题)

CPU 主频 ,CPI = 4。设备采用异步串行通信传送 7 位 ASCII 码,有 1 位奇校验和 1 位停止位,外设每准备一个字符需 。中断方式:中断响应 10 个周期,服务程序 20 条指令(第 15 条启动外设),需传 1000 个字符。

第一问:帧位数与最大字符率

第二问:完成任务总周期

第三问:CPU 占用周期


第三类题型:磁盘物理寻址与平均存取时间

如何识别这类题?

  • 题目给出:盘片数、磁道数、扇区数、扇区大小、转速 rpm、平均寻道时间
  • 问:地址字段各几位?平均存取时间?DMA 请求几次?

解题路线图

第一步(地址编码):
         盘面号位数 = ⌈log₂(盘片数 × 记录面数)⌉     ← 注意双面=×2
         磁道号位数 = ⌈log₂(每个盘面的磁道数)⌉
         扇区号位数 = ⌈log₂(每个磁道的扇区数)⌉
            ↓
第二步(存取时间三段式):
         T_周 = 60 / r(秒/转)
         Ts = 题目给出的平均寻道时间
         Tr = T_周 / 2(平均旋转延迟 = 半转时间)
         Tt = T_周 / 每磁道扇区数(单扇区传输时间)
         T_存取 = Ts + Tr + Tt
            ↓
第三步(DMA 请求次数):
         N_DMA = 扇区大小(B)/ 缓冲区大小(B)

核心公式

CHS 地址字段位数

技巧:位数 = ,意思是找最小的 使得
例:20000 条磁道,,所以需要 15 位

平均存取时间三段式

符号含义
寻道时间:磁头臂移动到目标磁道的时间(题目直接给)
平均旋转延迟:磁头等待目标扇区转到正下方的时间(按半周计算)
传输时间:目标扇区完整划过磁头所需时间
磁盘转速(rpm:转/分钟)
每条磁道包含的扇区总数

DMA 请求次数

符号含义
单个扇区的数据容量(Byte)
DMA 接口数据缓冲寄存器大小(Byte)

DMA 总线优先级问答

:DMA 控制器和 CPU 同时需要访问总线,谁优先?

DMA 控制器优先级高于 CPU
原因:磁盘是高速旋转的物理设备,若 DMA 请求得不到及时响应,缓冲区数据会被后续到达的数据覆盖,造成不可挽回的数据丢失;而 CPU 延迟访问总线只会暂停流水线几个周期,不会导致数据错误。

易错点

  • 双面盘片要乘 2:“4 个双面盘片”= 8 个盘面, 位(不是 2 位!)
  • 不要漏加:很多人只写"",忘了加单扇区传输时间 (虽然小但必须写)
  • 位数用 ,不是直接除以 10:20000 不等于 15,要找 的最小

经典例题(2022 统考真题)

4 个双面盘片,每盘面 20000 磁道,每磁道 500 扇区,每扇区 512 B,转速 7200 rpm,平均寻道时间 5 ms。

地址字段

  • 盘面号: 面,
  • 磁道号:
  • 扇区号:

平均存取时间

DMA 请求次数(64 位缓冲区 = 8 B):


第四类题型:Cache 缺失、主存带宽与缺页/DMA 综合

如何识别这类题?

  • 题目给出:MIPS 或主频+CPI、每条指令平均访存次数、Cache 命中率、块大小
  • 追加:缺页率、页面大小、磁盘缓冲寄存器大小
  • 问:缺失次数?主存带宽?缺页次数?DMA 请求次数?

解题路线图(分层推导链条)

主频 f + CPI
    → MIPS = f / (CPI × 10⁶)
    → 每秒执行指令数 I = MIPS × 10⁶
    → 每秒访存次数 = I × n_访存
    → 每秒 Cache 缺失次数 N_miss = 每秒访存次数 × (1 - H)
    → 主存最小带宽 B_主存 = N_miss × S_block(Byte/s)
    → 每秒缺页次数 N_缺页 = N_miss × P_缺页
    → 每秒 DMA 请求次数 N_DMA = N_缺页 × (S_page / W_buf)

核心公式(链式推导,每步都要写)

MIPS

每秒 Cache 缺失次数

符号含义
平均每条指令访问存储器的次数
Cache 命中率(如 99% = 0.99)
Cache 缺失率

主存最小带宽(满足 Cache 缺失时的数据调入需求):

符号含义
Cache 与主存之间交换的块大小(Byte)

每秒缺页次数

关键:缺页率的基数是”Cache 缺失次数”(即访问主存的次数),不是总访存次数!

每秒 DMA 请求次数(缺页导致的磁盘读入):

符号含义
缺页率(访问主存时缺页的概率)
虚存页面大小(Byte,按二进制:
磁盘 I/O 接口数据缓冲寄存器大小(Byte)

易错点

  • 缺页率计算基数错误(高频错误!):缺页发生在”访问主存”时,即 Cache Miss 之后,所以 ,而不是乘以总访存次数
  • 块大小和页面大小单位:均为存储容量,用二进制(
  • 带宽和速率:MB/s 等速率单位用十进制(

经典例题(2012 统考真题)

CPU 主频 ,CPI = 4,平均每条指令访存 1.5 次,Cache 块大小 16 B,Cache 命中率 99%,总线宽度 32 位。缺页率 ,页面 4 KB,磁盘缓冲区 32 位。

推导链:


第五类题型:多体低位交叉存储最大带宽

如何识别这类题?

  • 题目给出:体数 、总线宽度 、存储体存取周期
  • 问:主存最大带宽?

解题思路

多体低位交叉存储器采用流水线方式 个存储体依次错开 时间启动,每隔 就能输出一个字,效果等同于存取周期缩短到

体0:[---T---]
体1:    [---T---]
体2:        [---T---]
体3:            [---T---]
         ↑↑↑↑
         每隔 τ = T/m 就有一个字输出

核心公式

符号含义
存储体数(模块数)
总线宽度 / 单模块每次输出字长(Byte)
单个存储体的存取周期(ns)
各模块顺序启动的时间间隔(
主存流水线最大带宽(Byte/s)

记忆口诀:带宽 = 总线宽度 ÷ 模块启动间隔 = m 个模块宽度 ÷ 一个完整存取周期

经典例题(2012 统考真题)

4 体低位交叉存储,每 周期启动一体,存取周期 ,总线宽度 32 位。


全局总结:看到题目这样想

看到 "传输速率" + "CPU 占比"
    → 第一类:1秒基准法,N × C_单次 / f

看到 "异步串行" + "ASCII" + "停止位"
    → 第二类:先数帧位数(别忘起始位!),再分别算总时间和CPU时间

看到 "磁道" + "扇区" + "rpm" + "存取时间"
    → 第三类:三段式 Ts + Tr + Tt,地址位数用 log₂ 向上取整

看到 "命中率" + "缺失次数" + "主存带宽"
    → 第四类:链式推导,缺页基数是 Cache 缺失次数

看到 "低位交叉" + "体数" + "最大带宽"
    → 第五类:B_max = m×W / T

关键公式速查表

题型核心公式注意事项
MIPSf 单位为 Hz
I/O CPU 占比速率用十进制 M
最长查询间隔
串行帧位数起始位必加
任务总周期外设决定
CPU 占用周期仅中断处理
磁道/扇区位数二进制向上取整
旋转延迟半周
传输时间
Cache 缺失次数
主存带宽
缺页次数基数是缺失次数!
DMA 请求次数
交叉存储带宽W 单位统一为 Byte

高频易错点汇总

错误类型错误做法正确做法
速率单位
容量单位
帧位数漏起始位7+1+1=9 位1+7+1+1=10 位
双面盘片4 片=4 盘面4 片=8 盘面
缺页率基数用总访存次数算用 Cache 缺失次数算
磁盘地址位数直接用 log 10
DMA CPU 开销包含数据传输时间仅预处理+后处理
存取时间漏 TtTs + TrTs + Tr + Tt
中断能否使用定性说”太快了”算出占比>100% 再下结论
保护断点vs保护现场混淆两个阶段断点=硬件=响应阶段;现场=软件=服务程序