計算機作業系統 死鎖

2022-07-17 20:18:08 字數 1626 閱讀 6490

主要有以下四種方法:

把頭埋在沙子裡,假裝根本沒發生問題。

因為解決死鎖問題的代價很高,因此鴕鳥策略這種不採取任務措施的方案會獲得更高的效能。

當發生死鎖時不會對使用者造成多大影響,或發生死鎖的概率很低,可以採用鴕鳥策略。

大多數作業系統,包括 unix,linux 和 windows,處理死鎖問題的辦法僅僅是忽略它。

不試圖阻止死鎖,而是當檢測到死鎖發生時,採取措施進行恢復。

上圖為資源分配圖,其中方框表示資源,圓圈表示程序。資源指向程序表示該資源已經分配給該程序,程序指向資源表示程序請求獲取該資源。

圖 a 可以抽取出環,如圖 b,它滿足了環路等待條件,因此會發生死鎖。

每種型別乙個資源的死鎖檢測演算法是通過檢測有向圖是否存在環來實現,從乙個節點出發進行深度優先搜尋,對訪問過的節點進行標記,如果訪問了已經標記的節點,就表示有向圖存在環,也就是檢測到死鎖的發生。

上圖中,有三個程序四個資源,每個資料代表的含義如下:

程序 p1 和 p2 所請求的資源都得不到滿足,只有程序 p3 可以,讓 p3 執行,之後釋放 p3 擁有的資源,此時 a = (2 2 2 0)。p2 可以執行,執行後釋放 p2 擁有的資源,a = (4 2 2 1) 。p1 也可以執行。所有程序都可以順利執行,沒有死鎖。

演算法總結如下:

每個程序最開始時都不被標記,執行過程有可能被標記。當演算法結束時,任何沒有被標記的程序都是死鎖程序。

尋找乙個沒有標記的程序 pi,它所請求的資源小於等於 a。

如果找到了這樣乙個程序,那麼將 c 矩陣的第 i 行向量加到 a 中,標記該程序,並轉回 1。

如果沒有這樣乙個程序,演算法終止。

在程式執行之前預防發生死鎖。

例如假離線印表機技術允許若干個程序同時輸出,唯一真正請求物理印表機的程序是印表機守護程序。

一種實現方式是規定所有程序在開始執行前請求所需要的全部資源。

給資源統一編號,程序只能按編號順序來請求資源。

在程式執行時避免發生死鎖。

圖 a 的第二列 has 表示已擁有的資源數,第三列 max 表示總共需要的資源數,free 表示還有可以使用的資源數。從圖 a 開始出發,先讓 b 擁有所需的所有資源(圖 b),執行結束後釋放 b,此時 free 變為 5(圖 c);接著以同樣的方式執行 c 和 a,使得所有程序都能成功執行,因此可以稱圖 a 所示的狀態時安全的。

定義:如果沒有死鎖發生,並且即使所有程序突然請求對資源的最大需求,也仍然存在某種排程次序能夠使得每乙個程序執行完畢,則稱該狀態是安全的。

安全狀態的檢測與死鎖的檢測類似,因為安全狀態必須要求不能發生死鎖。下面的銀行家演算法與死鎖檢測演算法非常類似,可以結合著做參考對比。

乙個小城鎮的銀行家,他向一群客戶分別承諾了一定的貸款額度,演算法要做的是判斷對請求的滿足是否會進入不安全狀態,如果是,就拒絕請求;否則予以分配。

上圖 c 為不安全狀態,因此演算法會拒絕之前的請求,從而避免進入圖 c 中的狀態。

上圖中有五個程序,四個資源。左邊的圖表示已經分配的資源,右邊的圖表示還需要分配的資源。最右邊的 e、p 以及 a 分別表示:總資源、已分配資源以及可用資源,注意這三個為向量,而不是具體數值,例如 a=(1020),表示 4 個資源分別還剩下 1/0/2/0。

檢查乙個狀態是否安全的演算法如下:

如果乙個狀態不是安全的,需要拒絕進入這個狀態。

計算機作業系統 死鎖

目錄 死鎖的必要條件 死鎖的處理方法 鴕鳥策略 死鎖檢測與死鎖恢復 死鎖預防 破壞互斥條件 破壞占有和等待條件 破壞不可搶占條件 破壞環路等待 死鎖避免 四個必要條件 例如 執行緒a持有資源1,執行緒b持有資源2。假裝根本沒發生死鎖問題。因為解決死鎖問題的代價很高,因此鴕鳥策略這種不採取任務措施的方...

計算機作業系統 死鎖

死鎖預防 死鎖避免 主要有以下四種方法 把頭埋在沙子裡,假裝根本沒發生問題。因為解決死鎖問題的代價很高,因此鴕鳥策略這種不採取任務措施的方案會獲得更高的效能。當發生死鎖時不會對使用者造成多大影響,或發生死鎖的概率很低,可以採用鴕鳥策略。大多數作業系統,包括 unix,linux 和 windows,...

計算機作業系統(三)死鎖

死鎖預防 死鎖避免 主要有以下四種方法 把頭埋在沙子裡,假裝根本沒發生問題。因為解決死鎖問題的代價很高,因此鴕鳥策略這種不採取任務措施的方案會獲得更高的效能。當發生死鎖時不會對使用者造成多大影響,或發生死鎖的概率很低,可以採用鴕鳥策略。大多數作業系統,包括 unix,linux 和 windows,...