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

2021-09-13 02:11:43 字數 3882 閱讀 6324

死鎖的產生條件:

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

一、死鎖的定義:

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

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

①資源互斥/資源不共享

每個資源要麼已經分配給了乙個程序,要麼是可用的,只有這兩種狀態,資源不可以被共享使用,所以所謂的互斥是指:資源不共享,如果被使用,只能被乙個程序使用。

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

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

③資源不可剝奪

當乙個資源分配給了乙個程序後,其它需要該資源的程序不能強制性獲得該資源,除非該資源的當前佔有者顯示地釋放該資源。

④環路等待

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

舉個例子▼

小明有鍵盤,小白有滑鼠,小明要用電腦打遊戲,小白要用電腦做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、程序回退法

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

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

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

死鎖的檢測和解除

前面紹的死鎖預防和避免演算法,都是在為程序分配資源時施加限制條件或進行檢測,若系統為程序分配資源時不釆取任何措施,則應該提供死鎖檢測和解除的手段。資源分配圖 系統死鎖,可利用資源分配圖來描述。如圖2 17所示,用圓圈代表乙個程序,用框代表一類資源。由於一種型別的資源可能有多個,用框中的乙個點代表一類...

作業系統 死鎖產生,預防,避免,檢測

死鎖產生的條件 死鎖的預防策略 死鎖避免的方法 死鎖檢測 說死鎖條件之前先要談乙個問題 可重用資源和可消耗資源 可重用資源 資源通常分為兩類 可重用資源和可消耗資源。可重用資源是指一次僅供乙個程序安全使用且不因使用而耗盡的資源。程序得到資源單元並使用後,會釋放這些單元供其他程序繼續使用。可重用資源的...