(三)IO方式
1. 概念
- IO 控制方式:CPU实现与 IO 设备进行数据交换的方式;
- CPU和处设之间交换数据,实质上是通过IO端口进行的;
- 核心思想:尽可能减少 CPU 对于 IO 过程的参与,避免低速 IO 设备降低 CPU 利用率;
- 常见的 5 种 IO 控制方式
- 程序查询
- 程序中断
- 直接内存访问 DMA;
- IO 通道;
- IO 处理机;
2. IO 控制方式
2.1. 程序查询
概念:完全通过 CPU 执行 IO 程序来控制主机和外围设备之间的信息传送;
方法:在用户的程序中插入一段由 IO 指令和其他指令所组成的程序,直接控制外设工作;
过程
核心三条指令:查询 + 传送数据 + 转移;
- 查询指令:查询 IO 设备状态;
- 传送数据:IO 设备就绪时,进行数据交换;
- 转移指令:IO 设备未就绪时,转回查询指令继续循环;
特点
- CPU 与 IO 设备串行执行:CPU 一旦启动 IO 设备便停止原程序,不断查询 IO 设备状态和传输数据;
- 系统效率低,性能较差,CPU 利用率低;
本质是 CPU 和 IO 设备同步通信;
2.2. 程序中断

流程
- 在用户程序中插入一条指令,发出 START 信号启动外围设备,然后机器继续执行程序;
- 当外围设备完成数据传送的准备后,便向 CPU 发出中断请求(INT)信号;
- CPU 收到中断请求后,按中断系统规则处理中断和返回;
中断服务程序:通常是传输一个字或一个字节数据,传输完后中断完成,CPU 可返回;
在 IO 设备准备数据未触发中断时,CPU 和 IO 设备是并行工作的;
实例分析:CPU 和打印机的数据交换

- 由中断服务程序特性,传输全部数据要触发多次中断;
- 宏观上,CPU 和打印机(IO 设备)并行工作;
- 微观上,CPU 中断正在运行的程序来完成 IO 操作;
特点
- 每次传输单位为 1 字或 1 字节;
- 每传输一个单位都要触发一次中断;
- 限制因素:总线和 IO 端口;
- 除启动 IO 设备和传输数据是串行外,CPU 和 IO 设备并行工作,提高 CPU 利用率和系统效率;
- 完成数据传输的方式为:CPU 响应中断;
- 单次传输数据量小,数据量较大时,导致中断触发次数多,会消耗较多 CPU 资源;
- 对于存取速度较快的 IO 设备、按块存取的 IO 设备(如 SSD),此方式效率低;
2.3. 直接存储器访问 DMA

概念:让 IO 设备可以直接和主存交换数据,而不必每次都经过 CPU;
DMA 控制器(DMAC):实现 DMA 接口的核心功能,由三大部分组成;
DMA 控制器的组成
- DMA 控制逻辑
- 向 CPU 发出 DMA 申请;
- 处理总线控制权的转交;
- 管理系统总线,控制数据传输;
- 确定传输数据的首地址和长度。若出错,还需负责修正;
- DMA 传输完成时,发出完成信号;
- 寄存器:设置四类寄存器
- 命令/状态寄存器 CR:存放 CPU 发出的 IO 命令、控制信息或者 IO 设备的状态;
- 地址寄存器 MAR
- 外部数据输入时,存放起始目标地址;
- 内部数据输出时,存放起始源地址;
- 数据寄存器 DR:暂存正在交换的数据;
- 数据计数器 DC:存放本次操作要读/写的字数或字节数;
- 中断机构:负责在一个数据块传输完毕后触发中断;
- CPU 不能主动感知数据传输完毕与否,必须要靠中断机构触发中断;
- DMA 控制逻辑
DMA 本质上是和 CPU 的异步通信;
过程:预处理,数据传输,后处理;
1)预处理:需要 CPU 执行 IO 指令;
- 设置数据传输方向;
- 主存起始地址 > DMA;
- IO 设备地址 > DMA;
- 传输字数/字节数 > DMA;
- 启动 IO 设备;
2)数据传输:DMAC 控制 IO 设备自动完成;

