原创 spinlock和semaphore的差别和应用

2008-11-21 13:49 6715 5 6 分类: MCU/ 嵌入式

这两天经常有同事在问我spinlocksemaphore的相关问题,什么时候该用spinlock?什么时候该用semaphore?什么时候该用spinlock_irq?什么时候该用spinlock_irqsave?的确,对于初涉内核开发的人员来说,spinlocksemaphore的应用是一个比较大的疑问。这里,我来谈谈我对这两个概念的想法吧。


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


Spinlock的实现机制可以描述如下:CPU首先将内存总线lock住,然后检测内存中的lock数据,如果数据为真,那么表示资源被人占用,无法获取。然后CPU会自璇检测该lock数据,直到数据不为真之后,lock该数据返回。在Linuxspinlock核心代码采用汇编语言实现,可以参考__raw_spin_lock函数。在<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.6.25版本之后,Linux为了解决在多CPU平台上的不公平竞争,引入了排队自璇锁的算法。


 


说道这里,需要讲一下的是,spinlockup平台上为空函数的说法。这个说法不是很严格,实际上在非强占的up平台上,spinlock的实现为空函数,在可强占的up平台上,spinlock需要将强占给disable掉,也就是说在spinlock的临界区,Linux无法强占。在多CPU平台上,spinlock是有效的。


 


Semaphore的实现机制可以描述如下:CPU首先会检测信号量是否可获取,如果无法获取该信号量,那么就会导致一次上下文调度操作。从实现机制上来看,semaphore操作效率比较低,而spinlock的效率相对较高,但是这种效率的高低与应用相关,如果临界区操作的时间过长,那么采用spinlock会浪费大量的CPU时间,还不如做几次上下文调度释放CPU资源呢。所以,spinlock的应用有一个原则,那就是临界区操作尽可能的短,让CPU不要自璇太多的时间,这一点从spinlock的实现代码上也可以看出一些端倪,Linux开发人员着这个地方花费了好多心计。


 


从上面的机制描述,我想可以总结出如下几点:


1、  不允许睡眠的上下文需要采用spinlock,可以睡眠的上下文可以采用semaphore。在中断上下文中访问的竞争资源一定采用spinlock


2、  临界区操作较长的应用建议采用semaphore,临界区很短的操作建议采用spinlock


3、  需要关中断的场合需要调用spinlock_irq或者spinlock_irqsave,不明确当前中断状态的地方需要调用spinlock_irqsave,否则调用spinlock_irq。一个资源既在中断上下文中访问,又在用户上下文中访问,那么需要关中断,如果仅仅在用户上下文中被访问,那么无需关中断。

文章评论1条评论)

登录后参与讨论

用户469927 2008-11-25 11:41

你好!看了你很多文章,受益匪浅。请问怎样才能打印出内核函数的调用栈呀?望指教。谢谢! 我的邮箱: linux-fsdevel@tom.com
相关推荐阅读
用户411565 2012-12-18 12:58
我的存储之道博客
大家好,最近一直在做存储方面的工作,所以我在51CTO上专门开辟了一个空间讨论存储相关的问题,喜欢存储的朋友可以可以访问我的存储博客: 存储之道 (http://alanwu.blog.51cto...
用户411565 2012-04-06 21:39
SAS Cable可以有多长?
SAS接口是高端硬盘的主流接口,是存储系统的理想选择。我们知道高速信号的传输距离和传输线相关的,那么SAS作为外部通信接口,其Cable线具体可以有多长呢? 我在网上找到上图所示的眼图测...
用户411565 2012-04-06 21:38
对TRIM SCSI命令的一些分析
前一段时间做了一些对SSD方面进行优化的工作,SSD最大的问题在于长时间使用之后,IO性能会急剧下降。其主要问题在于为了防止“写放大”问题的产生,SSD的firmware采用了类似于log方式的算...
用户411565 2012-04-06 21:35
惊叹!我们的跨洋网络
  每次地质自然灾害的时候,总会伴随着网络的问题,这是由于我们的越洋光纤网络出了故障,受到自然力的破坏而导致断裂。越洋光纤,听起来的确是件非常不可思议的事情,工程量非常的巨大,但正是如此伟大的...
用户411565 2012-04-06 21:33
科学仪器网络模型
科学仪器概述     科学仪器发展趋势 科学是从测量开始的,科学仪器是信息技术的源头,是信息产业的重要组成部分,是现代科学与工业的基石。科学仪器产业的发展关系到国家科学研究实力、生...
用户411565 2012-04-06 21:16
谈谈RAID产品与技术
说起RAID,学计算机的同学马上会说RAID技术简单啊,就是将数据条带化,然后计算一些冗余数据,一并写入磁盘。通过RAID技术一方面提高系统的IO性能;另一方面提高系统的可靠性。单纯从RAID的原...
我要评论
1
5
关闭 站长推荐上一条 /2 下一条