3.4 產(chǎn)生死鎖的原因和必要條件
1、死鎖(Deadlock):指多個(gè)進(jìn)程在運(yùn)行過(guò)程中,因爭(zhēng)奪資源而造成的一種僵局霹俺。當(dāng)進(jìn)程處于這種狀態(tài)時(shí),若無(wú)外力作用毒费,它們都將無(wú)法再向前推進(jìn)丙唧。
2、請(qǐng)求推進(jìn)的次序與對(duì)非剝奪性資源的爭(zhēng)用都是造成死鎖的原因觅玻。
3想际、產(chǎn)生死鎖的原因可歸結(jié)為如下兩點(diǎn):
1)競(jìng)爭(zhēng)資源培漏。
2)進(jìn)程間推進(jìn)順序非法。
4胡本、產(chǎn)生死鎖的必要條件
①互斥條件:進(jìn)程對(duì)所分配到的資源進(jìn)行排他性使用
②請(qǐng)求和保持條件:進(jìn)程已經(jīng)保持了至少一個(gè)資源牌柄,又提出新的資源請(qǐng)求,而新請(qǐng)求資源被其他進(jìn)程占有只能造成自身進(jìn)程阻塞侧甫,但對(duì)自己已獲得的其他資源保持不放珊佣,必然影響其他進(jìn)程。
③不剝奪條件:進(jìn)程已獲得的資源未使用完之前不能被剝奪披粟,只能在使用完時(shí)由自己釋放咒锻。
④環(huán)路等待條件
注:四個(gè)條件缺一不可!J靥搿惑艇!
5、處理死鎖的基本方法
事先預(yù)防:
1)預(yù)防死鎖
2)避免死鎖
事后處理:
3)檢測(cè)死鎖
4)解除死鎖
3.5預(yù)防死鎖的方法
預(yù)防死鎖:
1拇泛、摒棄“請(qǐng)求和保持”條件
2滨巴、摒棄“不剝奪”條件
3、摒棄“環(huán)路等待”條件:有序設(shè)置資源
避免死鎖:
采用避免死鎖的方法則是只施加較弱限制條件俺叭,從而獲得令人滿意的系統(tǒng)性能恭取。
銀行家算法:
1、過(guò)程:就是對(duì)各進(jìn)程的Request向量及資源數(shù)量進(jìn)行一系列判斷及值操作熄守。
進(jìn)程Pi發(fā)出資源請(qǐng)求后秽荤,系統(tǒng)按下述步驟進(jìn)行檢查:
首先是兩個(gè)基本判斷:
(1)IF
Requesti[j]<= Need[i,j]
? THEN轉(zhuǎn)向步驟2;
? ELSE 認(rèn)為出錯(cuò)柠横,所需資源數(shù)超過(guò)宣布的最大值(自我矛盾)
(2)IF
Requesti[j]<= Available[j]
? THEN轉(zhuǎn)向步驟3;
? ELSE 表示尚無(wú)足夠資源课兄,Pi需等待(現(xiàn)實(shí)不滿足)
3.6死鎖的檢測(cè)與解除
1牍氛、檢測(cè)時(shí)機(jī):
?當(dāng)進(jìn)程等待時(shí)檢測(cè)死鎖
?定時(shí)檢測(cè)
?系統(tǒng)資源利用率下降時(shí)檢測(cè)死鎖
2、檢測(cè)算法:
每個(gè)進(jìn)程和資源指定唯一編號(hào)
* 設(shè)置一張資源分配表
?記錄各進(jìn)程與其占用資源之間的關(guān)系
* 設(shè)置一張進(jìn)程等待表
?記錄各進(jìn)程與要申請(qǐng)資源之間的關(guān)系
3烟阐、死鎖解除:
1)剝奪資源
2)撤銷(xiāo)進(jìn)程
4搬俊、