死鎖

死鎖:算法

定義:安全

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

條件(同時知足):spa

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

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

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

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

處理方法:class

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

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

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

2,佔有並等待:

1)每一個進程執行前申請全部所需資源

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

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

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

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

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

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

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

二,檢測恢復:

檢測:死鎖檢測算法:

等待圖:從資源分配圖中刪除全部資源類型節點,合併適當邊,就能夠獲得等待圖

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

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

恢復:

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

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

 

終止死鎖的方法:

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

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

三,直接忽視

系統容許死鎖發生

相關文章
相關標籤/搜索