0

对于大多数了解 DMA 和缓存的人来说,这可能是一个愚蠢的问题……我只知道缓存将内存存储在更接近您可以访问的地方,这样您就不必花太多时间在 I/O 上。

但是DMA呢?它可以让您以更少的延迟访问该主内存?

有人可以解释两者之间的差异,或者为什么我只是感到困惑吗?

4

3 回答 3

4

DMA 是一种硬件设备,可以在不使用 CPU 指令的情况下移入/移出内存。

例如,硬件设备(比如说,您的 PCI 声音设备)想要播放音频。您可以:

  1. mov通过 CPU指令一次写一个字。
  2. 配置 DMA 设备。你给它一个起始地址、一个目的地和要复制的字节数。现在,传输发生在 CPU 执行其他操作而不是勺子馈送音频设备时。

DMA 可能非常复杂(分散聚集等),并且因总线类型和系统而异。

于 2012-03-03T07:35:06.673 回答
1

我完全同意第一个答案,并且有一些常见的补充......

在大多数 DMA 硬件上,您还可以将其设置为进行内存到内存的传输 - 并不总是涉及外部设备。此外,根据系统,您可能需要也可能不需要在传输之前(或之后)在软件中同步 CPU 缓存,因为 DMA 向/从内存传输的数据可能在 CPU 缓存不知情的情况下完成。

做任何 DMA 的好处是 CPU 能够同时做其他事情。当然,当 CPU 也需要访问内存时,只有一个可以访问,另一个必须等​​待。

Mem to mem DMA 通常用于嵌入式系统以提高性能,或者对于能够访问内存的某些部分可能至关重要。

要回答这个问题,DMA 和 CPU-cache 是完全不同的东西,没有可比性。

于 2012-03-03T13:43:50.597 回答
1

我知道它有点晚了,但我想回答这个问题会对像我这样的人有所帮助,同意上述答案,我认为这个问题与缓存有关。

所以是的,缓存确实将信息存储在更靠近内存的地方,这可能是早期计算的结果。此外,只要在缓存中找到数据(称为缓存命中),就会直接使用该值。当它未找到时(称为缓存未命中),处理器继续计算所需的值。外围设备(SD 卡、USB 等)也可以访问这些数据,这就是为什么在启动时我们通常使缓存数据无效以便缓存行是干净的。我们还在启动时刷新缓存数据,以便将所有缓存数据写回主内存供 cpu 使用,然后我们继续重置或初始化缓存。

DMA(直接内存访问),是的,它确实可以让您访问主内存。但我认为更好的定义是,它允许您访问系统寄存器,该寄存器只能由处理器访问。@Ronnie 和 @Yann Ramin 都是正确的,因为 DMA 可以是设备硬件,因此您的串行外围设备可以使用它来访问系统寄存器,但它也可以用于两个内核之间的内存到内存传输。

您可以从 wikipedia 进一步了解 DMA,了解 DMA 可以访问系统内存的模式。我简单解释一下

突发模式:DMA 完全控制总线,此时 CPU 处于空闲状态。数据以突发方式(作为一个整体)不间断地传输。

循环窃取模式:在这种数据一次传输一个字节的情况下,传输速度很慢,但 CPU 并不空闲。

于 2016-01-26T13:31:54.720 回答