免费注册 查看新帖 |

Chinaunix

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

[内核同步] linux spin lock 如何实现的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-27 21:00 |只看该作者 |倒序浏览
本帖最后由 titer1 于 2012-08-28 19:52 编辑

这个话题关注很久了。
没有找到完整的定论。

如何才能更全面的了解spin lock啦?
我认为要至少2方面的领域来看:
理论上,
还有代码上(读代码,运行代码,debug代码,甚至修改、移植spinlock相关)

我当前的认识有两点:
它使用的是 test and set 的思想。
更底层的说,是多核机器上,锁住了总线(数据总线)。

不知道大家有补充没有?我想更系统的看待这个问题。但是找到的资料总是感觉说的不清楚,连贯不起来。
所以我试着总结了下。希望大家指教。


test and set 参考于:
Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
http://www.ibm.com/developerwork ... ock_mips/index.html
我小结了下:
Spinlock 的设计思想是基于一种被称为 Test-and-Set 的机制,
C 语言是无法实现 Test-and-Set 的机制的,因为它无法在多核之间建立一个交互的机制.


还见于:

windows下的spinlock实现 from mouseos
http://www.mouseos.com/post/SpinLock.html
小结:
不断测试并尝试上锁的过程。
test-and-set可以用简要的指令实现:
lock bts dword ptr [spinlock], 0   
或者 xchg eax, [spinlock]   

这些指令底层都是作用于 锁住总线 进行原子操作。


关于总线详细见于以下:
关于单CPU,多CPU上的原子操作
http://hi.baidu.com/gamedot/item/90f4d381723e505927ebd9da
要点:spinlock 用于CPU同步, 它的实现是基于CPU锁定数据总线的指令.





关于spin lock 实现浅谈 //更新 2012-8-28 from 百度搜索研发,他是以ngnix为原型进行讲解的。当然你可以学习在不同架构下的spinlock实现,见下面。
nginx实现了spin lock以保护多进程对listen port的互斥accept。spinlock的实现如下:  


Spinlock本质上是一个“忙等”锁,由于其不存在下节中总结的mutex的缺点,其对于小资源是最高效的锁。相比上节中mutex的PTHREAD_MUTEX_ADAPTIVE_NP属性,nginx的spinlock是一个更完美的实现方案。


附有热心的代码
给需要的你:
分析Linux中Spinlock在ARM及X86平台上的实现
http://www.embedu.org/Column/Column241.htm




评分

参与人数 1可用积分 +8 收起 理由
瀚海书香 + 8 赞一个!

查看全部评分

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2012-08-28 13:12 |只看该作者
回复 1# titer1
多谢分享!

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP