操作系統面試—死鎖(三)——死鎖檢測和死鎖恢復

本文是對操作系統概念(第七版)——死鎖的學習總結,不足之處,歡迎批評指正。

本文討論的兩塊內容是死鎖檢測和死鎖恢復。

1、死鎖檢測

首先針對每種資源類型只有一個實例的情況。

該算法使用資源分配圖的一個變種,稱爲等待圖。從資源分配圖中,刪除所有資源類型的節點,合併合適邊,就可以得到等待圖。

合併的過程如下:如果pi指向資源rj,而rj右指向pk,那麼刪除節點rj之後,直接得到pi->pk這樣的結果。當前僅當等待圖中有一個環,系統中存在死鎖。檢測環的算法複雜度爲o(n^2)

第二種情況是每種資源類型還有多個實例的情況

這種算法和銀行家算法是類似的。具體內容見上篇文章的銀行家算法。不同的是在第(4)步:

如果對某個i,finish[i]=false,那麼說明系統處於死鎖狀態,且進程i死鎖,時間複雜度爲o(m*n^2)。

2、死鎖恢復

打破死鎖有兩種方法:

(1)簡單地終止一個或多個進程以打破循環等待。——進程終止

(2)從一個或多個死鎖進程那裏搶佔一個或多個資源。——資源搶佔

進程終止有以下兩中方法:

(i)終止所有死鎖進程。

(II)一次只終止一個進程直到取消死鎖循環爲止。

如果選擇資源搶佔,那麼將必須考慮三個問題:

(i)選擇一個犧牲品

(II)回滾

(III)飢餓(在代價因素中加上回滾次數,回滾的越多則越不可能繼續被作爲犧牲品)

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