定義:如果一個進程集合中的每一個進程都在等待只能由該進程集合中其他進程才能引發(fā)的事件宅楞,那么针姿,該進程集合就是死鎖。
產(chǎn)生死鎖的原因:
- 因為系統(tǒng)資源不足厌衙;
- 進程運行推進的順序不合適距淫;
- 資源分配不當?shù)取?/li>
產(chǎn)生死鎖的必要條件:
- 互斥條件:每個資源要么已經(jīng)分配給一個進程,要么就是可用婶希。
- 占有和保持條件:已經(jīng)得到了某個資源的進程可以再請求新的資源榕暇。
- 不可搶占條件:已經(jīng)分配給一個進程的資源不可強制性的被占用,它只能被占有它的進程顯示釋放饲趋。
- 環(huán)路等待條件:在發(fā)生死鎖時拐揭,必然存在一個進程--資源的環(huán)形鏈。
解決死鎖的基本方法:
- 預(yù)防死鎖:
- 資源一次性分配:(破壞占有和保持條件)
- 可剝奪資源:即當某進程新的資源未滿足時奕塑,釋放已占有的資源(破壞不可搶奪條件)
- 資源有序分配法:系統(tǒng)給每類資源賦予一個編號堂污,每一個進程按編號遞增的順序請求資源,釋放則相反(破壞環(huán)路等待條件)
避免死鎖:
預(yù)防死鎖的幾種策略龄砰,會嚴重地損害系統(tǒng)性能盟猖。因此在避免死鎖時,要施加較弱的限制换棚,從而獲得較滿意的系統(tǒng)性能式镐。由于在避免死鎖的策略中,允許進程動態(tài)地申請資源固蚤。因而娘汞,系統(tǒng)在進行資源分配之前預(yù)先計算資源分配的安全性。若此次分配不會導(dǎo)致系統(tǒng)進入不安全狀態(tài)夕玩,則將資源分配給進程你弦;否則惊豺,進程等待。其中最具有代表性的避免死鎖算法是銀行家算法禽作。檢測死鎖
首先為每個進程和每個資源指定一個唯一的號碼尸昧,然后建立資源分配表和進程等待表.解除死鎖:
當發(fā)現(xiàn)有進程死鎖后,便應(yīng)立即把它從死鎖狀態(tài)中解脫出來旷偿,常采用的方法有:
?1. 剝奪資源:從其它進程剝奪足夠數(shù)量的資源給死鎖進程烹俗,以解除死鎖狀態(tài);
?2. 撤消進程:可以直接撤消死鎖進程或撤消代價最小的進程萍程,直至有足夠的資源可用幢妄,死鎖狀態(tài).消除為止;所謂代價是指優(yōu)先級茫负、運行代價磁浇、進程的重要性和價值等。