死鎖

引發死鎖的條件:
必須滿足以下四種條件
1,互斥條件,每個資源要麼已經分配給一個進程,要麼就是可用的。
2,佔有等待條件,已經得到了某個資源的進程可以再請求新的資源
3,不可搶佔條件,已經分配給一個進程的資源不能強制的被搶佔,只能被佔有他的進程顯示的釋放
4,環路等待條件,死鎖發生時,系統中一定有兩個或者兩個以上的進程組成一環路,該環路中的每一個

進程都在等待下一個進程佔有的資源。

處理死鎖的策略:
1,忽略該問題,你忽略它,它也會忽略你
2,測試死鎖並恢復,讓死鎖發生,檢測,一旦檢測到,恢復
3,仔細對資源進行分配,動態避免死鎖
4,通過破壞四個死鎖條件之一

方法一對應的時鴕鳥算法,就是出現這種死鎖的可能性很低,比如操作系統的fork,可能5年出現一次,

而在這段過程中,因爲硬件等其它原因肯定要重新啓動機器,放棄fork損失太大,就可以忽略這種死鎖

,象鴕鳥一樣,把頭埋進沙子,當什麼都沒發生。

方法二:檢測並恢復
恢復方法有:
 搶佔恢復
 回退恢復
 殺死進程恢復
銀行家算法:
如果有4個人(A,B,C,D)去銀行貸款,銀行有金額10個單位,
A貸款最大爲6 ,A已經貸款1
B貸款最大爲5 ,B已經貸款1
C貸款最大爲4 ,C已經貸款2
D貸款最大爲7 ,D已經貸款4
這個時候只有C的請求能通過,因爲現在還有可用貸款2,只有C才能完成,然後釋放更多,來讓其它完成
這個時候如果給其它任何一個單位的貸款,那麼所有的人都不能達到需求,完成。
銀行家問題時個經典的問題,但是很少能得到實際的利用,因爲每個客戶自己都不知道自己需要多少資

源,同時,也不知道有多少個客戶。因爲不停的有用戶login ,logout

方法四:破壞條件
1,破壞互斥條件,不讓獨佔出現,
例如不讓一個用戶獨佔打印機,如spooling技術,讓多個用戶同時進入spooling
問題:可能在spooling中產生死鎖
2,破壞佔有等待條件
檢測這個進程需要的所有資源是不是可用,如果可用分配,不可用的話就等待
問題:進程要在開始知道自己需要多少資源,這樣可以使用銀行家算法完成。
但是資源利用不是最優。
3,破壞不可搶佔,這個實現起來最困難
4,破壞閉環
把所有資源編號,按照順序請求

飢餓:
與死鎖很接近的時飢餓
如果一個打印機的使用,是通過某種算法避免死鎖,但是每次都是最小文件先打印,這樣就可能產生一

種情況,大的文件永遠不能打印,飢餓而死。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章