linux設(shè)備驅(qū)動(dòng)程序之并發(fā)控制

linux設(shè)備驅(qū)動(dòng)程序之并發(fā)控制

ID:8921358

大?。?0.50 KB

頁(yè)數(shù):3頁(yè)

時(shí)間:2018-04-12

linux設(shè)備驅(qū)動(dòng)程序之并發(fā)控制_第1頁(yè)
linux設(shè)備驅(qū)動(dòng)程序之并發(fā)控制_第2頁(yè)
linux設(shè)備驅(qū)動(dòng)程序之并發(fā)控制_第3頁(yè)
資源描述:

《linux設(shè)備驅(qū)動(dòng)程序之并發(fā)控制》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、上集說(shuō)到哪兒了呢?瞧這記性,什么?說(shuō)到"天要下雨,娘要嫁人"那段。。這是誰(shuí)在答話,廢話,我當(dāng)然知道講到這里了,我是說(shuō)驅(qū)動(dòng)講到哪里了。算了,不管了..話說(shuō)Linux開(kāi)源社區(qū)的開(kāi)發(fā)者們做了什么工作呢,很簡(jiǎn)單:利用spin_lock()/spin_unlock()作為自旋鎖的基礎(chǔ),將它們和關(guān)中斷l(xiāng)ocal_irq_disable()/開(kāi)中斷l(xiāng)ocal_irq_enable(),關(guān)底半部local_bh_disable()/開(kāi)底半部local_bh_enable(),關(guān)中斷并保存狀態(tài)字local_irq_save()/開(kāi)中斷并恢復(fù)狀態(tài)local_irq_restore()結(jié)合就完成了整套

2、自旋鎖機(jī)制。唉吆,我的天啊,不是我說(shuō)你們開(kāi)源社區(qū)的那些家伙們,說(shuō)個(gè)東西為啥要那么費(fèi)勁,就為了說(shuō)完上面那些紅色的破話,差點(diǎn)沒(méi)喘過(guò)來(lái),本來(lái)在上篇就想說(shuō)你們的…好人做到低,送你送到西,嘿嘿..我把上邊的關(guān)系再幫大家捋捋,免的看著費(fèi)勁…spin_lock_irq()=spin_lock()+local_irq_disable()spin_unlock_irq=spin_unlock()+local_irq_enable()spin_lock_irqsave()=spin_unlock()+local_irq_save()spin_unlock_irqrestore()=spin_unlo

3、ck()+local_irq_restore()spin_lock_bh()=spin_lock()+local_bh_disable()spin_unlock_bh()=spin_unlock()+local_bh_enable()又是一口氣,這是什么年頭,掙點(diǎn)點(diǎn)擊率,怎么就這么難呢..不過(guò)也是沒(méi)辦法的事,上了Linux這條賊船,就要有犧牲我一個(gè),幸福全中國(guó)的決心,不然微軟的又要囂張了,今天黑你一次屏,明天斷你一次網(wǎng),就連去網(wǎng)吧,微軟還伸手到你面前說(shuō):對(duì)不起,你的系統(tǒng)是盜版…好了,讓他們熱鬧去吧,說(shuō)說(shuō)咱們的事。作為L(zhǎng)inux驅(qū)動(dòng)程序工程師,你要在心里刻下幾條戒律:1)什么叫自旋

4、鎖,就是忙等待,當(dāng)鎖不可用時(shí),CPU除了在那兒拼命的執(zhí)行"測(cè)試并設(shè)置"的傻瓜操作外什么都不做,才不管電影中含情脈脈的你是她的誰(shuí),她是你的誰(shuí)的這些事,任你兩情相約,也是執(zhí)手相看淚眼,竟無(wú)語(yǔ)凝咽??梢?jiàn),這是多么的影響系統(tǒng)的性能。2)what?你不懂愛(ài)情,不在乎第一條,我暈…那就給你來(lái)個(gè)狠的:處理不好自旋鎖可能導(dǎo)致系統(tǒng)死鎖(deadlock),系統(tǒng)癱瘓。呵呵怕不,等你哭著鬧著要上網(wǎng)而不能時(shí),就怕了。那為啥會(huì)這樣了,很簡(jiǎn)單,想想:如果我們不小心在一個(gè)遞歸中使用一個(gè)自旋鎖,說(shuō)白了就是一個(gè)CPU,它已經(jīng)獲得了這個(gè)自旋鎖,可還貪心地想第二次獲得這個(gè)自旋鎖,這時(shí)就死鎖了唄。另外,如果一個(gè)進(jìn)程獲得

5、自旋鎖之后再阻塞,也是很有可能導(dǎo)致死鎖的發(fā)生。理論完了,給你來(lái)點(diǎn)代碼,就當(dāng)是程序員點(diǎn)的一點(diǎn)交代吧:intdevice_count=0;定義文件打開(kāi)的次數(shù)計(jì)數(shù)staticintdevice_open(structinode*inode,structfile*filp){...spinlock(&device_count);if(device_count)//已經(jīng)打開(kāi){spin_unlock(&device_count);return-EBUSY;}device_count++;//增加使用計(jì)數(shù)spin_unlock(&device_count);...return0;}static

6、intdevice_release(structinode*inode,structfile*filp){...spinlock(&device_count);device_count--;//減少使用計(jì)數(shù)spin_unlock(&device_count);return0;}出招表四:讀寫(xiě)自旋鎖(防寫(xiě)不防讀)"找你所說(shuō),上面的那招自旋鎖看似相當(dāng)好啊..""那是,也不看看是誰(shuí)教的..""那我就不明白了,接著你說(shuō)的例子:你說(shuō)我買票是吧,售票員看到一張票(讀)也沒(méi)錯(cuò)啊,錯(cuò)在與她把票賣出去的操作上(寫(xiě)),你這可好,這樣一來(lái),一旦一個(gè)鎖住,別人都別想看了,這也太傻瓜了吧.."小王不屑的鄙

7、視我。"耶呵,看不出來(lái)哈,你都知道用腦袋想問(wèn)題了,以前不是都是要大腳趾計(jì)算的嗎..什么時(shí)候升級(jí)換代的.."我吃驚的瞪著眼,"那好,不拿出點(diǎn)真貨你搞不定你了..請(qǐng)看新招之讀寫(xiě)自旋鎖"讀寫(xiě)自旋鎖:它保留了自鎖的概念,但是它規(guī)定在讀方面同時(shí)可以有多個(gè)讀單元,在寫(xiě)方面,只能最多有一個(gè)寫(xiě)進(jìn)程。當(dāng)然,讀和寫(xiě)也不能同時(shí)進(jìn)行。使用方法:1)初始化讀寫(xiě)鎖的方法。rwlock_tx;//動(dòng)態(tài)初始化rwlock_tx=RW_LOCK_UNLOCKED;//動(dòng)態(tài)初始化rwlock_init(&x);2)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。