2012-03-03 104 views
1

大多数人都知道DMA和高速缓存可能是一个愚蠢的问题......我只知道高速缓存将内存存储到更接近您可以访问的地方,因此您不必为I/O.DMA与高速缓存区别

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

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

回答

3

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

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

  1. 通过CPU mov指令一次写入一个单词。
  2. 配置DMA设备。您给它一个起始地址,一个目的地和要复制的字节数。现在转移发生在CPU做别的东西而不是勺子喂养音频设备。

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

0

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

在大多数DMA硬件还可以设置它做存储器到存储器的传输 - 也并不总是涉及到外部设备。也取决于系统,可能需要或可能不需要在软件之前(或传输之后)同步CPU高速缓存,因为DMA传输到/从内存中传输的数据可能在不知道CPU高速缓存的情况下完成。

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

Mem to mem DMA通常用于嵌入式系统以提高性能,或者可能根本无法访问某些内存部分。

要回答这个问题,DMA和CPU缓存是完全不同的东西,不可比。

2

我知道它有点晚,但回答这个问题将帮助像我这样的人我同意上述答案,我认为这个问题是关于缓存。

所以是缓存存储信息的地方更接近内存,这可能是早期计算的结果。无论何时在高速缓存中找到数据,它将被称为高速缓存命中,并且只要没有找到(高速缓存未命中),处理器就会继续计算所需的值。设备也可以访问这些数据,这就是为什么在启动时我们通常会使缓存数据无效,因此缓存行很干净。我们还会在启动时刷新缓存数据,以便将所有缓存数据写回到主内存以供cpu使用,之后我们会处理以重置或初始化缓存。

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

您可以从维基百科进一步阅读DMA,了解DMA可以访问系统内存的模式。我将简单地解释它

突发模式:DMA完全控制总线,CPU在此期间处于空闲状态。数据以突发(整体)传输而不中断。

周期窃取模式:此数据一次传输一个字节,传输速度慢,但CPU不闲置。