死鎖及其處理方法

2022-07-16 19:24:10 字數 2071 閱讀 3480

死鎖:是指兩個或兩個以上的程序在執行過程中,由於競爭共享資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。

死鎖發生的四個必要條件

1)互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。

2)請求和保持條件:指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。

3)不剝奪條件:指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

4)環路等待條件:指在發生死鎖時,必然存在乙個程序——資源的環形鏈,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源。

產生原因

1)競爭資源引起程序死鎖

2)競爭不可剝奪資源

3)競爭臨時資源

預防

我們可以從死鎖的原因,尤其是產生死鎖的四個必要條件來預防死鎖,只要打破四個必要條件之一就能有效預防死鎖的發生:

打破互斥條件:改造獨占性資源為虛擬資源,大部分資源已無法改造。

打破不可搶占條件:當一程序占有一獨占性資源後又申請一獨占性資源而無法滿足,則退出原占有的資源。

打破占有且申請條件:採用資源預先分配策略,即程序執行前申請全部資源,滿足則執行,不然就等待,這樣就不會占有且申請。

打破迴圈等待條件:實現資源有序分配策略,對所有裝置實現分類編號,所有程序只能採用按序號遞增的形式申請資源。

預防死鎖的幾種策略,會嚴重地損害系統效能。因此在避免死鎖時,要施加較弱的限制,從而獲得較滿意的系統效能。由於在避免死鎖的策略中,允許程序動態地申請資源。因而,系統在進行資源分配之前預先計算資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給程序;否則,程序等待。其中最具有代表性的避免死鎖演算法是銀行家演算法。

首先為每個程序和每個資源指定乙個唯一的號碼;

先檢測:此方法允許系統在執行過程中發生死鎖。可通過系統所設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源。檢測方法包括定時檢測、效率低時檢測、程序等待時檢測等。

然後解除死鎖:採取適當措施,從系統中將已發生的死鎖清除掉。

當檢測到系統中已發生死鎖時,須將程序從死鎖狀態中解脫出來。常用的實施方法是撤銷或掛起一些程序,以便**一些資源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,以繼續執行。死鎖的檢測和解除措施,有可能使系統獲得較好的資源利用率和吞吐量,但在實現上難度也最大。

當發現有程序死鎖後,便應立即把它從死鎖狀態中解脫出來,常採用的方法有:

剝奪資源:從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀態;

撤消程序:可以直接撤消死鎖程序或撤消代價最小的程序,直至有足夠的資源可用,死鎖狀態.消除為止;所謂代價是指優先順序、執行代價、程序的重要性和價值等。

1、撤消陷於死鎖的全部程序;

2、逐個撤消陷於死鎖的程序,直到死鎖不存在;

3、從陷於死鎖的程序中逐個強迫放棄所占用的資源,直至死鎖消失。

4、從另外一些程序那裡強行剝奪足夠數量的資源分配給死鎖程序,以解除死鎖狀態

死鎖及其處理方法

死鎖 是指兩個或兩個以上的程序在執行過程中,由於競爭共享資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。死鎖發生的四個必要條件 1 互斥條件 指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直...

oracle死鎖處理方法

招數一 1.檢視被鎖的表 2.select p.spid,c.object name,b.session id,b.oracle username,b.os user name from v process p,v session a,v locked object b,all objects c ...

處理死鎖和預防死鎖的方法

目前,處理死鎖的方法可歸結為以下四種 1 預防死鎖。這是一種較為簡單和直觀的事先預防的方法。該方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或幾個條件,來預防發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但由於所施加的限制條件往往太嚴格,因而可能導致系統資源利用率和系統吞吐...