操作系統之死鎖

1. 產生死鎖的必要條件

  • 互斥:任何時刻只能有一個進程使用一個資源實例。
  • 持有並等待:進程保持至少一個資源,並正在等待獲取其他進程持有的資源。
  • 非搶佔:資源只能在進程使用後自願釋放。
  • 循環等待。

2. 處理方法

鴕鳥策略:把頭埋在沙子裏,假裝根本沒發生問題。

死鎖預防:確保系統永遠不會進入死鎖狀態。

  • 破壞互斥條件:把互斥的共享資源封裝成可同時訪問。
  • 破壞佔有和等待條件:進程請求資源時,要求它不持有任何其他資源;僅允許進程在開始執行時,一次請求所有需要的資源。
  • 破壞不可搶佔條件:如進程請求不能立即分配的資源,則釋放已有佔有資源;只在能夠同時獲得所有所需資源時,才執行分配操作。
  • 破壞環路等待:對資源排序,要求進程按順序請求資源。

死鎖避免:在使用前進行判斷,只允許不會出現死鎖的進程請求資源。
銀行家算法:
如果沒有死鎖發生,並且即使所有進程突然請求對資源的最大需求,也仍然存在某種調度次序能夠使得每一個進程運行完畢,則稱該狀態是安全的。如果一個狀態不是安全的,需要拒絕進入這個狀態。

死鎖檢測和恢復:在檢測到運行系統進入死鎖狀態後,進行恢復。
檢測:每種類型一個資源的死鎖檢測可採用有向圖環路檢測算法;每種類型多個資源的死鎖檢測採用基於矩陣的算法。
恢復:進程終止;資源搶佔;進程回退。

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