首页/计算机组成原理/I/O系统/IO控制方式对比 🔗 在 Obsidian 中打开
计算机组成原理 · I/O系统

IO控制方式对比

难度 ★★★重要度 ★★★★★ 考查频率 低题型 选择 / 综合 程序查询中断DMA通道
速查
核心问题:CPU 如何参与数据传输。程序查询(CPU 忙等,效率最低)→ 程序中断(IO 通知 CPU)→ DMA(设备直接访存)→ 通道(专用 IO 处理器,效率最高)。

四种 IO 控制方式概述

方式CPU 参与度数据传输单位效率
程序查询方式最高字/字节最低
程序中断方式字/字节较低
DMA 方式数据块较高
通道方式最低一组块最高

程序查询方式

CPU 主动轮询 I/O 设备状态寄存器,检测是否准备好。

while (设备未准备好) { 读取状态寄存器; }
从数据寄存器读取数据;
  • CPU 全程参与,大量时间浪费在轮询
  • 硬件最简单,无需额外控制器
  • 实时性差,适用于低速设备

程序中断方式

CPU 发出 I/O 命令后继续执行其他程序,设备准备好后主动发中断通知 CPU

CPU:发送IO命令 → 继续执行其他程序
    ← 中断!→ 保存现场 → 读取数据 → 恢复现场 → 继续

中断频率:$f_{中断}=B$(设备速率 $B$ 字节/秒,每字节中断一次),CPU 用于 IO 比例 $\eta = B \times t$。

特点CPU 不必等待;每传一个字/字节中断一次,中断开销大;适合低速设备。

DMA 方式

CPU 将 I/O 控制权交给 DMA 控制器,DMA 直接在 I/O 设备与主存间传输,不经过 CPU。

CPU:设置 DMA(方向,地址,字节数) → 继续执行
DMA:自行控制传输 → 完毕 → 发中断通知 CPU

DMA 控制器:MAR(内存地址)、WC(字计数)、DR(数据缓冲)、控制/状态寄存器、中断逻辑。三种总线使用方式:停止 CPU 访存 / 周期挪用 / 交替访问。

通道方式

通道是专用的 I/O 处理器,有自己的指令系统(通道指令),可独立执行 I/O 程序。

类型传输单位复杂度并发性
字节多路通道字节多个低速设备并行
数组多路通道数据块多个高速设备交替
选择通道数据块一次只服务一个设备

性能计算示例

例1:程序查询(500MHz,查 100 周期,1MB/s)

每次查询 = 100/500MHz = 200ns
每秒查询 10^6 次 → CPU 占用 10^6 × 200ns = 20%

例2:中断方式(1MB/s,每次 5μs)

每秒 10^6 次中断 × 5μs = 500% → 不可行!需 DMA 或缓冲

例3:DMA(1MB/s,4KB 块,初始化+中断 20μs)

每秒 256 块 × 20μs = 5.12ms/s = 0.51% CPU 占用

例4:周期挪用影响(指令 4 周期,挪用 1 周期/字节,1KB)

1024 次挪用 × 2ns = 2.048μs 延迟
CPU 被延迟比例 ≈ 20%

四种方式对比总表

对比项程序查询程序中断DMA通道
CPU 参与全程每字开始+结束启动+完成
传输单位字节字节数据块一组块
并行性
CPU 效率最低最高
硬件复杂度最低
适用设备低速低速高速各类
灵活性最高最高

记忆卡片

查询/中断/DMA 核心区别?
查询=CPU轮询等待;中断=IO通知CPU;DMA=设备直接访问内存
DMA 为何比中断高效?
中断每字节中断一次;DMA 每数据块中断一次
DMA 三种总线方式?
停止CPU访存 / 周期挪用 / 交替访问
通道与DMA主要区别?
通道有指令系统可执行复杂IO程序;DMA只能按CPU设定参数传输

交互动画 · 四种方式的数据通路

CPU、I/O、内存 三方的参与关系(点亮 = 参与) CPU I/O 设备 主存
选择一种方式,查看 CPU / I/O / 内存 的参与
点击上方按钮开始
程序查询:CPU↔IO↔内存全参与(CPU忙等);中断:CPU经IO与内存;DMA:IO↔内存直连;通道:通道替代CPU管理IO↔内存。

相关知识点

interrupt-and-dma interrupt-response-process dma-controller-detail

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。