DMA传输RAM到RAM

val*_*ldo 14 c windows x86 dma

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

这是真的?

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

And*_*ass 12

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

但是,来自MASM32论坛:

嗨,

检查"未记录的PC",他说内存到内存DMA是可能的.然后,他继续说可能存在问题,限制,并且CPU无论如何都可以比DMA硬件更快地复制(MOVSD在386+上).

所以你似乎是肯定的,但是谁在乎,有点像.

问候,

史蒂夫N.

  • "无论如何通过DMA进行这样的转移是不是有原因?"嗯,最好完全避免复制.即使你不这样做,也值得注意的是,目前的情况是,CPU可以比内存子系统提供的速度更快地消耗数据.由于您保留了内存控制器,因此可能比您直观预期的节省更少.例如,I/OAT(http://www.linuxfoundation.org/collaborate/workgroups/networking/i/oat)在接受基准测试时,在接收时提供了10%的CPU利用率,在发送时没有提供. (4认同)

T33*_*33C 7

是的,内存到内存的转移可能很高达80386家庭我试过"现代"x86的:)

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

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