文件系统中写边界支持(Write Barrier Support)

参考学习博客http://www.cnblogs.com/whyandinside/archive/2012/06/24/2560099.html中的Write Barrier Support中总结到:

write barrier support是为了enforce an ordering constraint on memory operations 


在linux kernel中

memory barrier的实现就是使用mb()函数(该函数表示这个操作之前的所有内存操作不会被重排序到这个操作之后)


参考博客http://www.linuxidc.com/Linux/2011-06/37403.htm文章。


有关barrier的实例参考博客http://www.cppblog.com/tx7do/archive/2011/08/30/154701.aspx


我关注如下例子:

barrier实际上也是内存屏障。
include/linux/kernel.h:
#define barrier() __asm__ __volatile__("": : :"memory")
内存屏障也是一种避免锁的技术。
它在进程上下文中将一个元素插入一个单向链表:
new->next=i->next;
wmb();
i->next=new;
同时,如果不加锁地遍历这个单向链表。或者在遍历链表时已经可以看到new,或者new还不在该链表中。Alan Cox书写这段代码时就注意到了这一点,两个内存写事件的顺序必须按照程序顺序进行。否则可能new的next指针将指向一个无效地址,就很可能出现 OOPS!

不论是gcc编译器的优化还是处理器本身采用的大量优化,如Write buffer, Lock-up free, Non-blocking reading, Register allocation, Dynamic scheduling, Multiple issues等,都可能使得实际执行可能违反程序序,因此,引入wmb内存屏障来保证两个写事件的执行次序严格按程序顺序来执行。

===================================================================================================================================

    我根据工作开发的qcom8939的android手机的kernel结合这个内存屏障的概率继续深入学习。

    我使用的android手机的kernel版本如下:

    Linux version 3.10.49-perf-gcd8aa24 (buildslave@xmws74) (gcc version 4.9.x-google 20140827 (prerelease) (GCC) ) #1 SMP PREEMPT Mon Aug 3 05:15:47 CST 2015


    根据代码查找内核的内存屏障定义在文件kernel/arch/arm64/include/asm/barrier.h文件中,mb(), wmb(), rmb()。


memory barrier有几种类型:
    acquire barrier : 不允许将barrier之后的内存读取指令移到barrier之前(linux kernel中的wmb())。
    release barrier : 不允许将barrier之前的内存读取指令移到barrier之后 (linux kernel中的rmb())。
    full barrier    : 以上两种barrier的合集(linux kernel中的mb())。


在分析中,我接触到一个rcu机制,详见博客

http://m.blog.csdn.net/blog/xzongyuan/20382995

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值