15

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

这是真的?

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

4

3 回答 3

13

ISA(还记得吗?;-) DMA 芯片肯定有Fetch-and-Deposit传输类型。

但是,来自MASM32 论坛

你好,

检查“未记录的 PC”,他说内存到内存 DMA 是可能的。然后他继续说可能存在问题、限制,并且 CPU 可以比 DMA 硬件更快地进行复制(386+ 上的 MOVSD)。

所以这似乎是一个是的,你可以,但谁在乎,那种事情。

问候,

史蒂夫·N。

于 2010-11-28T16:18:29.113 回答
8

是的,内存到内存的传输可以达到我尝试过的“现代”x86 的 80386 系列 :)

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

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

于 2010-11-28T23:04:30.350 回答
2

肯定有 DMA 引擎不能在 2 个 ram 地址之间传输,所以问题的第二部分已经基于一个不正确的前提。

于 2010-11-28T15:44:14.233 回答