我的一位朋友告诉我,在x86架构中,DMA控制器无法在两个不同的RAM位置之间进行传输。它只能在RAM和外设之间传输(例如PCI总线)。
这是真的吗?
因为AFAIK DMA控制器应该能够位于BUS上并具有地址的任意设备之间。特别是如果源和destionation地址都属于同一个物理设备,我认为没问题。
答案 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上显着提高了性能。