直接内存存取(直接内存存取方式DMA)

频道:电子元器件 日期: 浏览:308

直接内存存取

本文内容来自于互联网,分享直接内存存取(直接内存存取方式DMA)

直接内存存取(Direct Memory Access,DMA)是计算机科学中的一种内存访问技术。它允许某些电脑内部的硬件子系统(电脑外设),可以独立地直接读写系统内存,而不需绕道CPU。在同等程度的CPU负担下,DMA是一种快速的数据传送方式。很多硬件的系统会使用DMA,包含硬盘控制器、绘图显卡、网络卡和声卡。



直接内存存取Top

DMA 是所有现代电脑的重要特色,他允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量 中断 负载。否则,CPU 需要从 来源 把每一片段的资料复制到 暂存器,然后把他们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。

DMA 传输重要地将一个内存区从一个装置复制到另外一个。当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存去。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统 算法和网络是很重要的。

举个例子,PC ISA DMA 控制器拥有 8 个 DMA 通道,其中的 7 个通道是可以让 PC 的 CPU 所利用。每一个 DMA 通道有一个 16位元 位址暂存器和一个 16 位元 计数暂存器。要初始化资料传输时,装置驱动程式一起设定 DMA 通道的位址和计数暂存器,以及资料传输的方向,读取或写入。然后指示 DMA 硬件开始这个传输动作。当传输结束的时候,装置就会以中断的方式通知 CPU。

直接内存存取(直接内存存取方式DMA)

"分散-收集" (Scatter-gather) DMA 允许在一次单一的 DMA 处理中传输资料到多个内存区域。相当于把多个简单的 DMA 要求串在一起。再一次,这个动机是要减轻 CPU 的多次输出输入中断和资料复制任务。

DRQ 意为 DMA 要求;DACK 意为 DMA 确认。这些符号一般在有 DMA 功能的电脑系统硬件概要上可以看到。他们表示了介于 CPU 和 DMA 控制器之间的电子讯号传输线路。



Cache coherency problemTop

DMA 会导致 cache 一致性问题。想像 CPU 带有 cache 与外部内存的情况,DMA 的运作则是去存取外部内存,当 CPU 存取外部内存 X 位址的时候,暂时先将新的值写入 cache 中,但并未将外部内存 X 位址的资料更新,若在 cache 资料尚未更新到外部内存前发生了 DMA,则 DMA 过程将会读取到未更新的资料。

直接内存存取(直接内存存取方式DMA)

相同的,如果外部装置写入新的值到外部内存内,则 CPU 若存取 cache 的值则会存取到尚未更新的资料

这些问题可以用两种方法来解决:

Cache-coherent system 以硬件方法来完成,当外部装置写入内存时以一个信号来通知 cache 控制器某内存位址的值已经过期或是应该重新更新资料。Non-coherent system 以软件方法来完成,OS 必须确认 cache 读取时,DMA 程序已经开始或是禁止 DMA 发生。

第二种的方法会造成 DMA 的系统负担。


关键词:存取内存直接