計算及作業系統 死鎖

2021-09-26 10:15:26 字數 1716 閱讀 8458

什麼是死鎖

死鎖形成的原因

死鎖的必要條件

死鎖的預防

死鎖指的是兩個或兩個以上的程序在執行過程中,因為爭奪資源而造成一種互相等待的狀態,如果不借助外力的話他們將無法推進下去。在多工作業系統中,作業系統為了協調不同行程,能否獲取系統資源時,為了讓系統運作,必須要解決問題。

系統資源不足。

程序執行推進的順序不合適。

資源分配不等。

死鎖只有在四個必要條件同事滿足時出現。預防死鎖就是至少破壞這四個條件其中之一,即破壞「互斥」,「不可搶占」,「迴圈等待」,「占有和等待」

處理方法

鴕鳥策略

把投埋進沙子裡,假裝沒有發生問題。

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

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

死鎖檢測與死鎖恢復

1.每種型別乙個資源的死鎖檢測

此取自cyc2018的github

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

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

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

2.每種型別多個資源的死鎖檢測

此取自cyc2018的github

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

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

演算法總結如下:

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

死鎖恢復

死鎖預防

死鎖的預防是保證系統不進入死鎖狀態的一種策略,它的基本思想是要求程序申請資源時遵循某種協議,從而打破產生死鎖的四個條件中的乙個或多個,保證系統不會進入死鎖狀態。

安全序列

銀行家演算法

是乙個著名的避免死鎖的演算法

問題描述:乙個銀行家擁有一定數量的資金,有若干個客戶要貸款,每個客戶需要在一開始貸款之前申明自己所需貸款的總額,若該客戶貸款總額不超過銀行家的資金總數,銀行家可以接受客戶的要求。客戶在減貸款之前可能會等待,但是銀行家需要保證這種等待是有限的,可完成的。

銀行家演算法允許死鎖必要條件的互斥,占有和等待,不可搶占的存在,這樣它與預防死鎖的幾種方法相比較,限制條件少了,資源利用程度提高了。

銀行家演算法的缺點:

1.要求客戶數保持不變,這在多道程式中難以做到。

2.這個演算法保證所有客戶在有限的時間內得到滿足,但實時客戶要求快速響應,所以要考慮這個因素。(分配的時間得不到保證)

3.由於要尋找乙個安全序列,實際上增加了系統的開銷。

計算機作業系統 死鎖

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

計算機作業系統 死鎖

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

計算機作業系統 死鎖

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