2010-11-28 110 views
14

我的一位朋友告訴我,在x86架構上,DMA控制器不能在兩個不同的RAM位置之間傳輸。它只能在RAM和外設之間傳輸(如PCI總線)。DMA傳輸RAM-RAM

這是真的嗎?

因爲AFAIK DMA控制器應該能夠位於總線上並具有地址的任意設備之間。特別是如果源地址和描述地址屬於同一個物理設備,我看不出什麼問題。

+0

爲什麼要將RAM從一個位置複製到另一個位置? x86有一個內存分頁系統,所以任何內存頁面都可以在任何地址的虛擬內存中看到。 – 2010-11-28 16:55:24

+0

@GJ未處於實時模式。 – 2011-02-14 21:12:31

回答

12

ISA(還記得嗎?;-) DMA芯片肯定有Fetch-and-Deposit傳輸類型。

然而,從MASM32 forums

嗨,

在 「無證PC」 檢查, 他說,存儲器到存儲器DMA是 可能。他接着說, 可能有問題,限制 和CPU可以(在386+ MOVSD)反正 做副本 比DMA硬件更快。

所以它似乎是肯定的,你可以, 但誰在乎,這樣的事情。

問候,

史蒂夫N.

2

肯定有DMA引擎不能2個RAM地址之間的傳輸,所以這個問題的第二部分是已經基於不正確的前提。

+0

「DMA引擎」是什麼意思?對於基於x86的不同芯片組,DMA控制器的規格是否有所不同? – valdo 2010-11-28 15:53:53

+2

我把你的第二個(或第三個,如果你算上單行)的段落解釋爲一般性陳述。我不用x86工作,但我肯定遇到了無法執行ram-to-ram傳輸的powerpc dma控制器,這就是我爲什麼這麼做的原因。 – lijie 2010-11-28 15:55:43

7

是,存儲器到存儲器的傳輸,可以很好達到80386家我曾與 「現代」 的x86的:)

指定源RAM嘗試和目的地。您可能需要注意L1緩存的一致性,具體取決於您正在編程的設備以及是否啓用了緩存。

您可能會發現在Linux內核中的一些代碼對影子內存刷新視頻RAM頁。這鈴響了。

0

在ARM MEM-到-MEM DMA顯著提高性能。