7.3 DMA 方式

DMA 方式的特点;DMA 控制器的组成与功能;DMA 的传送过程(预处理、数据传送、后处理)与三种传送方式(停止 CPU 访存、周期挪用、交替访存);DMA 方式与中断方式的比较;通道控制方式与 I/O 处理机;各种 I/O 方式下 CPU 时间占用率的计算。

考查要求 ★★★ 重点掌握 DMA 的特点DMA 控制器的组成预处理/数据传送/后处理周期挪用DMA 与中断的区别通道与 I/O 处理机CPU 时间占用率

DMA 方式的特点

在中断方式下,每传送一个字(或字节)都要 CPU 执行一次中断服务程序,对磁盘、网卡这类高速、成批传送数据的设备来说开销太大。DMA(Direct Memory Access,直接存储器存取)方式在主存与外设之间开辟一条直接的数据通路,数据传送完全由硬件(DMA 控制器)控制,不经过 CPU,也不需要保护和恢复 CPU 的现场。

  • 主存与 CPU 的固定联系脱钩,主存既可以被 CPU 访问,也可以被外设直接访问;
  • 数据块传送时,主存地址的确定、传送字数的计数等都由硬件电路直接实现;
  • 主存中要开辟专用的缓冲区,及时供给和接收外设的数据;
  • 传送速度快,CPU 与外设并行工作,提高了系统效率;
  • 传送开始前要通过程序进行预处理,结束后要通过中断方式进行后处理。

DMA 控制器的组成

部件作用
主存地址计数器 AR存放要交换数据的主存地址,每传送一个字自动加 1
传送长度计数器 WC记录传送数据的长度(字数),每传送一个字减 1,计数到 0(溢出)时表示数据块传送完毕,自动发出中断请求
数据缓冲寄存器 DR暂存每次传送的数据
DMA 请求触发器设备准备好数据后使它置位,向控制/状态逻辑发出 DMA 请求
控制/状态逻辑指定传送方向、修改传送参数,协调 DMA 请求信号与 CPU 响应信号
中断机构数据块传送完毕后向 CPU 提出中断请求

DMA 控制器的主要功能:接受外设发出的 DMA 请求,并向 CPU 发出总线请求;CPU 响应后发出总线响应信号,DMA 控制器接管总线控制权;确定传送数据的主存地址及长度,并能自动修改;规定传送方向,发出读写控制信号,执行数据传送;向 CPU 报告 DMA 操作的结束。

DMA 的传送过程

DMA 的数据传送分为三个阶段:

  1. 预处理:由 CPU 执行几条 I/O 指令完成。测试设备状态,向 DMA 控制器写入主存起始地址、传送字数、传送方向等参数,启动设备。然后 CPU 继续执行原来的程序。
  2. 数据传送:设备准备好数据后向 DMA 控制器发出 DMA 请求,DMA 控制器再向 CPU 申请总线。获得总线后由 DMA 控制器控制数据在主存与外设之间传送。以数据块为单位传送时,这一循环也是由 DMA 控制器(硬件) 实现的,而不是由 CPU 执行程序实现的。
  3. 后处理:数据块传送完毕后,DMA 控制器向 CPU 发出中断请求,CPU 执行中断服务程序做结束处理:校验送入主存的数据是否正确、测试传送过程是否出错、决定是否继续用 DMA 传送其他数据块等。
动画演示DMA 传送过程:预处理 → 数据传送 → 后处理
系统总线(CPU 控制)CPU执行程序主存100010011002DMA 控制器(接口)AR 主存地址WC 字计数DR 数据缓冲中断机构控制 / 状态逻辑DMA 请求触发器外设(如磁盘)DREQDACK数据HRQ(总线请求)HLDA(总线响应)INTR(中断请求)
当前有效的信号 / 部件总线上的数据传送
1/12DMA 方式在主存与高速外设之间开辟一条直接的数据通路:数据传送由 DMA 控制器控制,不经过 CPU。下面传送一个 3 个字的数据块(外设 → 主存)

DMA 的传送方式

DMA 传送数据不经过 CPU,但当外设与 CPU 同时要访问主存时就会发生冲突。DMA 控制器与 CPU 通常采用以下三种方式分享主存:

停止 CPU 访存CPUCPUCPUDMADMADMADMADMADMACPUCPUCPUDMA 传送整块数据期间,CPU 一直不能访存周期挪用CPUCPUDMACPUCPUCPUDMACPUCPUDMACPUCPUDMA 每传送一个字挪用一个存储周期交替访存CPUDMACPUDMACPUDMACPUDMACPUDMACPUDMA每个 CPU 周期分成两半,CPU 和 DMA 轮流访存→ 时间(每格一个存储周期)
DMA 传送方式:谁在使用主存
  1. 停止 CPU 访存:DMA 控制器向 CPU 发出停止信号,CPU 脱离总线、停止访存,直到一整块数据传送结束才把总线交还给 CPU。控制简单,适合数据传输率很高的设备成组传送;但 DMA 访存期间 CPU 基本处于不工作状态,CPU 的效能没有充分发挥。
  2. 周期挪用(周期窃取):外设每传送一个数据,就挪用一个(或几个)存储周期,传送完立即释放总线。若外设请求访存时 CPU 不在访存,二者不冲突;若 CPU 正在访存,要等当前存储周期结束后 CPU 才让出总线;若二者同时请求访存,I/O 访存的优先级高于 CPU,因为外设不立即访存就可能丢失数据。周期挪用既实现了 I/O 传送,又较好地发挥了主存与 CPU 的效率,是最常用的方式;但每挪用一个周期,DMA 接口都要申请、建立和归还总线控制权。适用于外设读写周期大于主存存取周期的情况。
  3. DMA 与 CPU 交替访存:适用于 CPU 的工作周期比主存存取周期长的情况,例如 CPU 工作周期为 1.2 μs、主存存取周期小于 0.6 μs,就可以把一个 CPU 周期分为 C1、C2 两半,C1 专供 DMA 访存,C2 专供 CPU 访存。这种方式不需要申请、建立和归还总线使用权,总线使用权由 C1、C2 分时控制;但硬件逻辑更复杂。

