1
A
回答
1
的DMA電路往往與主存儲器直接運行而不涉及CPU(這是主要的想法,以擺脫做I/O可以在硬件其他地方,從而完成節省CPU週期的CPU)。所以,你可能會碰到cache coherency problems。 Microsoft建議使用flushing I/O buffers when using DMA。
但是有些系統做支持CPU和DMA電路之間的高速緩存一致性協議,就像在多處理器系統中的CPU之間。最終的答案取決於實際的硬件。
1
有三種方法我能想到的:
- 的內存被標記爲未帶緩存,
- DMA控制器座標與高速緩存控制器,
- 操作系統保證這會永遠不會發生,例如通過確保進程的CPU部分未運行。
這取決於硬件和操作系統的能力。
確保過程未運行時,在多任務操作系統過於怪異,如DMA由一個進程所擁有的內存可能是由過程做一個系統調用,例如觸發一個寫。可以取消進程並運行其他進程,直到DMA完成。
這可能是過多的約束,以等待I/O設備來完成的,所以DMA控制器可能被複制從進程地址空間到輔助緩衝器中。
所以,如果你有這個地方已經發生的情況下,請簡要說明的例子,你已經運行測試。
相關問題
- 1. __threadfence()和L1高速緩存一致性
- 2. GPU L1高速緩存一致性
- 3. 同時使用DMA和高速緩存
- 4. DMA與高速緩存區別
- 5. 高速緩存一致性方面的自旋循環開銷
- 6. Symfony2高速緩存問題
- 7. DMA緩存一致連續分配
- 8. APC緩存一致性問題
- 9. LINQ到SQL高速緩存的問題
- 10. 問題分佈式環境中的defaultCache和緩存(不一致的數據)
- 11. 使用spring高速緩存的屬性高速緩存
- 12. Oracle mapviewer - 高速緩存問題
- 13. 高速緩存問題與重定向
- 14. 高速緩存和線程問題
- 15. HTML5高速緩存和授權問題
- 16. NSURLCache高速緩存響應問題
- 17. 笨高速緩存控制器問題
- 18. 在64位環境中讀取32位高速緩存
- 19. 高速緩存性能
- 20. 高速緩存持久性
- 21. 點燃高速緩存重新連接問題(高速緩存已停止)
- 22. 虛擬化高可用性解決方案的緩存一致性問題
- 23. 禁用高速緩存中的緩存
- 24. wso2 esb高速緩存中介性能
- 25. 高速緩存後「採取」行動RDD導致只有2%高速緩存
- 26. ASP.NET高速緩存唯一
- 27. 複製高速緩存中的數據大於一個高速緩存行
- 28. 用於DMA的快速緩衝存儲器緩衝區
- 29. NSFetchedResultsController〜緩存導致問題?
- 30. MySQL高速緩存
在操作系統設置DMA請求之前,'過去的日子'內存的一部分被標記爲不可緩存。爲什麼你認爲在你列出的情況下沒有發生或不能發生? – gbulmer 2012-04-13 11:27:16
@gbulmer你的意思是一個DMA請求只能處理無法訪問的內存區域? – sliter 2012-04-13 11:32:00