亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1622 | 回復(fù): 0
打印 上一主題 下一主題

內(nèi)核中的互斥,我的理解 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-06-12 16:02 |只看該作者 |倒序瀏覽
發(fā)在這里,望指正和補(bǔ)充

一、內(nèi)核中的并行的原因(FROM LKD3):
1.中斷 --中斷可以在任何時刻異步地發(fā)生,也就可能隨時打斷當(dāng)前正在執(zhí)行的代碼。
2.軟中斷(和tasklet)-- 內(nèi)核可能在任何時候喚醒或調(diào)度軟中斷和tasklet,打斷當(dāng)前正在執(zhí)行的代碼。
3.內(nèi)核搶占--內(nèi)核中的任務(wù)可能被另一個任務(wù)搶占。
4.睡眠以及用戶空間的同步--進(jìn)程睡眠會喚醒調(diào)度程序,導(dǎo)致一個新的進(jìn)程運(yùn)行。
5.SMP--多個處理器可以同時執(zhí)行代碼。


二、互斥的使用

3、4屬于進(jìn)程間的互斥,當(dāng)進(jìn)程間有共享數(shù)據(jù)需要保護(hù)時,可以使用semaphore。一個進(jìn)程需要讀寫共享數(shù)據(jù)時,要先獲取相應(yīng)的semaphore,當(dāng)獲取失敗時,它則進(jìn)入睡眠狀態(tài),等待另一個進(jìn)程完成對共享數(shù)據(jù)的操作后釋放semaphore并將其喚醒。這里涉及到進(jìn)程的睡眠,spin lock會造成死鎖,所以并不適用。

情況1屬于中斷和進(jìn)程間的互斥。如果一個進(jìn)程在操作和中斷例程共享的數(shù)據(jù)的時候,突然有中斷的到來,這樣中斷處理例程就會搶占執(zhí)行,在進(jìn)程沒有完成對共享數(shù)據(jù)操作的時候插入它的操作,這樣就會造成共享數(shù)據(jù)的混亂,所以就有必要加鎖。由于在中斷處理過程中不存在進(jìn)程上下文不允許睡眠,所以這里不能使用semaphore而要使用spin lock,同時,為了避免進(jìn)程在獲取spin lock后操作共享數(shù)據(jù)時被中斷打斷(但中斷不能獲取spin lock)而造成死鎖,所以在這種情況下進(jìn)程必須在操作共享數(shù)據(jù)時關(guān)中斷--使用
spin_lock_irqsave()/spin_unlock_irqrestore()。

情況2跟1類似,不同的是適用于中斷下半部。這時候可以使用spin_lock_bh()/spin_unlock_bh()。

情況5可以使用spin lock或semaphore,短期低開銷的加鎖可以使用spin lock,長期的加鎖則應(yīng)該使用semaphore。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP