当前位置: 技术问答>linux和unix
linux spin lock 如何实现的
来源: 互联网 发布时间:2017-03-12
本文导语: 这个话题关注很久了。 没有找到完整的定论。 如何才能更全面的了解spin lock啦? 我认为要至少2方面的领域来看: 理论上, 还有代码上(读代码,运行代码,debug代码,甚至修改、移植spinlock相关) 我当前的认识...
这个话题关注很久了。
没有找到完整的定论。
如何才能更全面的了解spin lock啦?
我认为要至少2方面的领域来看:
理论上,
还有代码上(读代码,运行代码,debug代码,甚至修改、移植spinlock相关)
我当前的认识有两点:
它使用的是 test and set 的思想。
更底层的说,是多核机器上,锁住了总线(数据总线)。
不知道大家有补充没有?我想更系统的看待这个问题。但是找到的资料总是感觉说的不清楚,连贯不起来。
所以我试着总结了下。希望大家指教。
test and set 参考于:
Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
http://www.ibm.com/developerworks/cn/linux/l-cn-spinlock_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锁定数据总线的指令.
附有热心的代码
给需要的你:
分析Linux中Spinlock在ARM及X86平台上的实现
http://www.embedu.org/Column/Column241.htm
没有找到完整的定论。
如何才能更全面的了解spin lock啦?
我认为要至少2方面的领域来看:
理论上,
还有代码上(读代码,运行代码,debug代码,甚至修改、移植spinlock相关)
我当前的认识有两点:
它使用的是 test and set 的思想。
更底层的说,是多核机器上,锁住了总线(数据总线)。
不知道大家有补充没有?我想更系统的看待这个问题。但是找到的资料总是感觉说的不清楚,连贯不起来。
所以我试着总结了下。希望大家指教。
test and set 参考于:
Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
http://www.ibm.com/developerworks/cn/linux/l-cn-spinlock_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锁定数据总线的指令.
附有热心的代码
给需要的你:
分析Linux中Spinlock在ARM及X86平台上的实现
http://www.embedu.org/Column/Column241.htm
|
spin lock的实现,看看现在的Linux kernel 源代码。
spin lock的功能是:禁止抢占,忙等待锁(忙等待即不会睡眠)。
spin lock的功能是:禁止抢占,忙等待锁(忙等待即不会睡眠)。
|
支持楼主。