死鎖

死鎖:

定義:

在多道程序環境下,多個進程可能競爭一定數量的資源。某個進程申請資源,如果這時資源不可用,那麼該進程進入等待進程。如果所申請的資源被其他等待進程佔有,那麼該等待進程有可能再也無法改變其狀態。這種情況稱爲死鎖。

條件(同時滿足):

1,互斥(資源):資源只能一個進程使用,其他進程申請只能等待

2,佔有並等待(進程):一個進程必須佔有一個資源並等待另一個資源,而等待的那個資源正在被使用

3,非搶佔(資源):資源不能被搶佔,資源只能在進程完成任務後自動釋放

4,循環等待(進程):a等待的資源被b佔有,b等待的資源被c佔有,,,n等待的資源被a佔有

處理方法:

一,使用協議以預防或避免死鎖,確保系統不會進出入死鎖狀態:

死鎖預防:確保死鎖成立的至少一個條件不成立,通過限制如何申請資源的方法來預防死鎖

1,互斥:不可解決,有的資源本身就是非共享資源。非共享資源必須要有互斥條件,共享資源不要求互斥訪問

2,佔有並等待:

1)每個進程執行前申請所有所需資源

2)進程沒有佔資源時才能申請

3,非搶佔:等待申請的資源時,隱式釋放已搶佔資源,若分配到了所申請資源,則恢復隱式釋放的資源

4,循環等待:對所有資源類型排序,每個進程只按資源類型遞增順序申請資源。

缺點:低設備使用率和吞吐率

死鎖避免:獲得以後如何申請資源的附加信息,有了每個進程的申請與釋放順序,可決定進程是否因申請而等待。每次申請要求系統考慮現有可用資源,現已分配給每個進程的資源和每個進程將來申請與釋放的資源,以決定當前申請是否滿足或必須等待,從而避免死鎖發生的可能性

死鎖避免動態地檢測資源分配狀態以確保循環等待條件不可能成立。資源分配狀態是由可用資源和已分配資源,及進程最大需求決定的

常用的方法:安全狀態,資源分配圖算法,銀行家算法

二,檢測恢復:

檢測:死鎖檢測算法:

等待圖:從資源分配圖中刪除所有資源類型節點,合併適當邊,就可以得到等待圖

當且僅當等待圖中有一個環,系統中存在死鎖。爲了檢測死鎖,系統需要維護等待圖,並週期性地調用在圖中進行搜索的算法

每次請求分配不能立即允許時就調用死鎖檢測算法,每次調用都會引起相當大的開銷,另一個不太昂貴的方法就是以一個不太高的頻率調用算法。

恢復:

1)通知操作員死鎖已經發生,人工處理死鎖

2)讓系統從死鎖狀態中自動恢復過來

 

終止死鎖的方法:

1)終止一個或者多個進程以打破循環等待

2)從一個或者多個死鎖進程那裏搶佔一個或者多個資源(1,選擇一個犧牲品進程;2,回滾;3,飢餓)

三,直接忽視

系統允許死鎖發生


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