死鎖及其解決方案(避免、預防、檢測)
所謂死鎖:是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖
死鎖產生的原因?
1.因競爭資源發生死鎖 現象:系統中供多個程序共享的資源的數目不足以滿足全部程序的需要時,就會引起對諸資源的競爭而發生死鎖現象
2.程序推進順序不當發生死鎖
死鎖的四個必要條件:
(1)互斥條件:程序對所分配到的資源不允許其他程序進行訪問,若其他程序訪問該資源,只能等待,直至佔有該資源的程序使用完成後釋放該資源
(2)請求和保持條件:程序獲得一定的資源之後,又對其他資源發出請求,但是該資源可能被其他程序佔有,此事請求阻塞,但又對自己獲得的資源保持不放
(3)不可剝奪條件:是指程序已獲得的資源,在未完成使用之前,不可被剝奪,只能在使用完後自己釋放
(4)環路等待條件:是指程序發生死鎖後,必然存在一個程序--資源之間的環形鏈
處理死鎖的基本方法預防死鎖(破壞四個必要條件):
資源一次性分配:(破壞請求和保持條件)
可剝奪資源:即當某程序新的資源未滿足時,釋放已佔有的資源(破壞不可剝奪條件)
資源有序分配法:系統給每類資源賦予一個編號,每一個程序按編號遞增的順序請求資源,釋放則相反(破壞環路等待條件)
避免死鎖(銀行家演算法):
預防死鎖的幾種策略,會嚴重地損害系統性能。因此在避免死鎖時,要施加較弱的限制,從而獲得 較滿意的系統性能。由於在避免死鎖的策略中,允許程序動態地申請資源。因而,系統在進行資源分配之前預先計算資源分配的安全性。若此次分配不會導致系統進入
檢測死鎖
首先為每個程序和每個資源指定一個唯一的號碼;
然後建立資源分配表和程序等待表,例如:
解除死鎖:
當發現有程序死鎖後,便應立即把它從死鎖狀態中解脫出來,常採用的方法有:
剝奪資源:從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀態;
撤消程序:可以直接撤消死鎖程序或撤消代價最小的程序,直至有足夠的資源可用,死鎖狀態.消除為止;所謂代價是指優先順序、執行代價、程序的重要性和價值等。