我的一个朋友告诉我,在x86架构上,DMA控制器不能在两个不同的RAM位置之间传输。 它只能在RAM和外设之间传输(如PCI总线)。
这是真的?
因为AFAIK DMA控制器应该能够在位于总线上并具有地址的任意设备之间。 特别是,如果源地址和描述地址属于同一物理设备,则看不到问题。
ISA(记住?;-) DMA芯片肯定有一个取和存款转移类型。
但是,从MASM32论坛 :
嗨,
检查“无证电脑”,他说内存到内存DMA是可能的。 然后他继续说,可能会有问题,限制,并且CPU可以比DMA硬件更快地执行复制(386+上的MOVSD)。
所以这似乎是一个你可以,但谁在乎,有点事。
问候,
史蒂夫
是的,内存到内存的传输可能达到80386家族我曾尝试用“现代”x86的:)
为源和目标指定RAM。 您可能需要注意L1缓存的一致性,具体取决于您正在编程的设备以及是否启用了缓存。
您可能会在Linux内核中找到一些代码来刷新影子内存中的视频RAM页面。 这铃响了。
肯定有DMA引擎不能在两个ram地址之间传输,所以问题的第二部分已经基于一个不正确的前提。
在ARM上,Mem-to-Mem DMA显着提高了性能。