死鎖產(chǎn)生的四個(gè)必要條件
1,互斥條件:資源是獨(dú)占的且排他使用,進(jìn)程互斥使用資源,即任意時(shí)刻一個(gè)資源只能給一個(gè)進(jìn)程使用,其他進(jìn)程若申請一個(gè)資源,而該資源被另一進(jìn)程占有時(shí),則申請者等待直到資源被占有者釋放。
2,不可剝奪條件:進(jìn)程所獲得的資源在未使用完畢之前,不被其他進(jìn)程強(qiáng)行剝奪,而只能由獲得該資源的進(jìn)程資源釋放。
3,請求和保持條件:進(jìn)程每次申請它所需要的一部分資源,在申請新的資源的同時(shí),繼續(xù)占用已分配到的資源。
4,循環(huán)等待條件:在發(fā)生死鎖時(shí)必然存在一個(gè)進(jìn)程等待隊(duì)列{P1,P2,…,Pn},其中P1等待P2占有的資源,P2等待P3占有的資源,…,Pn等待P1占有的資源,形成一個(gè)進(jìn)程等待環(huán)路,環(huán)路中每一個(gè)進(jìn)程所占有的資源同時(shí)被另一個(gè)申請,也就是前一個(gè)進(jìn)程占有后一個(gè)進(jìn)程所深情地資源。
以上給出了導(dǎo)致死鎖的四個(gè)必要條件,只要系統(tǒng)發(fā)生死鎖則以上四個(gè)條件至少有一個(gè)成立。事實(shí)上循環(huán)等待的成立蘊(yùn)含了前三個(gè)條件的成立,似乎沒有必要列出然而考慮這些條件對死鎖的預(yù)防是有利的,因?yàn)榭梢酝ㄟ^破壞四個(gè)條件中的任何一個(gè)來預(yù)防死鎖的發(fā)生。
死鎖預(yù)防
我們可以通過破壞死鎖產(chǎn)生的4個(gè)必要條件來 預(yù)防死鎖,由于資源互斥是資源使用的固有特性是無法改變的。
1,破壞“不可剝奪”條件:一個(gè)進(jìn)程不能獲得所需要的全部資源時(shí)便處于等待狀態(tài),等待期間他占有的資源將被隱式的釋放重新加入到 系統(tǒng)的資源列表中,可以被其他的進(jìn)程使用,而等待的進(jìn)程只有重新獲得自己原有的資源以及新申請的資源才可以重新啟動,執(zhí)行。
2,破壞”請求與保持條件“:第一種方法靜態(tài)分配即每個(gè)進(jìn)程在開始執(zhí)行時(shí)就申請他所需要的全部資源。第二種是動態(tài)分配即每個(gè)進(jìn)程在申請所需要的資源時(shí)他本身不占用系統(tǒng)資源。
3,破壞“循環(huán)等待”條件:采用資源有序分配其基本思想是將系統(tǒng)中的所有資源順序編號,將緊缺的,稀少的采用較大的編號,在申請資源時(shí)必須按照編號的順序進(jìn)行,一個(gè)進(jìn)程只有獲得較小編號的進(jìn)程才能申請較大編號的進(jìn)程。
死鎖避免
死鎖避免的基本思想:系統(tǒng)對進(jìn)程發(fā)出的每一個(gè)系統(tǒng)能夠滿足的資源申請進(jìn)行動態(tài)檢查,并根據(jù)檢查結(jié)果決定是否分配資源,如果分配后系統(tǒng)可能發(fā)生死鎖,則不予分配,否則予以分配,這是一種保證系統(tǒng)不進(jìn)入死鎖狀態(tài)的動態(tài)策略。
如果操作系統(tǒng)能保證所有進(jìn)程在有限時(shí)間內(nèi)得到需要的全部資源,則系統(tǒng)處于安全狀態(tài)否則系統(tǒng)是不安全的。
安全狀態(tài)是指:如果系統(tǒng)存在 由所有的安全序列{P1,P2,…Pn},則系統(tǒng)處于安全狀態(tài)。一個(gè)進(jìn)程序列是安全的,如果對其中每一個(gè)進(jìn)程Pi(i >=1 && i <= n)他以后尚需要的資源不超過系統(tǒng)當(dāng)前剩余資源量與所有進(jìn)程Pj(j < i)當(dāng)前占有資源量之和,系統(tǒng)處于安全狀態(tài)則不會發(fā)生死鎖。