死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序程序在使用資源之前必須先申請資源,在使用資源之後要釋放資源。程序所申請的資源數量不能超過系統所有資源的總量。
在正常操作模式下,程序只能按如下順序使用資源:
①申請:如果申請不能立即被允許,那麼申請程序必須等待,直到它獲得該資源為止。
②使用:程序對資源進行操作。
③釋放:程序釋放資源
下面四個同時滿足就會死鎖
系統資源分配圖是一種用於精確描述死鎖問題的有向圖,這個圖的點有兩類
表示方法:
程序pi已經申請了rj的乙個例項,並正在等待該資源:pi->rj,稱為申請邊
資源型別rj的乙個例項已經分配給了程序pi:rj->pi,稱為分配邊
申請邊和分配邊不同時存在與兩點之間,當該申請可以得到滿足時,申請邊立即轉換為分配邊
根據資源分配圖的定義,可以用該圖簡單的判斷是否有死鎖:
如果資源分配圖沒有環,那麼一定沒有死鎖從原理上,有一下幾種方法:如果資源分配圖有環,那麼如果所有的資源只有乙個例項,那麼一定會發生死鎖。
如果資源分配圖有環,但一些資源的例項不止乙個,那麼不一定會發生死鎖。
使用協議預防和避免死鎖,確保系統不會進入死鎖
允許系統進入死鎖狀態,但能檢測它,並加以恢復
忽視這種問題,認為死鎖不可能在系統內發生(多為作業系統採用的方法)
死鎖預防是確保死鎖發生的必要條件不全被滿足,每個條件都可以採取一些手段來避免
通常不能通過否定互斥條件來預防死鎖,有的資源本身就是非共享的為了確保這一條件不發生,需要保證:當乙個程序申請乙個資源的時候,它不能占有其他資源,對於這一要求,有以下協議可以採用:
每個程序在開始的時候就申請所有需要的資源,從而確保如果乙個程序如果無法申請到應得的資源就不會呼叫。(實現要求申請資源的系統呼叫在所有其他系統呼叫之前進行)
要求程序在沒有資源時才能申請資源。乙個程序在任意時刻都能申請資源,但必須確保他釋放了其他的資源。(用完就丟)
這兩種協議的有兩個主要缺點:
資源利用率低,許多資源可能已分配,但很長時間沒有被使用
可能導發生飢餓,如乙個程序需要多個資源,但因為有乙個資源沒有辦法申請而永久等待
為了確保這一條件,有乙個協議可以解決:
如果乙個程序申請了另乙個不能立即分配的資源,處於等待狀態,那麼這個程序現已分配的其他任何資源都可被搶占
這是最後乙個條件,要確保此條件不成立的方法是對所有資源型別進行完全排序。並要求每個程序按遞增順序申請資源。
給所有的資源分配乙個不同的整數,以進行排序,乙個程序開始的時候可以申請任意資源,假設資源對應的整數是ri,那麼其後申請的任意資源rj必須滿足rj > ri,除非ri得到釋放
死鎖預防普遍的***是低裝置利用率和系統吞吐率。安全序列:
如果系統能按某個順序為每個程序分配資源(不超過最大值)並能避免死鎖,那麼系統狀態就是安全的,即如果存在乙個安全序列,那麼系統就處於安全狀態。否則系統處於不安全狀態
不安全狀態不是死鎖狀態,兩者是包含於被包含的關係。可以通過乙個例項來看一下安全狀態和不安全狀態
程序最大需求
情況1(安全)
情況2(不安全)
p01055
p1422
p2923
假設現在的最大資源總數為12,情況1時系統處於安全狀態。情況2時是危險狀態
程序終止後,這個程序占有的所有資源都會被**。
以及程序終止有兩種方式:
終止所有產生死鎖的程序。這樣可以保證終止了死鎖,但是很明顯代價很大,因為恢復後可能很多計算過程都需要重新完成。
一次終止乙個程序直到死鎖狀態被打破。但這種方法開銷很大,因為每結束乙個程序,都需要呼叫檢測演算法檢查程序是否仍然處於死鎖中。
因此如何終止程序是乙個經濟問題,也就是如何讓程序終止後的代價最小化,這需要考慮多個方面,包括但不限於:程序優先順序、程序已執行時間、程序當前使用資源數,程序最大資源需求、程序是否互動、需要終止的程序數量。
通過搶占乙個程序的資源給其他程序,從而一步步打破死鎖。這乙個辦法需要處理的問題有三個:
選擇乙個犧牲品。要搶占資源,需要判斷搶占哪乙個程序的資源,這同樣是乙個「代價最小」的問題。
回滾。當乙個程序被另乙個程序搶占資源的時候,需要對該程序進行一定的處理,很顯然因為缺少資源,該程序不能正常執行,那麼就需要讓該程序回滾到乙個狀態以便最後能重新執行。
飢餓。當基於乙個策略來判斷誰來作為被搶占資源的程序時,同乙個程序很容易被反覆選中作為被搶占資源的程序(破窗效應),這是搶占資源的演算法需要考慮的問題。乙個方法是在代價因素中加入乙個程序的回滾次數。
作業系統 第七章 死鎖
死鎖問題 color 原因 例 系統模型 每一種資源ri有wi種例項 每乙個程序通過如下順序來使用資源 使用資源 釋放資源 必要條件 資源分配圖 申請邊 有向邊pi rj,表示程序pi申請了資源rj的乙個例項 分配邊 有向邊rj pi,表示資源rj的乙個例項分配給程序pi 例 有環但沒有死鎖的資源分...
作業系統導論第七章
tags categories 作業系統該如何決定切換程序?如何執行程序使得效率最大化?more 1 周轉時間 t 周轉 時間 t 完成時間 t到達 時間t t t t周轉時間 t完成 時間 t到達時 間 2 響應時間 t 響應 時間 t 第一次執 行時間 t到達時 間t t t t響應時間 t第一...
作業系統筆記整理 第七章 檔案管理
檔案管理 把所管理的程式和資料組織成一系列的檔案,並能進行合理的儲存 使用等操作。資料項 描述物件某種屬性的字符集 是資料組織中可以命名的最小邏輯資料單位。關鍵字 乙個記錄中的乙個或幾個資料項的集合,用於唯一的標識乙個記錄。檔案讀寫操作 檢索 讀寫 開啟 每次讀寫前都要重複檢索增大開銷。所以為了方便...