免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1614 | 回复: 2
打印 上一主题 下一主题

[内核同步] 请教关于优化屏障与内存屏障的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-05 10:05 |只看该作者 |倒序浏览
以下是本人的理解,请大牛分析下对否?

优化屏障是针对编译器来说的,内核中以barrier()宏给出,它避免编译器的重排序优化操作,保证编译程序时在优化屏障之前的指令不会在优化屏障之后执行。
什么意思呢?比如现在有四条汇编指令A,B,C,D,预期的执行顺序是A-B-C-D,在没有使用barrier()优化屏蔽时,我们如果开启了编译优化,那么很可能被优化成这样的顺序:
C-D-A-B,那么此时我们在原来B,C之间加入barrier,那么C,D就不会跑到A,B之前了,但是barrier并没有保证CPU把指令混在一起执行,这里的意思是,虽然我们使用了barrier()是编译产生的汇编指令不会乱序,但是并不是cpu在取指令执行时也是按照汇编指令的出现顺序来做。比如我们保证了汇编指令顺序中C,D不会跟A,B颠倒,但是不能保证会先执行A,B后指令C,D。。。

所以这就需要内存屏蔽,这里以mb表示。它保证了在mb之后的指令开始执行之前,mb之前的指令已经执行完成

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
2 [报告]
发表于 2012-12-05 12:52 |只看该作者
跟我理解的一样。

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
3 [报告]
发表于 2012-12-05 12:55 |只看该作者
mb包括rmb wmb mb,另外mb从语义来说并不保证指令“已经执行完”,而只保证CPU执行指令的时候不会穿越屏障。当然不同处理器相应指令真实语义也有区别,没细扣过。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP