操作系统(二十八)死锁的概念
生活随笔
收集整理的這篇文章主要介紹了
操作系统(二十八)死锁的概念
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
2.4.1 死鎖的概念
??在并發(fā)環(huán)境下,各進程因競爭資源而造成的一種互相等待對方手里的資源,導(dǎo)致各進程都阻塞,都無法向前推進的現(xiàn)象,就是“死鎖”。通俗一點就是我有一個資源你也有一個資源,但我們還想要對方手里的資源,可對方還不放手,于是我們就都等對方放手,導(dǎo)致進程沒辦法推進,這就造成了死鎖。
目錄
2.4.1 死鎖的概念
2.4.1.1 死鎖、饑餓、死循環(huán)
2.4.1.2??死鎖產(chǎn)生的必要條件
2.4.1.3 死鎖發(fā)生的時機
2.4.1.4 處理死鎖的策略
2.4.1.1 死鎖、饑餓、死循環(huán)
??之前我們接觸過饑餓,還有在程序中出現(xiàn)的死循環(huán),他們都會使進程沒有辦法繼續(xù)推進下去,下面來說明一下三者的區(qū)別。
| ? | 區(qū)別 |
| 死鎖 | 死鎖一定是“循環(huán)等待對方手里的資源”導(dǎo)致的,因此如果有死鎖現(xiàn)象,那至少有兩個或兩個以上的進程同時發(fā)生死鎖。另外,發(fā)生死鎖的進程一定處于阻塞態(tài)。 |
| 饑餓 | 可能只有一個進程發(fā)生饑餓。發(fā)生饑餓的進程既可能是阻塞態(tài)(如長期得不到需要的I/O設(shè)備),也可能是就緒態(tài)(長期得不到處理機) |
| 死循環(huán) | 可能只有一個進程發(fā)生死循環(huán)。死循環(huán)的進程可以上處理機運行(可以是運行態(tài)),只不過無法像期待的那樣順利推進。死鎖和饑餓問題是由于操作系統(tǒng)分配資源的策略不合理導(dǎo)致的,而死循環(huán)是由代碼邏輯的錯誤導(dǎo)致的。死鎖和饑餓是管理者(操作系統(tǒng))的問題,死循環(huán)是被管理者的問題。 |
2.4.1.2??死鎖產(chǎn)生的必要條件
? 互斥條件:只有對必須互斥使用的資源的爭搶才會導(dǎo)致死鎖(如哲學(xué)家的筷子、打印機設(shè)備)。像內(nèi)存、揚聲器這樣可以同時讓多個進程使用的資源是不會導(dǎo)致死鎖的(因為進程不用阻塞等待這種資源)。
? 不剝奪條件:進程所獲得的資源在未使用完之前,不能由其他進程強行奪走,只能主動釋放。
? 請求和保持條件:進程已經(jīng)保持了至少一個資源,但又提出了新的資源請求,而該資源又被其他進程占有,此時請求進程被阻塞,但又對自己已有的資源保持不放。 ? 循環(huán)等待條件:存在一種進程資源的循環(huán)等待鏈,鏈中的每一個進程已獲得的資源同時被下一個進程所請求。 在循環(huán)等待這里我們注意一下,死鎖一定會有循環(huán)等待但是循環(huán)等待卻不一定發(fā)生死鎖(系統(tǒng)中存在的所需資源數(shù)大于1)。2.4.1.3 死鎖發(fā)生的時機
- 對系統(tǒng)資源的競爭。各進程對不可剝奪的資源(如打印機)的競爭可能引起死鎖,對可剝奪的資源(CPU)的競爭是不會引起死鎖的。
- 進程推進順序非法。請求和釋放資源的順序不當(dāng),也同樣會導(dǎo)致死鎖。例如,并發(fā)執(zhí)行的進程P1、P2 分別申請并占有了資源 R1、R2,之后進程P1又緊接著申請資源R2,而進程P2又申請資源R1,兩者會因為申請的資源被對方占有而阻塞,從而發(fā)生死鎖。
- ?信號量的使用不當(dāng)也會造成死鎖。如生產(chǎn)者-消費者問題中,如果實現(xiàn)互斥的P操作在實現(xiàn)同步的P操作之前,就有可能導(dǎo)致死鎖。(可以把互斥信號量、同步信號量也看做是一種抽象的系統(tǒng)資源)
2.4.1.4 處理死鎖的策略
- 預(yù)防死鎖。破壞死鎖產(chǎn)生的四個必要條件中的一個或幾個。
- 避免死鎖。用某種方法防止系統(tǒng)進入不安全狀態(tài),從而避免死鎖(銀行家算法)
- 死鎖的檢測和解除。允許死鎖的發(fā)生,不過操作系統(tǒng)會負(fù)責(zé)檢測出死鎖的發(fā)生,然后采取某種措施解除死鎖。
其中前兩條不允許死鎖的發(fā)生,而最后一條可以允許死鎖的發(fā)生。
總結(jié)
以上是生活随笔為你收集整理的操作系统(二十八)死锁的概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 母婴产业发展蓝皮书
- 下一篇: 操作系统(二十九)预防死锁