死鎖産生的原因
産生死鎖的原因主要是:
(1) 因為系統資源不足。
(2) 程序運作推進的順序不合适。
(3) 資源配置設定不當等。
如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則
就會因争奪有限的資源而陷入死鎖。其次,程序運作推進順序與速度不同,也可能産生死鎖。
産生死鎖的四個必要條件:
(1) 互斥條件:一個資源每次隻能被一個程序使用。
(2) 請求與保持條件:一個程序因請求資源而阻塞時,對已獲得的資源保持不放。
(3) 不剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 循環等待條件:若幹程序之間形成一種頭尾相接的循環等待資源關系。
這四個條件是死鎖的必要條件,隻要系統發生死鎖,這些條件必然成立,而隻要上述條件之
一不滿足,就不會發生死鎖。
死鎖的幾種解決方案
預防死鎖:
資源一次性配置設定:(破壞請求和保持條件)
可剝奪資源:即當某程序新的資源未滿足時,釋放已占有的資源(破壞不可剝奪條件)
資源有序配置設定法:系統給每類資源賦予一個編号,每一個程序按編号遞增的順序請求資源,釋放則相反(破壞環路等待條件)
避免死鎖:
預防死鎖的幾種政策,會嚴重地損害系統性能。是以在避免死鎖時,要施加較弱的限制,進而獲得 較滿意的系統性能。由于在避免死鎖的政策中,允許程序動态地申請資源。因而,系統在進行資源配置設定之前預先計算資源配置設定的安全性。若此次配置設定不會導緻系統進入不安全狀态,則将資源配置設定給程序;否則,程序等待。
其中最具有代表性的避免死鎖算法是銀行家算法。
檢測死鎖:
首先為每個程序和每個資源指定一個唯一的号碼;
然後建立資源配置設定表和程序等待表。
解除死鎖:
當發現有程序死鎖後,便應立即把它從死鎖狀态中解脫出來,常采用的方法有:
剝奪資源:從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀态;
撤消程序:可以直接撤消死鎖程序或撤消代價最小的程序,直至有足夠的資源可用,死鎖狀态.消除為止;所謂代價是指優先級、運作代價、程序的重要性和價值等。