11.死鎖(deadlocks)

zhudachang發表於2024-04-28

死鎖的特徵

  1. 哲學家用餐死鎖問題
  • 哲學家死鎖當所有人同時拿到一側的筷子的時候,就會發生永久等待的現象
  1. DEADLOCK(死鎖的定義)
  • In a multiprogramming environment(多道程式設計環境),several(一些) process may compete(競爭) for a finite(有限) number of resources.(在多道程式設計環境中,一些程序可能會競爭有限數量的資源。)
  • A process requesets resources;if the resources are not available at the that time ,the process enters a waiting state.
  • Sometimes a waiting process is never again able to change state,because the resources it has requested are held by other waiting process.
  • this situation is called a deadlock.
  1. 死鎖與飢餓
  • 飢餓:程序長時間的等待。
    • e.g低優先順序程序總是等待高優先順序所佔有的程序。
  • 死鎖:迴圈等待資源
    • A和B分別佔有印表機和掃描器
    • 同時分別申請掃描器和印表機
  • 死鎖=>飢餓(但是飢餓無法推出死鎖)
    • 飢餓可能終止
    • 如果無外部干擾,死鎖無法終止
  1. 產生死鎖的四個必要條件
  • 互斥使用
    • 一個時刻,一個資源僅能被一個程序佔有。
  • 不可剝奪
    • 除了資源佔有程序主動釋放資源,其他程序都不可搶奪其資源。
  • 佔有和等待
    • 一個程序請求資源得不到滿足,等待時不釋放已佔有資源。
  • 迴圈等待(上面三個條件同時存在產生的結果)
    • 每一個程序分別等待它前一個程序所佔有的資源
  1. methonds for handling deadlocks(處理死鎖的方法)
  • Deadlocks are NOT allowed(允許) to appear(出現).We must prevent(預防) or avoid(避免) deadlock state.
  • Deadlocks are allowed to appear,but the system can detect(檢測) them and recover(恢復).
  • We pretend that deadlocks never occur(發生) in the system.(我們假裝系統從未發生死鎖)
  1. 死鎖的解決方案
  • 死鎖的防止(Prevention)
    • 破壞四個必要條件之一
  • 死鎖的避免(avoidance)
    • 允許四個必要條件同時發生,在併發程序中做出妥善安排避免死鎖的發生
  • 死鎖的檢測和恢復(dectection && recovery)
    • 允許死鎖的發生,系統及時地檢測死鎖並解除它。

死鎖的預防

  1. 破壞死鎖任一必要條件
  • 互斥使用=>允許資源共享使用
    • 這不太可行,鎖就是為了解決這個問題。
  • 不可剝奪=>資源可被搶奪
    • 雖然是有時間片,cpu的排程的方式,但是在軟體上去實現還是不可以行的。
  • 佔有和等待=>(一開始就把所有資源都申請了,或者是一個資源都不申請)
  • 迴圈等待=>(去對所有資源進行一個排序,高等級資源的申請的前提是已經擁有所有低等級的資源)

死鎖的避免

  1. 安全狀態(safe state)
  • A state is safe if the system can allocate(分配) resource resource to each process(up to its maximum(分配最大的資源)) in some order(以某一個特定的順序) and still avoid a deadlock.More formally ,a system is in a safe state only if there exists a safe sequence(安全序列).
  • If no such sequence exists,then the system state is said to be unsafe.(如果不存在任何一個安全序列,那麼系統就是不安全狀態)
    • A safe state is NOT a deadlocked state.(如果一個系統被評估為安全狀態,那麼它就不會存在死鎖狀態)
    • An unsafe state MAY lead to a deadlock.(一個不安全狀態的系統可能會導致死鎖)
  1. 死鎖的避免概念
  • 系統對程序的每一次資源申請都進行詳細的計算,根據結果決定是分配資源還是讓其等待,確保系統始終處於安全狀態,避免死鎖的發生。
  • 銀行家演算法(Banker's algorithm)
    • 已知系統中所有資源的種類和數量
    • 已知程序所需要的各類資源最大需求量
    • 該演算法可以計算出當前的系統狀態是否安全(尋找安全序列)
  • 安全演算法:只需要找到一個安全序列,那麼系統就處於安全狀態。
  1. 銀行家演算法的優缺點
  • 優點:允許死鎖必要條件同時存在
  • 缺點:缺乏實用價值
    • 程序執行前就要求知道其所需資源的最大數量。
    • 要求程序是無關的,若考慮同步情況,可能會打擾安全序列。
    • 要求進入系統的程序個數和資源固定。

死鎖的檢測

  1. 死鎖的檢測與恢復
  • 允許死鎖發生,作業系統不斷監測系統進展情況,判斷死鎖是否發生
  • 一旦死鎖發生則採取專門的措施,解除死鎖並以最小的代價恢復作業系統執行
  • 死鎖檢測時機
    • 當程序等待時檢測死鎖(系統開銷大):如果系統檢測到開銷很大,很多程序都在等待。
    • 定時檢測
    • 系統資源利用率下降時檢測死鎖
  1. 資源分配圖表示法
  • 資源類(資源的不同型別)(方框,幾個方框就有幾個類)
  • 資源例項(存在於每個資源中)(方框中的黑點)
  • 程序(圓形)
  • 申請邊(程序指向資源)
  • 分配邊(資源指向程序)
  1. 資源分配圖圖例
  • 無環一定不會出現死鎖,有環才有可能出現死鎖
  • 對於這個圖例,p3執行完成之後,就會釋放r2資源,那麼就不會形成死鎖現象了
  • 在該圖中一共有三個申請邊,然後都陷入迴圈等待狀態中,產生死鎖狀態。
  • 對於申請邊,r1的資源會被p2程序釋放出來,不會陷入一直迴圈等待狀態。
  1. 資源分配圖的簡化
  • 消除申請邊和分配邊
  • 根據程序的結束去釋放分配邊,然後去滿足申請邊,並消去申請邊。
  1. 死鎖定理
  • 如果能在“資源分配圖”中消去某程序的所有請求邊和分配邊,則稱該程序為孤立節點
    • 可完全簡化
    • 不可完全簡化
  • 系統為死鎖狀態的充分條件是:當前僅當該狀態的“程序-資源分配圖”是不可完全簡化的。該充分條件稱為死鎖定理。
  1. 死鎖的解除
  • 中止程序,強制回收資源
    • 交通問題:將某列火車吊起來
    • 哲學家問題:將某個哲學家射死
  • 剝奪資源,但是不終止程序
  • 程序回退(roll back)
    • 就像DVD的回退,好像最近一段時間什麼事情都沒發生
    • 交通問題:讓某列火車倒車
    • 哲學家問題:讓某個哲學家放下一個筷子
  • 重新啟動
    • 沒有辦法的辦法,但是一個肯定有效的問題
  1. 其實window系統態度是佛系態度,並不會干預程序。只是提供一個按鍵,給我們關閉它。

相關文章