天天看點

死鎖的産生、防止、避免、檢測和解除(詳解)

死鎖的産生條件:

想知道死鎖怎麼産生,首先要了解什麼是死鎖

一、死鎖的定義:

多個進行互相等待對方資源,在得到所有資源繼續運作之前,都不會釋放自己已有的資源,這樣造成了循環等待的現象,稱為死鎖。

二、産生死鎖的四大必要條件:

①資源互斥/資源不共享

每個資源要麼已經配置設定給了一個程序,要麼是可用的,隻有這兩種狀态,資源不可以被共享使用,是以所謂的互斥是指:資源不共享,如果被使用,隻能被一個程序使用。

②占有和等待/請求并保持

已經得到資源的程序還能繼續請求新的資源,是以個人覺得叫占有并請求也許更好了解。

③資源不可剝奪

當一個資源配置設定給了一個程序後,其它需要該資源的程序不能強制性獲得該資源,除非該資源的目前占有者顯示地釋放該資源。

④環路等待

死鎖發生時,系統中一定有由兩個或兩個以上的程序組成的一條環路,環路上的每個程序都在等待下一個程序所占有的資源。

舉個例子▼

小明有鍵盤,小白有滑鼠,小明要用電腦打遊戲,小白要用電腦做PPT,小明沒有滑鼠沒法打遊戲,小白沒有鍵盤沒法做PPT,小明等小白把滑鼠給自己,小白也等小明把鍵盤給自己,但是小明不願意把鍵盤給小白,小白也不願意把滑鼠給小明,小明和小白也不能互相搶鍵盤和滑鼠,他倆之間就形成了死鎖。

死鎖的産生、防止、避免、檢測和解除(詳解)

三、防止死鎖的方法

①防止死鎖的發生隻需破壞死鎖産生的四個必要條件之一即可。 

           ②下面的方法開銷非常之大,目前沒有一個作業系統可以實作。

           ③是以,目前使用的方法是避免死鎖,而不是防止死鎖。

         ④這部分的内容大緻浏覽簡單了解一遍即可,隻要能在某些選擇題中判斷出選項對應的是下面四個方法中的哪個就可以了。

1、破壞互斥條件

方法:

     如果允許系統資源都能共享使用,則系統不會進入死鎖狀态。

缺點:

     有些資源根本不能同時通路,如列印機等臨界資源隻能互斥使用。是以,破壞互斥條件而預防死鎖的方法不太可行,而且在有的場合應該保護這種互斥性。

2、破壞請求并保持條件

方法:

     釆用預先靜态配置設定方法,即程序在運作前一次申請完它所需要的全部資源,在它的資源未滿足前,不把它投入運作。一旦投入運作後,這些資源就一直歸它所有,也不再提出其他資源請求,這樣就可以保證系統不會發生死鎖。

缺點:

     系統資源被嚴重浪費,其中有些資源可能僅在運作初期或運作快結束時才使用,甚至根本不使用。而且還會導緻“饑餓”現象,當由于個别資源長期被其他程序占用時,将緻使等待該資源的程序遲遲不能開始運作。

3、破壞不可剝奪條件

方法:

     當一個已保持了某些不可剝奪資源的程序,請求新的資源而得不到滿足時,它必須釋放已經保持的所有資源,待以後需要時再重新申請。這意味着,一個程序已占有的資源會被暫時釋放,或者說是被剝奪了,或進而破壞了不可剝奪條件。

缺點:

     該政策實作起來比較複雜,釋放已獲得的資源可能造成前一階段工作的失效,反複地申請和釋放資源會增加系統開銷,降低系統吞吐量。這種方法常用于狀态易于儲存和恢複的資源,如CPU的寄存器及記憶體資源,一般不能用于列印機之類的資源。

4、破壞循環等待條件

方法:

     為了破壞循環等待條件,可釆用順序資源配置設定法。首先給系統中的資源編号,規定每個程序,必須按編号遞增的順序請求資源,同類資源一次申請完。也就是說,隻要程序提出申請配置設定資源Ri,則該程序在以後的資源申請中,隻能申請編号大于Ri的資源。

