📌  相关文章
📜  DMA传输模式

📅  最后修改于: 2022-05-13 01:57:01.538000             🧑  作者: Mango

DMA传输模式

在本文中,我们将尝试了解与 DMA(直接内存访问)相关的详细信息,例如 DMA 到底是什么或它是如何工作的,并且我们还将进一步了解 DMA 传输的各种模式(如突发模式和其他模式)。在直接进入与 DMA 传输模式相关的细节之前,让我们首先尝试了解 DMA 到底是什么,以及这个 DMA 是如何实际工作的。

直接内存访问(DMA):
DMA 基本上代表直接内存访问。这是一个无需 CPU 即可在内存和 IO(输入/输出)设备之间传输数据的过程,也可以说在数据传输过程中无需 CPU 参与。

DMA的工作:
以下要点列表将简要描述 DMA 及其工作如下。

  • 对于 DMA,您基本上需要一个称为 DMAC(直接内存访问控制器)的硬件,这将有助于直接在内存和 IO 设备之间进行数据传输的整个过程。
  • 首先是 IO 设备向 DMA 控制器发送 DMA 请求,然后进一步的 DMAC 设备向 CPU 发送 HOLD 信号,通过该信号向 CPU 询问传输数据时需要的几个信息。
  • 然后,CPU 在数据传输之前与 DMAC 共享两个基本信息,它们是:起始地址(应执行数据传输的内存地址)和数据计数(要传输的字节或字数)。
  • CPU 然后将 HLDACK(保持确认)发送回 DMAC,说明现在 DMAC 可以成功传递信息。
  • 然后进一步的 DMAC 将 DMA ACK(DMA 确认)共享给 IO 设备,最终让 IO 设备以直接有效的方式访问或传输内存中的数据。

DMA传输模式:
现在,在对 DMA 及其工作有了一些简要了解之后,是时候分析 DMA 传输模式了。

  • 在 DMA 传输期间,CPU 只能执行那些不需要访问系统总线的操作,这意味着大多数 CPU 将处于阻塞状态。
  • CPU 保持阻塞状态多长时间,或者我们可以说 CPU 将控制系统总线的 DMAC 的时间实际上取决于以下 DMA 传输模式,之后 CPU 将从DMAC。

模式一:
突发模式 -

  • 在这种模式下,数据突发(整个数据或包含数据的块突发)在 CPU 从 DMAC 取回对总线的控制权之前被传输。
  • 这是最快的 DMA 传输模式,因为会同时传输大量数据。
  • 由于一次只传输大量数据,因此将节省大量时间。

CPU 保持阻塞的时间百分比:
设准备数据所用时间为 Tx,传输数据所用时间为 Ty。那么由于 DMA 导致 CPU 保持阻塞的时间百分比如下。

Percentage of time CPU remains in blocked state = Ty * 100% / Tx + Ty

模式 2:
循环窃取模式 –

  • 慢速 IO 设备需要一些时间来准备数据(或字),并且在这段时间内 CPU 会保持对总线的控制。
  • 一旦数据或字准备就绪,CPU 将系统总线的控制权交还给 DMAC,并在 1 个周期内将准备好的字传输到内存。
  • 与 Burst 模式相比,此模式有点慢,因为它需要一点时间,IO 设备在准备数据时实际消耗了一点时间。

CPU 保持阻塞的时间百分比:
设准备数据所用时间为 Tx,传输数据所用时间为 Ty。那么由于 DMA 导致 CPU 保持阻塞的时间百分比如下。

Percentage of time CPU remains in blocked state = Ty * 100% / Tx

模式 3:
交错模式 –

  • 只要 CPU 不需要系统总线,则只有总线控制权将交给 DMAC。
  • 在这种模式下,CPU 根本不会因为 DMA 而被阻塞。
  • 这是 DMA 传输最慢的模式,因为 DMAC 必须等待很长时间才能从 CPU 本身获取系统总线的访问权限。
  • 因此,将传输较少量的数据。

例子 :
考虑以 2MBPs 速度运行的设备,并将数据传输到内存是使用循环窃取模式完成的。当它准备好或准备好时,将 16 个字节的数据传输到内存需要 2 微秒。那么由于 DMA 传输而阻塞 CPU 的时间百分比是多少?

解释 -

Internal data preparation speed given =          2 MBPs. 
So for preparing 2 MB it takes   ------>           1 second
For preparing 1B it takes           ------->          1 second / 2MB

So now for 16B data preparation it takes ------->1 second  * 16B / 2MB
(after reciprocating Mega will be become micro 

(that is 10^6 will become 10^-6 after reciprocating))
therefore for preparation 16B it takes -------> 8 microseconds

Therefore percentage of time CPU remains blocked in case of 
Cycle Stealing mode = 2 * 100% / 8 = 25%