死鎖處理(哈工大李志軍)

在這裏插入圖片描述
若將執行順序換成紅字的順序:
Producer:

  1. 執行P(mutex) mutex 1->0
  2. 執行P(empty) empty 0->-1 阻塞
    Consumer:
  3. 執行P(mutex) mutex 0->-1,阻塞

Producer 脫離阻塞需要先執行Consumer: V(empty),在執行之前又依賴於P(full)P(full)的執行需要 Consumer 脫離阻塞,Consumer 脫離阻塞需要執行Producer: V(mutex),執行Producer: V(mutex)需要 Producer 脫離阻塞.

形成一種環路,造成死鎖。
死鎖:多個進程由於互相等待對方持有的資源而造成都無法執行的情況。
在這裏插入圖片描述

死鎖的處理方法:

死鎖預防:

例:預防火災
破壞死鎖出現的條件

  • 在進程執行前,一次性申請所有需要的資源,不會佔有資源再去申請其他資源。缺點:1. 需要預知未來,變成困難 2. 許多資源分配後很長時間後才使用,資源利用率低
  • 對資源類型進行排序,資源申請必須按序進行,不會出現環路等待。缺點:仍然造成資源浪費。

死鎖避免:

例:檢測到煤氣超標,自動切斷電源
檢測每個資源請求,如果造成死鎖就拒絕

銀行家算法:
佔有資源(Allocation),需求資源(Need),可分配資源(Available)
在這裏插入圖片描述
首先Avaliable(2,3,0),可以執行P1,執行完畢釋放資源後,Avaliable(2+3,3+0,0+2),可以執行P3,執行完畢釋放資源Avaliable(5+2,3+1,2+1),以此類推。
最後執行序列爲 A選項

實現:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
缺點:每次申請都執行銀行家算法 O(mn2)O(mn^2),效率太低

死鎖檢測+恢復:

例:出現火災,拿起滅火器
檢測到死鎖出現時,讓進程釋放資源,回滾狀態
在這裏插入圖片描述
缺點:回滾實現困難。

死鎖忽略:

例:在太陽上可以對火災全然不顧
假裝沒有死鎖
死鎖出現的條件不是確定的,又可以用重啓動處理死鎖。
在大多數非專門的操作系統都使用,如Unix,Linux 和 Windows 中都沒有死鎖處理

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