代码之家  ›  专栏  ›  技术社区  ›  valdo

DMA传输RAM到RAM

  •  14
  • valdo  · 技术社区  · 14 年前

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

    这是真的吗?

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

    4 回复  |  直到 14 年前
        1
  •  12
  •   Andras Vass    14 年前

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

    但是,从 MASM32 forums :

    你好,

    签入“未登记的电脑”, 他说内存到内存DMA是 可能的。他接着说 可能会有问题,限制, CPU可以复制 比DMA硬件还要快 (386+上的MOVSD)。

    所以这似乎是一个你可以的, 但谁在乎呢。

    当做,

    史蒂夫N。

        2
  •  7
  •   T33C    14 年前

    是的,内存到内存传输是可能的,多达80386个家庭,我曾尝试过“现代”x86:)

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

    您可能会在Linux内核中找到一些代码,用于刷新影子内存中的视频RAM页面。这听起来很有意思。

        3
  •  2
  •   lijie    14 年前

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

        4
  •  0
  •   vitaly.v.ch    8 年前

    在ARM上Mem-to-Mem DMA显著提高了性能。