死鎖:
定義:
在多道程序環境下,多個進程可能競爭一定數量的資源。某個進程申請資源,如果這時資源不可用,那麼該進程進入等待進程。如果所申請的資源被其他等待進程佔有,那麼該等待進程有可能再也無法改變其狀態。這種情況稱爲死鎖。
條件(同時滿足):
1,互斥(資源):資源只能一個進程使用,其他進程申請只能等待
2,佔有並等待(進程):一個進程必須佔有一個資源並等待另一個資源,而等待的那個資源正在被使用
3,非搶佔(資源):資源不能被搶佔,資源只能在進程完成任務後自動釋放
4,循環等待(進程):a等待的資源被b佔有,b等待的資源被c佔有,,,n等待的資源被a佔有
處理方法:
一,使用協議以預防或避免死鎖,確保系統不會進出入死鎖狀態:
死鎖預防:確保死鎖成立的至少一個條件不成立,通過限制如何申請資源的方法來預防死鎖
1,互斥:不可解決,有的資源本身就是非共享資源。非共享資源必須要有互斥條件,共享資源不要求互斥訪問
2,佔有並等待:
1)每個進程執行前申請所有所需資源
2)進程沒有佔資源時才能申請
3,非搶佔:等待申請的資源時,隱式釋放已搶佔資源,若分配到了所申請資源,則恢復隱式釋放的資源
4,循環等待:對所有資源類型排序,每個進程只按資源類型遞增順序申請資源。
缺點:低設備使用率和吞吐率
死鎖避免:獲得以後如何申請資源的附加信息,有了每個進程的申請與釋放順序,可決定進程是否因申請而等待。每次申請要求系統考慮現有可用資源,現已分配給每個進程的資源和每個進程將來申請與釋放的資源,以決定當前申請是否滿足或必須等待,從而避免死鎖發生的可能性
死鎖避免動態地檢測資源分配狀態以確保循環等待條件不可能成立。資源分配狀態是由可用資源和已分配資源,及進程最大需求決定的
常用的方法:安全狀態,資源分配圖算法,銀行家算法
二,檢測恢復:
檢測:死鎖檢測算法:
等待圖:從資源分配圖中刪除所有資源類型節點,合併適當邊,就可以得到等待圖
當且僅當等待圖中有一個環,系統中存在死鎖。爲了檢測死鎖,系統需要維護等待圖,並週期性地調用在圖中進行搜索的算法
每次請求分配不能立即允許時就調用死鎖檢測算法,每次調用都會引起相當大的開銷,另一個不太昂貴的方法就是以一個不太高的頻率調用算法。
恢復:
1)通知操作員死鎖已經發生,人工處理死鎖
2)讓系統從死鎖狀態中自動恢復過來
終止死鎖的方法:
1)終止一個或者多個進程以打破循環等待
2)從一個或者多個死鎖進程那裏搶佔一個或者多個資源(1,選擇一個犧牲品進程;2,回滾;3,飢餓)
三,直接忽視
系統允許死鎖發生