在我看过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内置驱动程序加载顺序?
- 2. 为什么在Linux驱动程序中使用udelay()不可靠?
- 3. 在Linux驱动程序中的PWM insmod
- 4. 驱动程序是什么意思?
- 5. 什么是jdbc驱动程序“org.gjt.mm.mysql.Driver”?
- 6. 什么是pyspark驱动程序?
- 7. 什么是Type 4 XA驱动程序?
- 8. 什么是Windows内核驱动程序?
- 9. ERESTARTSYS在编写linux驱动程序时使用了什么?
- 10. 嵌入式Linux的Linux驱动程序
- 11. 使用驱动程序内部的驱动程序的Linux
- 12. Linux设备驱动程序 - 我的device_read()有什么问题?
- 13. Linux设备驱动程序
- 14. 学习linux驱动程序
- 15. Linux驱动程序和device.h
- 16. 访问Linux驱动程序
- 17. Linux驱动程序phys_mem_access_prot undefined
- 18. 为什么Linux驱动程序需要编译?
- 19. Linux网卡驱动程序:什么是从0.0.0.0到255.255.255.255的UDP数据包?
- 20. 什么是c#测试驱动程序,为什么执行
- 21. Linux USB驱动程序:中断URBs
- 22. 什么是Windows操作系统中的驱动程序堆栈?
- 23. 什么是驱动程序中的driver.findelementby(By.id(“”))webelement element = driver.findelementby(By.id(“”))
- 24. 在X视频驱动程序中,调用驱动程序Probe函数时使用的PROBE_TRYHARD标志是什么?
- 25. 什么是事件驱动的编程?
- 26. PHP - 为什么新的SQLSRV驱动程序比旧的mssql驱动程序慢?
- 27. PowerPC上的Linux驱动程序
- 28. Linux的dma驱动程序dma_cap_set,dma_cap_zero
- 29. 编写MySql驱动程序的适当参考是什么?
- 30. SenseiDB Python 3的驱动程序是什么?
也许这是一个“写内存障碍”? https://www.kernel.org/doc/Documentation/memory-barriers.txt – stakx