DMA 方式与中断方式的比较

中断方式DMA 方式
数据传送由程序控制(CPU 执行中断服务程序)由硬件控制(DMA 控制器)
请求的是CPU 的处理时间总线的使用权
响应时机一条指令执行结束后一个**总线周期(存储周期)**结束后,指令执行过程中也可以响应
是否中断现行程序是,要保护和恢复现场否,CPU 只是让出总线,不需要保护现场
中断请求的用途传送数据数据块传送结束后的后处理
优先级低于 DMA 请求高于中断请求
CPU 与外设的并行外设准备数据时并行,传送数据时 CPU 参与传送数据时 CPU 也可以并行工作(仅访存冲突时暂停)
适用场合所有设备,特别是低速设备;还能处理异常事件高速设备的成批数据传送

通道控制方式与 I/O 处理机

DMA 方式进一步发展,就是通道和 I/O 处理机方式,CPU 对 I/O 的干预更少。

通道是一个具有特殊功能的处理器,它有自己的指令(通道指令)和程序(通道程序),通过执行通道程序来控制数据的传送。与 DMA 控制器相比:DMA 控制器用专门设计的硬件逻辑控制数据传送,通常只能控制一台或少数几台同类设备;通道则通过执行通道程序进行控制,一个通道可以同时控制许多台同类或不同类的设备,独立处理 I/O 的能力更强,还能用指令灵活地改变传送的顺序。

通道完成一次数据传输的过程分为三步:

  1. 用户程序用访管指令进入操作系统的管理程序,由 CPU 通过管理程序组织一个通道程序,并启动通道;
  2. 通道执行 CPU 为它组织的通道程序,完成指定的数据输入/输出工作,期间 CPU 可以执行其他程序;
  3. 通道程序结束后向 CPU 发出中断请求,CPU 响应后再次调用管理程序进行处理。

按数据传送方式,通道分为字节多路通道(多台低速设备以字节为单位交叉传送)、选择通道(一段时间内只为一台高速设备服务,以数据块为单位传送)和数组多路通道(多台高速设备以数据块为单位交叉传送)。

I/O 处理机(外围处理机)的结构更接近一般的处理机,甚至就是一台小型通用计算机。它不仅能完成通道的 I/O 控制,还能完成码制变换、格式处理、数据块的检错与纠错等操作,进一步减轻了 CPU 的负担。

计算 CPU 用于 I/O 的时间

三种方式下 CPU 用于 I/O 的时间占比都可以这样计算:

占比=每秒 CPU 介入的次数×每次介入的时钟周期数CPU 主频\text{占比} = \frac{\text{每秒 CPU 介入的次数} \times \text{每次介入的时钟周期数}}{\text{CPU 主频}}

区别在于 CPU 介入的频率:查询和中断方式每传送一个数据单位就介入一次,DMA 方式每传送一个数据块才介入一次。

计算器CPU 用于 I/O 的时间占比
方式每秒 CPU 介入次数每次开销(时钟)每秒占用时钟占 CPU 时间
程序查询125 K次10012.5 M
2.5%
程序中断125 K次10012.5 M
2.5%
DMA100 次50050 K
0.01%
  • 程序查询:为不丢失数据,每秒至少查询 125 K次(每次 4 B)
  • 程序中断:每传送 4 B 中断一次,每次 (18 + 2) × 5 = 100 个时钟
  • DMA:每传送 5000 B(一个数据块)CPU 只参与一次预处理和后处理
占比 = 每秒 CPU 介入的次数 × 每次的时钟周期数 ÷ CPU 主频。把传输率调到 5 MB/s 试试:中断方式的开销随传输率线性增长,DMA 方式只与数据块数有关。
例题:中断方式与 DMA 方式(2009 年真题)

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

查看解答

(1)每秒中断 0.5 MB / 4 B = 1.25 × 10⁵ 次;每次中断需 (18 + 2) × 5 = 100 个时钟周期;占比 = 1.25 × 10⁵ × 100 / (500 × 10⁶) = 2.5%。

(2)每秒 DMA 传送 5 MB / 5000 B = 1000 次;占比 = 1000 × 500 / (500 × 10⁶) = 0.1%。

在上面的计算器中输入这些参数即可验证。

即时练习

即时练习5 题
点击选项即可作答
  1. 1
    下列关于中断 I/O 方式和 DMA 方式比较的叙述中,错误的是( )。
  2. 2
    下列关于 DMA 方式的叙述中,正确的是( )。
    Ⅰ. DMA 传送前由设备驱动程序设置传送参数 Ⅱ. 数据传送前由 DMA 控制器请求总线使用权 Ⅲ. 数据传送由 DMA 控制器直接控制总线完成 Ⅳ. DMA 传送结束后的处理由中断服务程序完成
  3. 3
    在 DMA 传送方式中,「周期挪用」是指( )。
  4. 4
    DMA 控制器与 CPU 同时请求访问主存时,通常( )。
  5. 5
    下列关于 DMA 方式的叙述中,错误的是( )。
学完了吗?

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