1. 程式人生 > >程序死鎖條件和銀行家演算法

程序死鎖條件和銀行家演算法

1、死鎖在計算機系統中有許多互斥資源(如印表機)或軟體資源(如臨界區),若兩個程序同時使用印表機,或者同時進入臨界區必然會出現問題。所謂死鎖,是指兩個以上的程序互相都要求對方已經佔有的資源導致無法繼續執行下去的現象。

2、死鎖產生的必要條件:

(1)互斥條件:即一個資源每次只能被一個程序使用,在作業系統中這是真實存在的情況。

(2)保持和等待條件:有一個程序已獲得了一些資源,但因請求其他資源被阻塞時,對已獲得的資源保持不放。

(3)不剝奪條件:有些系統資源是不可剝奪的,當某個程序已獲得這種資源後,系統不能強行收回,只能由程序使用完時自己釋放。

(4)環路等待條件:若干個程序形成環形鏈,每個都佔用對方要申請的下一個資源。

3、死鎖預防:死鎖預防是採用某種策略,限制併發程序對資源的請求,破壞死鎖產生的4個必要條件之一,使系統在任何時刻都不滿足死鎖的必要條件。

(1)預先靜態分配法。破壞了“不可剝奪條件”。預先分配所需資源,保證不等待資源。該方法的問題是降低了對資源的請求,降低程序的併發程度;有時可能無法預先知道所需資源。

(2)資源有序分配法。破壞了“環路條件”。把資源分類按順序。保證不形成環路。該方法存在的問題是限制程序對資源的請求;由於資源的排序佔用系統開銷。

4、死鎖避免:避免是指程序在每次申請資源時判斷這些操作是否安全,典型演算法是“銀行家演算法”。但這種演算法會增加系統的開銷。

5、死鎖檢測

判斷系統是否處於死鎖狀態,如果是,則執行死鎖解除策略。

6、死鎖解除:與死鎖檢測結合使用,它使用的方式就是剝奪。即將資源強行分配給別的程序。

銀行家演算法:

例題:某系統有四種互斥資源R1,R2,R3和R4,可用資源數分別是3、5、6和8。假設在T0時刻有P1、P2、P3和P4四個程序,並且這些程序對資源的最大需求量和已分配資源數如下表所示,那麼在T0時刻系統中R1、R2、R3和R4的剩餘資源數分別為(1)。如果從T0時刻開始程序按   (2)     順序逐個排程執行,那麼系統狀態是安全的。

(1)A.3、5、6和8          B.3、4、2和2

           C.0、1、2和1          D.0、1、0和1

(2)A.P1P2→P4→P3      B.P2P1→P4→P3

     C.P3P2→P1→P4      D.P4P2→P3→P1

①求剩餘資源數

用可用資源數減去那些已分配的資源數:

 R1=3-(1+0+1+1)=3-3=0

 R2=5-(1+1+1+1)=5-4=1

 R3=6-(2+2+1+1)=6-6=0

 R4=8-(4+2+0+1)=8-7=1

所以(1)選擇D。

②求出還需資源數

分析,因為剩餘的可用資源為(0,1,0,1),與上面的還需資源數比較,只有滿足P3的還需資源數,所以,淘汰了ABD,選擇C。

驗證C.P3P2→P1→P4