关于自旋锁和信号量的纠正

Posted on 2008-12-10 20:49 MichaelCao 阅读(2078) 评论(2)  编辑 收藏 引用 所属分类: OS
  这个是在是应该纠正一下.因为以前什么都不知道.恩,看完linux 0.11的源代码后,顺便又看了Robert Love写的Linux Development,这里还是先推荐一下这本书吧.首先作者是大牛.不信的话,打开linux的2.6内核源代码,然后找sche.c.我想应该就能发现他的大名了.实在是令我崇拜阿.然后内容写的,整体来说还不错.尤其是前面那一部分.对于内核调度以及中断之类的分析.写的很好.后面的话,恩,个人觉得就有点不如前面的,思考的少了一点,应用多了一点.对于内核讲的就少了.而如何写驱动之类就多了.但不管怎么样,这本书真的是一本很不错的书.有看过linux 0.11源代码并且喜欢内核的可以看看.
  废话不多说了.首先从自旋锁的来源来看吧.说到这个就要说SMP,linux 在2.2的内核之后就加入了SMP的支持.一直到2.6越来越好.有SMP就有多个cpu的队列.每一个cpu都有一个自己的调度队列.这样在有些时候就需要平衡这些队列.这个时候就要用到锁,让其他cpu什么也不做.让一个cpu来更新这些队列.这个时候肯定是不能用信号量的(?).这样就出现了自旋锁.当然自旋锁的用途不止这里.比如说在中断中,进入临界区.信号量也是不能用的(?).这个时候就要用自旋锁,其他方面的话,我再回去看看.这样的话应该就很清楚了.信号量只是在进程中使用的.一般来说,应用级程序,你根本不用考虑自旋锁.没有SMP,也不用考虑了.因为代码编译以后只是禁止了内核抢占.这也就是说,这段代码不会被抢占,sleep什么的根本没用.如果是开发驱动方面的话,这个在必要的时候还是应该考虑一下.什么是必要的时候呢?就是上面我说的,进入中断临界区且有多个cpu.
 

Feedback

# re: 关于自旋锁和信号量的纠正  回复  更多评论   

2008-12-13 18:02 by dell笔记本
每一个cpu都有一个自己的调度队列.

# re: 关于自旋锁和信号量的纠正  回复  更多评论   

2009-06-14 12:59 by bigfish
不错啊

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


posts - 16, comments - 16, trackbacks - 0, articles - 0

Copyright © MichaelCao