免费注册 查看新帖 |

Chinaunix

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

[内核同步] 内核抢占时的内核屏障作用 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2012-06-11 15:37 |显示全部楼层
icanth 发表于 2012-06-11 13:21
回复 2# blake326

谢谢了!讲得很明白,~ 此处的内存屏障主要主要是在非抢占任务和操作preempt_count之 ...


很明白吗?我没明白。barrier()是优化屏障,不是内存屏障,不能防止编译器改变指令执行顺序-这一点是内存屏障作的事。优化屏障是禁止编译器用存放在寄存器的内存的值直接代替对内存值的访问,这是以假定内存的值在此间没有变化为前提的。优化屏障否定这一前提,要求编译器重新从内存取值。

论坛徽章:
0
2 [报告]
发表于 2012-06-11 17:52 |显示全部楼层
回复 8# blake326
看了点资料,barrer()好像能保证前后顺序依次执行。你的后半段解说又让我迷糊了,唉

   

论坛徽章:
0
3 [报告]
发表于 2012-06-11 18:28 |显示全部楼层
回复 13# blake326
但是,cpu每发射一批指令之后,不管有没有乱序执行,必须等到所有指令全部执行完成后,才能接着处理中断等问题。所以现在即使cpu的乱序使do_xxx在inc_preempt_count之前执行了,由于这个时候cpu上没有办法产生中断,其他内核路径无法抢占它也去执行do_xxx之类的代码,所以说是安全的。



能保证do_xxx是无法中断的一批指令能完成的?do_xxx执行完而inc_preempt_count没执行之前发生中断不会出问题?

   

论坛徽章:
0
4 [报告]
发表于 2012-06-11 18:41 |显示全部楼层
回复 15# blake326
我不认为do_xxx总是一条或少数几条指令。

   

论坛徽章:
0
5 [报告]
发表于 2012-06-12 10:55 |显示全部楼层
回复 17# blake326


    可能是我没理解你的话。我的qq:2469103484 方便的话加上,互相探讨。

论坛徽章:
0
6 [报告]
发表于 2012-06-12 11:05 |显示全部楼层
回复 18# honkiko


    牛人! 一针见血。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP