Kernel wmb/mb宏的作用
来源:互联网 发布:linux rsync 断点续传 编辑:程序博客网 时间:2024/04/28 19:49
内存屏障主要解决的问题是编译器的优化和CPU的乱序执行。
编译器在优化的时候,生成的汇编指令可能和c语言程序的执行顺序不一样,在需要程序严格按照c语言顺序执行时,需要显式的告诉编译不需要优化,这在linux下是通过barrier()宏完成的,它依靠volidate关键字和memory关键字,前者告诉编译barrier()周围的指令不要被优化,后者作用是告诉编译器汇编代码会使内存里面的值更改,编译器应使用内存里的新值而非寄存器里保存的老值。
同样,CPU执行会通过乱序以提高性能。汇编里的指令不一定是按照我们看到的顺序执行的。linux中通过mb()系列宏来保证执行的顺序。具体做法是通过mfence/lfence指令(它们是奔4后引进的,早期x86没有)以及x86指令中带有串行特性的指令(这样的指令很多,例如linux中实现时用到的lock指令,I/O指令,操作控制寄存器、系统寄存器、调试寄存器的指令、iret指令等等)。简单的说,如果在程序某处插入了mb()/rmb()/wmb()宏,则宏之前的程序保证比宏之后的程序先执行,从而实现串行化。wmb的实现和barrier()类似,是因为在x86平台上,写内存的操作不会被乱序执行。
实际上在RSIC平台上,这些串行工作都有专门的指令由程序员显式的完成,比如在需要的地方调用串行指令,而不像x86上有这么多隐性的带有串行特性指令(例如lock指令)。所以在risc平台下工作的朋友通常对串行化操作理解的容易些。
0 0
- Kernel wmb/mb宏的作用
- Linux linux mb() / rmb() / wmb()
- barrier(wmb,mb,rmb)和cache coherence
- I/O函数 writel __raw_writel mb()/rmb()/wmb()
- wmb 开发的几个坑
- Linuxbootloader和kernel的作用
- Linux驱动里的wmb函数
- MB与Mb的区别
- mb-gdb调试Linux kernel 入门指导
- build kernel时make oldconfig的作用
- build kernel时make oldconfig的作用
- build kernel时make oldconfig的作用
- KB、kb和MB、Mb的区别
- wmb贵!
- Build kernel时make oldconfig、menuconfig的作用
- php的mb处理模块
- 关于测速MB/S,Mb/S,KB/s的区别
- The Linux kernel API.pdf 1,64 MB 2004-01-24
- MTK关于手机AGPS问题总结
- 2013下半年四川省发展和改革委员会考试录用公务员拟录公示
- CentOS系统中安装PF_Ring的步骤和出现的问题
- 笔记:C++类的新认识
- cannot convert from android.app.FragmentManager to android.support.v4.app.FragmentManager
- Kernel wmb/mb宏的作用
- 安全cookie setSecure详解
- c++中string类中c_str()、data()、copy(p,n)函数的用法
- git学习笔记(二) git的一些设置和辅助功能
- 数据结构--------二叉树的建立和前序遍历------递归实现
- 给TextView部分加粗
- android 模拟器 PANIC: Could not open: AVD 解决方法
- Raspberry Pi + ArchLinux:网络dhcp不稳定,经常无法获取IP地址
- 将Asp.Net网站发布到IIS的四种方法及注意事项