- DMAC 为纯硬件实现,CPU 无需执行任何指令;
- 处理完成后,DMAC 向 CPU 触发中断;
3)后处理:CPU 运行中断服务程序;
- CPU 响应中断,进入中断服务程序;
- 数据校验;
- 决定是否继续使用 DMA;
- 因为 DMA 一次是传一个数据块,若有多个数据块,可能需要连续多次 DMA;
- 检测传送过程是否正确完成,否则转入诊断程序;
访存冲突:CPU 和 DMA 控制器同时需要访问主存
- DMA 优先级高于 CPU 访存;
- 原因
- 一些外设实时性强,如网卡,声卡等,必须及时将数据传入主存,否则会丢数据;
- CPU 的缓存机制和流水线机制使得其有一定容错能力,可以短暂停止执行而不会丢失数据;
DMA 的数据交换方式
暂停 CPU:DMA 访问主存时,暂停 CPU 访存和执行对应程序,DMA 完成后才交还控制权;

- 降低了 CPU 对内存的利用率;
交替访问:划分主存存储周期,专供 CPU 和 DMA 使用;

- 实际情况下,CPU 访存频率远高于 DMA 的,导致 CPU 利用率显著降低,系统效率降低;
周期窃取/挪用

- 原理
- DMA 访存时,CPU 可能为:(1) 不访存,(2) 正在访存;
- DMA 访存时,受限于总线和相关寄存器,每个总线周期也只能读写一个字/字节;
- DMA 访存频率低于 CPU 的;
- 实现
- 按**机器周期(CPU/存取周期)**对主存分时;
- 若 CPU 不访存,则 DMA 获得主存控制权,可进行访存;
- 若 DMA 要求访存时,CPU 正在访存,则该周期结束后,CPU 将将来的 1~2 个周期让出给 DMA;
- 若 DMA 和 CPU 同时要求访存,则 CPU 直接让出 1~2 个周期给 DMA;
- DMA 通常都是采用周期窃取方式访存;
- 原理
DMA 工作过程
- 1)要传输数据时,IO 设备向 DMAC 发送 DMA 请求;
- 2)DMAC 接收 IO 设备请求,向 CPU 发出总线占用请求;
- 3)CPU 响应总线请求,发出总线响应信号,DMA 接管总线,进入 DMA 周期;
- 4)DMAC 确定数据的主存地址和长度,自动计算和修改地址计数和长度计数;
- 5)DMAC 确定数据传输方向后,发出读/写和其他控制信号,进行数据传输;
- 6)DMA 结束后,DMA 中断机构触发中断;
- 7)由 CPU 决定是否继续使用 DMA;
DMA 特点
- DMA 的基本单位是数据块(实际传输时,每个机器周期还是传一个字/字节);
- 数据直接由 IO 设备进入内存,或直接读出到 IO 设备;
- 仅在一个数据块传输的开始和结束时,CPU 进行干预和控制。其余过程由 DMAC 自动完成;
2.4. DMA 和程序中断方式对比
| 程序中断 | DMA | |
|---|---|---|
| 控制器 | 程序 | 硬件 DMAC |
| CPU 响应时机 | 指令周期完 | 机器/存取周期完 |
| 异常处理 | 能 | 不能 |
| 中断时机 | 每单元数据 | 后处理 |
| 优先级 | 低 | 高 |
2.5. IO 通道

