我的朋友告诉我,在x86架构中,DMA控制器无法在两个不同的内存位置之间传输。它只能在内存和外围设备(如PCI总线)之间传输。
这是真的吗?
因为据我所知,DMA控制器应该能够在总线上任意设备之间进行传输,并具有地址。特别是如果源地址和目标地址都属于同一物理设备,我看不出有什么问题。
ISA (还记得吗?;-) DMA芯片当然有一个Fetch-and-Deposit传输类型。
但是,从MASM32论坛中:
嗨,
在《未公开的PC》(The Undocumented PC)中查找, 他说内存到内存DMA是可能的。然后他继续说 可能会有问题,限制,并且CPU可以比DMA硬件更快地进行复制 (386+上的MOVSD)。
因此似乎是“是的,您可以”,但谁关心它的事情。
问候,
Steve N.
是的,内存到内存的传输在80386系列中是可行的,我已经尝试过“现代”x86 :)
指定源和目标的RAM。您可能需要注意设备的一致性,具体取决于您正在编程的设备以及是否启用了缓存。
您可能会在Linux内核中找到一些代码,用于在阴影内存中刷新视频RAM页面。这让人想起了什么。
肯定有一些DMA引擎不能在两个RAM地址之间传输数据,因此问题的第二部分已经基于错误的前提。