DMA传输RAM到RAM

时间:2010-11-28 15:37:23

标签: c windows x86 dma

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

这是真的吗?

因为AFAIK DMA控制器应该能够位于BUS上并具有地址的任意设备之间。特别是如果源和destionation地址都属于同一个物理设备,我认为没问题。

4 个答案:

答案 0 :(得分:12)

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

但是,来自MASM32 forums

  

您好,

     

签入“未记录的PC”,   他说内存存储器DMA是   可能。然后他接着说   可能有问题,限制,   并且CPU可以进行复制   无论如何,比DMA硬件更快   (MOVSD 386 +)。

     

所以你似乎可以,   但是谁在意,有点像。

     

此致

     

Steve N。

答案 1 :(得分:7)

是的,内存到内存传输可能达到80386家庭我试过“现代”x86's :)

为源和目标指定RAM。您可能必须注意L1缓存的一致性,具体取决于您正在编程的设备以及是否已启用缓存。

您可能会在Linux内核中找到一些用于刷新影子内存中的视频RAM页面的代码。这敲响了钟声。

答案 2 :(得分:2)

肯定有DMA引擎无法在2个ram地址之间进行转移,因此问题的第二部分已基于不正确的前提。

答案 3 :(得分:0)

在ARM Mem-to-Mem DMA上显着提高了性能。