2010-11-28 108 views
14

我的一位朋友告诉我,在x86架构上,DMA控制器不能在两个不同的RAM位置之间传输。它只能在RAM和外设之间传输(如PCI总线)。DMA传输RAM-RAM

这是真的吗?

因为AFAIK DMA控制器应该能够位于总线上并具有地址的任意设备之间。特别是如果源地址和描述地址属于同一个物理设备,我看不出什么问题。

+0

为什么要将RAM从一个位置复制到另一个位置? x86有一个内存分页系统,所以任何内存页面都可以在任何地址的虚拟内存中看到。 – 2010-11-28 16:55:24

+0

@GJ未处于实时模式。 – 2011-02-14 21:12:31

回答

12

ISA(还记得吗?;-) DMA芯片肯定有Fetch-and-Deposit传输类型。

然而,从MASM32 forums

嗨,

在 “无证PC” 检查, 他说,存储器到存储器DMA是 可能。他接着说, 可能有问题,限制 和CPU可以(在386+ MOVSD)反正 做副本 比DMA硬件更快。

所以它似乎是肯定的,你可以, 但谁在乎,这样的事情。

问候,

史蒂夫N.

2

肯定有DMA引擎不能2个RAM地址之间的传输,所以这个问题的第二部分是已经基于不正确的前提。

+0

“DMA引擎”是什么意思?对于基于x86的不同芯片组,DMA控制器的规格是否有所不同? – valdo 2010-11-28 15:53:53

+2

我把你的第二个(或第三个,如果你算上单行)的段落解释为一般性陈述。我不用x86工作,但我肯定遇到了无法执行ram-to-ram传输的powerpc dma控制器,这就是我为什么这么做的原因。 – lijie 2010-11-28 15:55:43

7

是,存储器到存储器的传输,可以很好达到80386家我曾与 “现代” 的x86的:)

指定源RAM尝试和目的地。您可能需要注意L1缓存的一致性,具体取决于您正在编程的设备以及是否启用了缓存。

您可能会发现在Linux内核中的一些代码对影子内存刷新视频RAM页。这铃响了。

0

在ARM MEM-到-MEM DMA显著提高性能。