死鎖的產生,防止,避免

2021-08-22 06:04:47 字數 1691 閱讀 5421

在多工系統下,當乙個或多個程序等待對方的資源,而在等待對方資源之前不會釋放得到的資源,這樣造成迴圈等待的一種現象。

競爭系統資源

程序的推進順序不當

1.資源互斥/資源不共享(每個資源要麼已經分配給乙個程序,要麼是可用的,只有這兩種狀態,資源不可以被共享使用)

2.請求並保持(已經的到資源的程序還可以繼續請求新的資源)

3.不可剝奪(我得到的資源,只能我釋放別人不能剝奪我的資源)

4.環路等待(互相等待,誰都不放手,死鎖發生時,系統中一定有兩個或兩個以上的程序組成的一條環路,環路上的每個程序都在等待下乙個程序所占有的資源)

防止死鎖只要破壞死鎖產生的四個必要條件之一即可。

1.破壞互斥條件

方法:共如果系統資源都能被享,那麼就不會進入死鎖狀態(但是有些資源就不能被同時訪問,例如 印表機)

缺點:破壞互斥條件而預防死鎖的方法不太可行,而且在有的場合應該保護這種互斥性

2.破壞請求並保持條件

方法:資源請求一次性,也就是程序在執行前一次申請完它所需要的全部資源,在它的資源未滿足前,不執行,一旦投入執行後,這些資源就一直歸他所有,也不提出其他資源的請求,這樣就不會死鎖了

缺點:系統資源被嚴重浪費,其中有的資源可能僅在執行初期或執行快結束時才會使用,甚至根本不使用,而且會導致飢餓現象,由於個別資源長期被其他程序占用,導致等待該資源的程序遲遲不能開始執行

3.破壞不剝奪條件

方法:當乙個已經保持了某些不可剝奪資源的程序,請求新的資源而得不到滿足時,必須釋放它已經保持的所有資源,待以後重新申請。這意味著,乙個程序已占有的資源會被暫時釋放,或者說被剝奪了。

缺點:實施起來較為困難,釋放已經獲得的資源可能導致前一階段工作的失效,反覆的申請和釋放資源,會增加系統開銷。這種方法常用於狀態易於儲存和恢復的資源,比如cpu的暫存器及記憶體資源。一般不試用於印表機這種資源。

4.破壞迴圈等待條件

方法:為了破壞迴圈等待條件,可採取順序分配資源法。首先要給系統中的資源編號,規定每個程序,必須按照編號遞增的順序請求資源。

缺點:按規定申請資源的方法,編號會很麻煩,而且如果新增資源如何解決等等,也必然會給使用者帶來麻煩

由上可看出防止死鎖,往往是不可行的。我們通常採用的是避免死鎖。

銀行家演算法

1.當乙個顧客對資金的最大需求量不超過銀行家現有的資金時,就可以接納該顧客

2.顧客可以分期貸款,但是貸款總和不能超過一開始申請的總額

3.暫時不能滿足客戶需求,對顧客的貸款可以推遲支付,但是總能在有效時間內得到貸款

4.當顧客使用完全部資金時,在一定的時間內歸還所有的資金

1.資源剝奪法

掛起某些死鎖程序,並搶占它的資源,將這些資源分配給其他的死鎖程序,但應防止被掛起的程序長時間的不到資源,而處於資源匱乏的狀態

2.  撤銷程序法

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

3.程序回退法

讓乙個程序回退到足以迴避死鎖的地方,程序回退時自願釋放資源而不是被剝奪,要求系統保持程序的歷史資訊。

死鎖的檢測

(1)畫出資源分配圖

(2)簡化資源分配圖

(3)使用死鎖定理判斷

死鎖定理:

如果資源分配圖中沒有環路,則系統沒有死鎖

如果資源分配圖中有環路,則系統可能有死鎖

避免死鎖的產生

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。第乙個建議往往是最簡單的 乙個執行緒已獲得乙個鎖時,再別去獲取第二個。如果能堅持這個建議,因...

死鎖的產生 防止 避免 檢測和解除

死鎖的產生條件 想知道死鎖怎麼產生,首先要了解什麼是死鎖 一 死鎖的定義 多個進行相互等待對方資源,在得到所有資源繼續執行之前,都不會釋放自己已有的資源,這樣造成了迴圈等待的現象,稱為死鎖。二 產生死鎖的四大必要條件 資源互斥 資源不共享 每個資源要麼已經分配給了乙個程序,要麼是可用的,只有這兩種狀...

死鎖,產生原因,避免

什麼是死鎖 死鎖是指多個程序因競爭資源而造成的一種僵局 互相等待 若無外力作用,這些程序都將無法向前推進。例如,在某乙個計算機系統中只有一台印表機和一台輸入 裝置,程序p1正占用輸入裝置,同時又提出使用印表機的請求,但此時印表機正被程序p2 所占用,而p2在未釋放印表機之前,又提出請求使用正被p1占...