2012-04-13 80 views
1

假設CPU修改位置x + 50中的值並且不將其刷新回主內存(寫回)。DMA環境中的高速緩存一致性問題

同時,設備啓動從x到x + 100的DMA讀取請求。

在這種情況下,如何通知CPU刷新髒緩存線?

+0

在操作系統設置DMA請求之前,'過去的日子'內存的一部分被標記爲不可緩存。爲什麼你認爲在你列出的情況下沒有發生或不能發生? – gbulmer 2012-04-13 11:27:16

+0

@gbulmer你的意思是一個DMA請求只能處理無法訪問的內存區域? – sliter 2012-04-13 11:32:00

回答

1

的DMA電路往往與主存儲器直接運行而不涉及CPU(這是主要的想法,以擺脫做I/O可以在硬件其他地方,從而完成節省CPU週期的CPU)。所以,你可能會碰到cache coherency problems。 Microsoft建議使用flushing I/O buffers when using DMA

但是有些系統做支持CPU和DMA電路之間的高速緩存一致性協議,就像在多處理器系統中的CPU之間。最終的答案取決於實際的硬件。

1

有三種方法我能想到的:

  1. 的內存被標記爲未帶緩存,
  2. DMA控制器座標與高速緩存控制器,
  3. 操作系統保證這會永遠不會發生,例如通過確保進程的CPU部分未運行。

這取決於硬件和操作系統的能力。

確保過程未運行時,在多任務操作系統過於怪異,如DMA由一個進程所擁有的內存可能是由過程做一個系統調用,例如觸發一個寫。可以取消進程並運行其他進程,直到DMA完成。

這可能是過多的約束,以等待I/O設備來完成的,所以DMA控制器可能被複制從進程地址空間到輔助緩衝器中。

所以,如果你有這個地方已經發生的情況下,請簡要說明的例子,你已經運行測試。