死鎖

一、死鎖產生的4個條件:
1.互斥條件:資源是獨佔的且排他使用,進程互斥使用資源,即任意時刻一個資源只能給一個進程使用,其他進程若申請一個資源,而該資源被另一進程佔有時,則申請者等待直到資源被佔有者釋放
2.不可剝奪條件:進程未使用完的資源不能被其他進程剝奪,只能由自己釋放
3.阻塞和保持條件:進程每次申請它所需要的一部分資源,在申請新的資源的同時,繼續佔用已分配到的資源。
4.循環阻塞條件:多個進程循環鏈,每個進程在等待下一個進程釋放資源。在發生死鎖時必然存在一個進程等待隊列{P1,P2,…,Pn},其中P1等待P2佔有的資源,P2等待P3佔有的資源,…,Pn等待P1佔有的資源,形成一個進程等待環路,環路中每一個進程所佔有的資源同時被另一個申請,也就是前一個進程佔有後一個進程所申請地資源
當死鎖產生時,4個條件必定同時存在
二、死鎖產生的原因:
1.系統資源配置不足,引起進程爭奪資源
2.系統各併發進程請求資源的隨機性
3.各進程在系統中異步向前推進,造成進程推進順序的非法性(進程行進速度)
二、解決死鎖的方法有4種:
1.忽略不計,出現死鎖時,重啓啓動系統
1)殺死進程
2)重啓機器
2.預防死鎖,通過破壞死鎖的4個必要條件

1)破壞互斥條件
資源是否共享由資源本身性質決定,不能破壞
將一臺獨享設備改造成多臺設備,滿足多個進程共享

2)破壞阻塞和保持條件
進程開始運行前,必須獲得全部資源,如果系統不能滿足,則該進程等待
系統合理的分配資源給各個進程

3)破壞不可剝奪條件
進程進入阻塞狀態前強行使其他進程釋放資源,這個辦法不可行,因爲保護進程放棄資源時的現場以及以後現場恢復,系統付出代價很高

4)破壞循環阻塞條件
採用有序分配資源,將系統全部資源按類進行全局編號排序

通常微型計算機採用1,2這兩種方法

3.避免死鎖,進程請求分配資源時,採用銀行家算法防止系統進入不安全狀態
系統確定是安全狀態纔給進程分配資源

4.檢測和恢復死鎖,通過設置一個死鎖檢測機構,進行死鎖檢測,一旦檢測出系統存在死鎖,通過逐一撤銷進程等方法使系統恢復。
1)死鎖的檢測

2)死鎖的恢復
①終止一些進程
a.殺死所有死鎖進程,原先計算作廢,以後重新計算
b.殺死一個進程,後期需要進行探測,是否死鎖已經解除
②資源剝奪
a.掛起進程並剝奪資源給另一個進程使用(依賴於進程本身特性是否容易重新得到資源)
b.回滾一些進程,將不在環路(不是死鎖)的進程設置到沒有獲得資源時的狀態,把這個資源分配給死鎖的進程

https://www.cnblogs.com/withscorpion/p/9454490.html

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