Posted on 2008-12-10 20:49
MichaelCao 閱讀(2091)
評(píng)論(2) 編輯 收藏 引用 所屬分類:
OS
這個(gè)是在是應(yīng)該糾正一下.因?yàn)橐郧笆裁炊疾恢?恩,看完linux 0.11的源代碼后,順便又看了Robert Love寫的Linux Development,這里還是先推薦一下這本書吧.首先作者是大牛.不信的話,打開(kāi)linux的2.6內(nèi)核源代碼,然后找sche.c.我想應(yīng)該就能發(fā)現(xiàn)他的大名了.實(shí)在是令我崇拜阿.然后內(nèi)容寫的,整體來(lái)說(shuō)還不錯(cuò).尤其是前面那一部分.對(duì)于內(nèi)核調(diào)度以及中斷之類的分析.寫的很好.后面的話,恩,個(gè)人覺(jué)得就有點(diǎn)不如前面的,思考的少了一點(diǎn),應(yīng)用多了一點(diǎn).對(duì)于內(nèi)核講的就少了.而如何寫驅(qū)動(dòng)之類就多了.但不管怎么樣,這本書真的是一本很不錯(cuò)的書.有看過(guò)linux 0.11源代碼并且喜歡內(nèi)核的可以看看.
廢話不多說(shuō)了.首先從自旋鎖的來(lái)源來(lái)看吧.說(shuō)到這個(gè)就要說(shuō)SMP,linux 在2.2的內(nèi)核之后就加入了SMP的支持.一直到2.6越來(lái)越好.有SMP就有多個(gè)cpu的隊(duì)列.每一個(gè)cpu都有一個(gè)自己的調(diào)度隊(duì)列.這樣在有些時(shí)候就需要平衡這些隊(duì)列.這個(gè)時(shí)候就要用到鎖,讓其他cpu什么也不做.讓一個(gè)cpu來(lái)更新這些隊(duì)列.這個(gè)時(shí)候肯定是不能用信號(hào)量的(?).這樣就出現(xiàn)了自旋鎖.當(dāng)然自旋鎖的用途不止這里.比如說(shuō)在中斷中,進(jìn)入臨界區(qū).信號(hào)量也是不能用的(?).這個(gè)時(shí)候就要用自旋鎖,其他方面的話,我再回去看看.這樣的話應(yīng)該就很清楚了.信號(hào)量只是在進(jìn)程中使用的.一般來(lái)說(shuō),應(yīng)用級(jí)程序,你根本不用考慮自旋鎖.沒(méi)有SMP,也不用考慮了.因?yàn)榇a編譯以后只是禁止了內(nèi)核搶占.這也就是說(shuō),這段代碼不會(huì)被搶占,sleep什么的根本沒(méi)用.如果是開(kāi)發(fā)驅(qū)動(dòng)方面的話,這個(gè)在必要的時(shí)候還是應(yīng)該考慮一下.什么是必要的時(shí)候呢?就是上面我說(shuō)的,進(jìn)入中斷臨界區(qū)且有多個(gè)cpu.