四個必要條件:
處理方法:
死鎖檢測與死鎖恢復
程序 p1 和 p2 所請求的資源都得不到滿足,只有程序 p3 可以,讓 p3 執行,之後釋放 p3 擁有的資源,此時 a = (2 2 2 0)。p2 可以執行,執行後釋放 p2 擁有的資源,a = (4 2 2 1) 。p1 也可以執行。所有程序都可以順利執行,沒有死鎖。
演算法總結如下:
每個程序最開始時都不被標記,執行過程有可能被標記。當演算法結束時,任何沒有被標記的程序都是死鎖程序。
尋找乙個沒有標記的程序 pi,它所請求的資源小於等於 a。
如果找到了這樣乙個程序,那麼將 c 矩陣的第 i 行向量加到 a 中,標記該程序,並轉回 1。
如果沒有這樣乙個程序,演算法終止。
死鎖預防
破壞占用和等待條件
破壞不可搶占條件
破壞環路等待
死鎖避免
安全狀態:
圖a中的第二列has表示已擁有的資源數,max表示請求最大的資源數,free表示還有可以使用的資源數。從圖a開始出發,先讓b 擁有所需要的全部資源,然後釋放掉,然後再繼續c,a,當所有程序都能順利完畢就說明沒有死鎖。
狀態安全。
定義:如果沒有死鎖發生,並且即使所有程序突然請求對資源的最大需求,也仍然存在某種排程次序能夠使得每乙個程序執行完畢,則稱該狀態是安全的。
安全狀態的檢測與死鎖的檢測類似,因為安全狀態必須要求不能發生死鎖。下面的銀行家演算法與死鎖檢測演算法非常類似,可以結合著做參考對比。
單個資源的銀行家 演算法
上圖 c 為不安全狀態,因此演算法會拒絕之前的請求,從而避免進入圖 c 中的狀態。
3. 多個資源的銀行家演算法
上圖中有五個程序,四個資源。左邊的圖表示已經分配的資源,右邊的圖表示還需要分配的資源。最右邊的 e、p 以及 a 分別表示:總資源、已分配資源以及可用資源,注意這三個為向量,而不是具體數值,例如 a=(1020),表示 4 個資源分別還剩下 1/0/2/0。
檢查乙個狀態是否安全的演算法如下:
查詢右邊的矩陣是否存在一行小於等於向量 a。如果不存在這樣的行,那麼系統將會發生死鎖,狀態是不安全的。
假若找到這樣一行,將該程序標記為終止,並將其已分配資源加到 a 中。
重複以上兩步,直到所有程序都標記為終止,則狀態時安全的。
如果乙個狀態不是安全的,需要拒絕進入這個狀態。
作業系統死鎖
作業系統死鎖,在作業系統課程當中屬於比較關注的乙個知識點,在這裡做個簡單的梳理。死鎖的四個必要條件 作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的進 程協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能 繼續執行,否則就阻塞的情況。此時,若不借...
作業系統 死鎖
多執行緒以及多程序改善了系統資源的利用率並提高了系統 的處理能力。然而,併發執行也帶來了新的問題 死鎖。死鎖是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當前程序處於這種狀態時,若無外力作用,它們都將無法再向前推進。關於死鎖的一些結論 競爭資源 當系統中供多個程序共享的資源如印表機 公用佇列等...
作業系統 死鎖
把需要排他性使用的物件稱為資源。資源可以是硬體也可以是軟體,比如印表機或者資料庫中的乙個加鎖記錄。資源可以分為兩類 可搶占資源和不可搶占資源。搶占這個詞,在程序和執行緒排程時就提到了這個概念,那時是程序或者執行緒可以搶占cpu,即搶占式排程。儲存器也可以搶占,如記憶體換頁。一般來說,可搶占資源不會引...