死鎖及其解決方案(避免 預防 檢測)

2021-08-28 08:26:23 字數 1326 閱讀 4905

所謂死鎖:是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖

死鎖產生的原因?

1.因競爭資源發生死鎖 現象:系統中供多個程序共享的資源的數目不足以滿足全部程序的需要時,就會引起對諸資源的競爭而發生死鎖現象

2.程序推進順序不當發生死鎖

死鎖的四個必要條件:

(1)互斥條件:程序對所分配到的資源不允許其他程序進行訪問,若其他程序訪問該資源,只能等待,直至占有該資源的程序使用完成後釋放該資源

(2)請求和保持條件:程序獲得一定的資源之後,又對其他資源發出請求,但是該資源可能被其他程序占有,此事請求阻塞,但又對自己獲得的資源保持不放

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

(4)環路等待條件:是指程序發生死鎖後,必然存在乙個程序--資源之間的環形鏈

處理死鎖的基本方法

預防死鎖(破壞四個必要條件)

資源一次性分配:(破壞請求和保持條件)

可剝奪資源:即當某程序新的資源未滿足時,釋放已占有的資源(破壞不可剝奪條件)

資源有序分配法:系統給每類資源賦予乙個編號,每乙個程序按編號遞增的順序請求資源,釋放則相反(破壞環路等待條件)

避免死鎖(銀行家演算法):

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

檢測死鎖

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

然後建立資源分配表和程序等待表,例如:

解除死鎖:

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

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

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

死鎖 資源 檢測和恢復 避免 預防

資源 需要排他性使用的物件怕 隨著時間推移,必須獲得 使用以及釋放的任何東西 可搶占資源 可以從擁有的程序中搶占而不會產生任何 例如 儲存器 記憶體 死鎖與不可搶占資源有關,有關可搶占資源的潛在死鎖通常可通過在程序之間重新分配資源而化解。死鎖 如果一組程序中的每乙個程序都在等待僅由該組程序中的其它程...

死鎖的預防 避免 檢測 恢復

一組程序中每個程序都等待此組程序中其他程序所占有的,因而永遠無法得到的資源,這種現象稱為程序死鎖。產生的條件 上述條件同時滿足時,死鎖才會發生。根本原因是系統提供的資源個數小於併發程序所需的該類資源。可分為競爭資源產生的死鎖 程序通訊產生的死鎖 其他原因等。死鎖預防 靜態策略 死鎖避免 動態策略,不...

Oracle Job 死鎖解決方案

oracle執行定時job時,經常會遇到job意外死鎖,或者一些job執行的程式有對外的介面,當網路中斷或不穩定時,造成job死鎖,占用資源,以下為解決方法 如果不想job釋放後馬上又重新執行,請先將job在資料庫中broken 1.檢視正在執行job的job id sid serial spid資...