关于memory barrier/memory ordering的笔记和总结(3)



Linux中的memory barrier

                       基本的memory ordering特征

原则:内核按照最relaxmemory ordering(DEC Alpha)来设计,其内存模型的特点如下:

对不同地址的普通内存操作会发生乱序(对同一地址的读写,由cache一致性保证)

注:和ARM的内存模型不同的是:write barrier/memorybarrier不能单独对系统中所有的CPU核心,write barrier前的写操作先于其后的写操作完成,必须配对使用datadependency(存在address dependency的两个写操作)read barrier/memory barrier才能保证。

                       compiler barrier

这种memorybarrierCPU的内存模型无关,是通知编译器在优化过程中,保证该barrier前的内存操作语句和其后的内存操作语句发生乱序。也就是该barrier之前的内存操作语句对应的机器指令不会出现在该barrier之后的内存操作语句对应的机器指令之后,反之亦然。

 

LINUX内核中对应的接口是barrier(),其根据不同的编译器有不同的定义。

                       CPU memory barrier

这里描述的是Linux内核的接口的基本要求,实际实现过程中其memory order作用可能有加强,需要根据在对于架构下内核代码使用的指令来判断。比如对于ARM下的LOCK指令的实现使用了smp_mb,其作用强于本身的定义。以下描述的所有barrier,确保的是按照program order barrier接口前后的对应类型的内存操作的相对顺序,并不意味着barrier接口的执行完成,barrier接口前面的内存的操作就完成了(一些体系结构有相关的指令,比如ARMDSB指令)。虽然在X86ARM环境,所有的barrier接口都具有cumulative属性,但是内核只保证General barrier

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值