- 概念:通道控制方式是DMA方式的进一步发展,实质上,通道也是实现外设和主存之间直接交换数据的控制器;
- 作用:I/O通道方式可进一步减少 CPU 对 IO 过程的干预;
- 通道把对一个数据块的读写为单位的干预,减少为对一组数据块的读读写及有关的控制和管理为单位的干预;
- IO 通道 v.s. DMA
- DMA 纯专用硬件,IO 通道是一个特殊功能处理器,具有自己的指令集和程序,通过执行一个通道程序实现对数据传送的控制;
- 通道具有更强的独立处理数据 IO 的功能;
- DMA 控制器通常只能控制一台或少数几台同类设备,通道则可以同时控制许多台同类或不同类的设备;
- DMA 纯专用硬件,IO 通道是一个特殊功能处理器,具有自己的指令集和程序,通过执行一个通道程序实现对数据传送的控制;
- 基本功能
- 接受 CPU 的 IO 指令,按指令要求与指定的外设进行联系;
- 从主存取出属于该通道程序的通道指令,经译码后向设备控制器和设备发送各种命令;
- 实施主存和外设间的数据传送;
- 工作过程
- 使用访管指令进入管理程序,通过管理程序组织和运行一个通道程序,启动通道;
- 通道执行CPU为它组织的通道程序,完成指定的工作;
- 通道程序结束后向 CPU 发中断,CPU响应这个中断请求后再次调用管理程序对中断请求进行处理;
- 注意:通道方式会触发两次中断,进入访管程序也是中断,称为访管中断;
习题
- DMA 接口采用周期窃取方式传输。设 1 字符大小 1B,DMA 最大批量 400B,存取周期 100ns,中断处理耗时 5us,字符 IO 设备传输速率 9600bps。设字符之间连续传输无间隙,忽略预处理时间,则每秒中 DMA 因数据传输需要占用 CPU 的时间为多少?如果完全采用程序中断,结果又为多少?
- 答案:135us,6000us;
- 解析:9600bps = 1200Bps,即每秒传 1200 字符;
- DMA:
; - 后处理时中断一次,每 400B 为一块,每秒 3 块;
- 每传 1 字符需要窃取一个周期,每秒 1200 字符;
- 中断方式:每传 1 字符中断一次,所以为
;
- DMA:
- 下列选项中,在 IO 总线上传输的信息包括
- Ⅰ IO 接口命令字;
- Ⅱ IO 接口状态字;
- Ⅲ 中断类型号;
- A. 仅Ⅰ;
- B. 仅Ⅰ,Ⅱ;
- C. 仅Ⅱ,Ⅲ;
- D. 全部;
- 答案:D
- 解析:注意 IO 总线一般是复用的;
- CPU 主频 500 MHz,外设数据传输速率 5MB/s,使用 DMA 方式,DMA 块大小 5KB,且预处理和后处理总开销为 500 时钟周期。不考虑 DMA 和 CPU 的访存冲突,则 CPU 用于该外设 IO 的时间占整个 CPU 时间的百分比为?
- 答案:
- 解析:不考虑 DMA 和 CPU 访存冲突,即不考虑周期窃取,DMA 传输每个字的总线周期不记为 CPU 时间;
- 速率 5MB/s,块大小 5KB,则每秒 1K 块;
- 每块开销 500 时钟周期,故总开销 1K×500 = 500K 时钟周期;
- 每秒 500M 个时钟周期,则百分比为 500K/500M,约为 0.1%;
- 拓展:传输单位 32 位,若考虑周期窃取,计算新的时间百分比;
- 考虑周期窃取,注意传输单位 32 位即 4B,则每秒周期数 500K + 5M/4
- 则百分比 (500K+5M/4)/500M,约为 0.12%;
- 下列说法错误的是
- Ⅰ DMA 优先级高于程序中断的;
- Ⅱ 程序中断方式需要保护现场,DMA 不需要;
- Ⅲ 程序中断方式触发中断是报告传输结束,而 DMA 是为了传输数据;
- A. Ⅱ;
- B. Ⅱ,Ⅲ;
- C. Ⅲ;
- D. Ⅰ,Ⅲ;
- 答案:C
- 解析:
- Ⅱ:说的是进行数据传输时是否需要保护现场,而不是二者都触发中断时。因为程序中断方式触发中断 = 数据传输,因此需要保护现场,而 DMA 数据传输时和 CPU 无关,所以不需要;
- Ⅲ:说反了;