我的一位朋友告诉我,在x86架构下,DMA控制器不能在两个不同的内存位置之间传输。它只能在RAM和外围设备(如PCI总线)之间传输。
这是真的吗?
因为AFAIK DMA控制器应该能够在位于总线上并具有地址的任意设备之间运行。特别是,如果源地址和解址都属于同一个物理设备,我看不出有什么问题。
发布于 2010-11-28 16:18:29
ISA (记得?;-) DMA芯片当然有一个取押金传输类型。
然而,来自MASM32论坛
嗨, 签入“无文档的个人电脑”,他说内存到内存DMA是可能的。他接着说,可能存在问题、限制,而且无论如何,CPU可以比DMA硬件更快地完成复制(386+上的MOVSD)。 所以这似乎是可以的,但谁在乎呢。 致以敬意, 史蒂夫N.
发布于 2010-11-28 23:04:30
是的,内存到内存传输的可能性很大,我已经用“现代”x86来尝试了80386个家庭:)
为源和目标指定RAM。您可能需要注意L1缓存的一致性,这取决于您正在编程的设备以及是否启用了缓存。
您可能会在Linux内核中找到一些代码,用于刷新影子内存中的视频RAM页面。这让人耳目一新。
发布于 2010-11-28 15:44:14
肯定有DMA引擎不能在两个ram地址之间传输,所以问题的第二部分已经基于一个不正确的前提。
https://stackoverflow.com/questions/4297539
复制相似问题