在Linux下面对I/O进行操作,读和写的顺序都很重要,要在每个读写的操作之后都加上wmb()/rmb()吗?文档说编译器和CPU会对代码进行优化,然后造成对I/O操作的顺序和我们代码上的顺序不一致,这种自作聪明的优化可能会使我们得到非预期的结果。其间又提到了I/O操作有边缘效应...
全文
回复(7) 2003-01-22 17:08 来自版块 - LINUX&UNIX核心开发
表情
limingThese two function expand to nothing on x86(2003-02-21 13:48)
callmefire这个问题涉及到cache和总线锁,一般用于smp(2003-02-14 10:37)
OS_Dev当然是和cpu密切相关,尤其是cache部分! 不同的cpu处理不同的,x86就不存在这个问题。 (2003-01-31 00:37)
silan我还是不明白,这么说能否优化还是和硬件平台相关的?或者说对I/O的乱序操作是由于CPU的自身优化处理造成的,还是说编译器根据CPU的类型优化编译时产生的?如果Linux和我的驱动都是跑在X86平台上,是不是就不需要加rmb(),wmb()这些东东?(2003-01-27 09:15)
OS_DevX86下没有这个问题,这就是为什么萎软的文档没有这种说法的原因,因为windows只能跑x86。 (2003-01-24 10:29)
silan既然这种“优化”可能会产生错误,那是不是画蛇添足,甚至应该说是编译器自作聪明的bug?Window下的那些编译器好像就没有这种说法啊。能不能详细解释一下I/O操作的边际效应?对I/O操作的优化是不是也优化缓存到CPU寄存器/缓存?这不明摆着会有错误吗,为什么还要优化呢?谢谢(2003-01-23 11:24)
pengyc摘自linux device driver 2nd edition: #include <asm/system.h> \"void rmb(void);\" \"void wmb(void);\" \&quo...(2003-01-22 21:32)

返回顶部