Linux kernel Memory Barrier
来源:互联网 发布:jdk 7u60 linux x64 编辑:程序博客网 时间:2024/05/19 23:01
Reportson the Barrier in Linux
Reporter: Harold Wang
http://blog.csdn.net/hero7935/
KernelEdition: 2.6.37.3
Abstract:本报告介绍Linux中MemoryBarrier使用环境、分类与典型应用举例,分析了MemoryBarrier在多处理机环境下对于维持指令按序执行的意义。
KeyWord: 内存屏障MemoryBarrier; 对称多处理机SMP;
Explanationsof Abbreviations used in this paper:
MB——MemoryBarrier
OOO——Out-Of-Order
Loadand Store——L&S
LinuxMB Brief Preview
独立的内存操作是高效的,它提供了多处理机环境下指令执行的并发性;各自独立的内存操作同时意味着指令的执行可能导致OOO,在CPU之间交互、I/O设备中可能带来问题,于是我们需要一种机制,在需要的时候,来确保编译器和CPU按序存取内存——这种机制就是:内存屏障MB。
LinuxMB Analysis In Depth
MB使用情景描述
每个CPU执行程序中具有独立访问内存的操作,这种独立地访问操作是非常宽松的,理论上可能以任意次序执行;同时编译器处于优化的目的也可能将指令以任意次序重新编排。本文中对MB的探讨是基于以上所描述的环境展开的。
MB四种变体
Write(Store)MB:指定点前所有Store操作的完成在这个点之后的所有Store之前
Datadependency MB:同一数据对象的前后读写操作在同一CPU上是编译器自保证的,但是在不同CPU上需要MB提供保证。
Read(Load)MB:指定点前所有Load操作的完成在这个点之后的所有Load之前
GeneralMB:指定点前所有L&S操作的完成在这个点之后的所有L&S之前
LockOperation:Lock点后任何内存操作的发生必须在这个点之后才开始
UnLockOperation: Lock点前任何内存操作的完成必须在这个点之前发生
Lock/UnLock操作概念上类似其他操作系统中Barrier的概念
MB使用场景
Datadependency: 同一CPU上由编译器、CPU可以自保证,不同CPU 上使用Datadependency MB提供支持。
Controldependency:可能需要使用ReadMB提供支持
SMPPairing: CPU之间交互时往往需要成对使用两种MB
Analysis:
WriteMB目的是确保d不会读到a的旧值(1);
ReadMB 目的是确保c不会读到b的旧值(4);
我们先来看看如果没有MB可能的结果:
c=2;d=1
c=4;d=1
c=2;d=3
- c=4;d=3
如果我们的本意是第四个,那么使用MB机制就可以确保结果是第四种情况。
Analysis:
WriteMB 目的是确保b不会读到*pp的旧值(0)
Datadependency MB 目的是确保pp不会读到p的旧值(2)
同理,MB机制就可以确保最终b读到pp新值(1);而pp读到p的新值(1)
Conclusion
内存屏障仅在CPU之间、CPU与外设之间交互时用到。当处理多处理器之间或硬件设备之间的同步问题时,可能存在以指定的顺序发出读内存和写内存的需求;在和硬件交互时,也需要确保一个给定的读操作发生在其他读或写操作之前;在多处理上,可能需要按写数据时的顺序读数据(通常确保后来以同样的顺序进行读取)。但是编译器和处理器为了提高效率,可能对读和写重新排序。指示编译器不要对给定的点周围的指令进行重新排序,这些确保顺序的指令由内存屏障MB机制提供保证。
Author: Harold Wang
http://blog.csdn.net/hero7935
Reference:
linux-2.6.37.3/Documentation/memory-barriers.txt
linux-2.6.37.3/arch/barrier.h
RobertLove. Linux Kernel Development 3rd Edition [M]. US:Addison-Wesley,2010:203-206
- Linux kernel Memory Barrier
- LINUX kernel memory barrier summary
- linux memory barrier
- Linux Memory Barrier 内核屏障
- Memory barrier
- Memory barrier
- Memory barrier
- memory barrier
- memory barrier
- LINUX内核内存屏障 -Memory Barrier
- Linux内核同步机制之Memory barrier
- Memory Ordering/Memory Barrier/Memory Barrier
- Linux kernel High memory
- 编译器barrier/CPU memory barrier
- Linux内核同步机制之(三):memory barrier
- Linux内核同步机制之(三):memory barrier
- Linux开发--使用Memory barrier实现无锁环形缓冲区
- 内存屏障(memory barrier)
- 数据库SQL语句使用
- MySql 中sql IF写法
- 看实例学php正则表达式
- 3D引擎CopperLicht
- Fedora 和 Ubuntu 上的段错误
- Linux kernel Memory Barrier
- 经典的背景音乐
- VC6+WDK+DriverStudio编译Windows驱动程序环境搭建
- 关于数据库考试,想出来的BT题目
- vmware虚拟机调整ubuntu10.04分区大小
- Eclipse的查找功能及其他技巧
- vmware虚拟机上ubuntu操作系统安装arm-linux-gcc交叉编译环境
- SVN仓库备份脚本
- 早上百杰IT人生-演讲稿