在我看過wmb()多次的PCI DMA驅動程序之一中。 wmb()函數實際上做了什麼? 某處被提及爲「不傷人的聖水」。這個功能的目的是什麼?什麼是在Linux驅動程序中的wmb()
4
A
回答
11
Stakx對你的問題的評論已經指向full answer:的確是一個寫內存屏障。
但是,如果你不是那麼熟悉的概念,該文件可能無法提供關於「爲什麼」的足夠信息。
讓我們假設一個串行端口,在那裏你必須寫字節到某個地址。串行芯片將通過電線發送這些字節。 重要的是你不要搞亂寫 - 他們必須保持秩序或一切都是亂碼。
但以下是不夠的:
*serial = 'h';
*serial = 'e';
*serial = 'l';
*serial = 'l';
*serial = 'o';
由於編譯器,處理器,內存子系統以及它們之間的公共汽車被允許重新排序店爲優化(相信我,是的,他們是和是, 他們是這樣)。
所以你必須添加代碼,以確保該商店不糾纏起來。 這就是wmb()宏所做的:防止商店重新排序。
請注意,只是使串行指針變得不穩定:雖然它確保編譯器不會重新排序,但提到的其他機制仍然會造成嚴重破壞。這在another kernel doc piece中有記錄。
對此事的很好看的是Paul McKenney's book,可作爲免費的PDF和付費的死樹的版本。
2
Wmb表示寫入內存屏障。 它在編譯的指令flow.its平臺相關中插入硬件內存障礙。 該功能保證寫入操作的順序。 在執行任何後續寫入之前,wmb()函數完成之前的寫入操作完成。
相關問題
- 1. Linux驅動程序中的platform_get_resource是什麼?
- 2. 什麼是Linux內置驅動程序加載順序?
- 3. 是什麼在MySQL JDBC驅動程序
- 4. 爲什麼在Linux驅動程序中使用udelay()不可靠?
- 5. 什麼是在Linux設備驅動程序中使用GPL lincense的重要性
- 6. 在Linux驅動程序中的PWM insmod
- 7. 什麼是Windows內核驅動程序?
- 8. 什麼是jTDS驅動程序?
- 9. 什麼是pyspark驅動程序?
- 10. 什麼是測試驅動程序?
- 11. 什麼是Type 4 XA驅動程序?
- 12. 什麼是驅動程序功能?
- 13. 什麼是jdbc驅動程序「org.gjt.mm.mysql.Driver」?
- 14. 驅動程序是什麼意思?
- 15. 編寫設備驅動程序時,linux中__iomem有什麼用?
- 16. ERESTARTSYS在編寫linux驅動程序時使用了什麼?
- 17. 有什麼devm_kzalloc()和kzalloc在Linux驅動程序
- 18. 設備驅動程序在linux中
- 19. 嵌入式Linux的Linux驅動程序
- 20. 使用驅動程序內部的驅動程序的Linux
- 21. Linux設備驅動程序 - 我的device_read()有什麼問題?
- 22. Windows驅動程序編程或Linux驅動程序編程?
- 23. I2C linux驅動程序
- 24. 學習linux驅動程序
- 25. Linux驅動程序phys_mem_access_prot undefined
- 26. Linux驅動程序和device.h
- 27. Linux設備驅動程序
- 28. Linux TTY和驅動程序
- 29. 訪問Linux驅動程序
- 30. Linux SPI驅動程序crasj
也許這是一個「寫內存障礙」? https://www.kernel.org/doc/Documentation/memory-barriers.txt – stakx