缺點:

     這種方法存在的問題是,編号必須相對穩定,這就限制了新類型裝置的增加;盡管在為資源編号時已考慮到大多數作業實際使用這些資源的順序,但也經常會發生作業使用資源的順序與系統規定順序不同的情況,造成資源的浪費;此外,這種按規定次序申請資源的方法,也必然會給使用者的程式設計帶來麻煩。

四、避免死鎖的算法

1、判斷“系統安全狀态”法

在進行系統資源配置設定之前,先計算此次資源配置設定的安全性。若此次配置設定不會導緻系統進入不安全狀态,則将資源配置設定給程序; 否則,讓程序等待。 

2、銀行家算法

1、申請的貸款額度不能超過銀行現有的資金總額

2、分批次向銀行提款,但是貸款額度不能超過一開始最大需求量的總額

3、暫時不能滿足客戶申請的資金額度時,在有限時間内給予貸款

4、客戶要在規定的時間内還款

五、死鎖的檢測

(該部分講述如何判斷是否産生死鎖)

1、畫出資源配置設定圖

系統死鎖,可利用資源配置設定圖來描述。如下圖所示,用長方形代表一個程序,用框代表一類資源。由于一種類型的資源可能有多個,用框中的一個點代表一類資源中的一個資源。從程序到資源的有向邊叫請求邊,表示該程序申請一個機關的該類資源;從資源到程序的邊叫配置設定邊,表示該類資源已經有一個資源被配置設定給了該程序。

死鎖的産生、防止、避免、檢測和解除(詳解)
死鎖的産生、防止、避免、檢測和解除(詳解)

2、簡化資源配置設定圖

第一步:先看A資源,它有三個箭頭是向外的,是以它一共給程序配置設定了3個資源,此時,A沒有空閑的資源剩餘。

第二步:再看B資源,它有一個箭頭是向外的,是以它一共給程序配置設定了1個資源,此時,B還剩餘一個空閑的資源沒配置設定。 

第三步:看完資源,再來看程序,先看程序P2,它隻申請一個A資源,但此時A資源已經用光了,是以,程序P2進入阻塞狀态,是以,程序P2暫時不能化成孤立的點。 

第四步:再看程序P1,它隻申請一個B資源,此時,系統還剩餘一個B資源沒配置設定,是以,可以滿足P1的申請。這樣,程序P1便得到了它的全部所需資源,是以它不會進入阻塞狀态,可以一直運作,等它運作完後,我們再把它的所有的資源釋放。相當于:可以把P1的所有的邊去掉,變成一個孤立的點,如下圖所示:

死鎖的産生、防止、避免、檢測和解除(詳解)

第五步:程序P1運作完後,釋放其所占有的資源(2個A資源和1個B資源),系統回收這些資源後,空閑的資源便變成2個A資源和1個B資源,由于程序P2一直在申請一個A資源,是以此時,系統能滿足它的申請。這樣,程序P2便得到了它的全部所需資源,是以它不會進入阻塞狀态,可以一直運作,等它運作完後,我們再把它的所有的資源釋放。相當于:可以把P2的所有的邊都去掉,化成一個孤立的點,變成下圖: 

死鎖的産生、防止、避免、檢測和解除(詳解)

(若能消去圖中所有的邊,則稱該圖是可完全簡化的,如上圖)

3、使用死鎖定理判斷

死鎖定理: 

                     ①如果資源配置設定圖中沒有環路,則系統沒有死鎖; 

                     ②如果資源配置設定圖中出現了環路,則系統可能有死鎖。 

或者說: 

當且僅當S狀态的資源配置設定圖是不可完全簡化的時候,系統狀态則是死鎖狀态

六、死鎖的解除

1、資源剝奪法

挂起某些死鎖程序,并搶占它的資源,将這些資源配置設定給其他的死鎖程序。但應防止被挂起的程序長時間得不到資源,而處于資源匮乏的狀态。

2、撤銷程序法

強制撤銷部分、甚至全部死鎖程序并剝奪這些程序的資源。撤銷的原則可以按程序優先級和撤銷程序代價的高低進行。

3、程序回退法

讓一(多)個程序回退到足以回避死鎖的地步,程序回退時自願釋放資源而不是被剝奪。要求系統保持程序的曆史資訊,設定還原點。

繼續閱讀