有时候,就是想窥视一下不知道的东东,因为好奇!
分类: LINUX
2011-02-11 23:13:19
优化和内存屏障
1.面临的问题:
当使用优化的编译器时,编译器可能重新安排汇编语言指令以使寄存器以最优的方式使用。CPU通常并行地执行若干条指令,且可能重新安排内存访问。这样可以极大地加速程序的执行。而处理同步时,必须避免指令重排。
2.问题的解决方式:
优化屏障(optimization barrier)原语保证编译程序不会混淆放在原语操作之前的汇编语言指令和放在原语操作之后的汇编语言指令。
Linux内核中优化屏障就是barrier() 宏。
内存屏障(memory barrier)原语,确保在原语之后的操作开始执行之前,原语之前的操作已经完成。
Linux内核中使用的6个屏障原语:
mb() 适用于MP和UP的内存屏障
rmb() 适用于MP和UP的读内存屏障
wmb() 适用于MP和UP的写内存屏障
smp_mb() 仅适用于MP的内存屏障
smp_rmb() 仅适用于MP的读内存屏障
smp_wmb() 仅适用于MP的写内存屏障