死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。
避免死鎖演算法中最有代表性的演算法是dijkstra e.w 於2023年提出的銀行家演算法:
下面我們將從例題中一點一點的分析:
解題:圖中有四種資源,分別是 a、b、c、d。題中只是給出了每個資源的總數量,沒有給出剩餘資源數(一般題中會給出),那麼我們將它求出,每個資源總數減去每個資源已被分配資源數就得到各自資源的剩餘資源數。
這裡得出的是:
a 資源已被分配2,
b資源已被分配6,
c資源已被分配12,
d資源已被分配12。
那麼總數量減去已被分配的得出:
a資源3-2=1
b資源12-6=6
c資源14-12=2
d資源14-12=2
最後得到初始剩餘資源數(1,6,2,2)
我們先檢查a選項
p1 p4 p5 p2 p3
第乙個是程序p1
我們可以在第二步看出
程序p1需求的資源數量為(0,0,1,2)
那麼初始初始剩餘資源數(1,6,2,2)每個值大於(0,0,1,2),那麼p1是安全序列。
第二個是程序p4
我們將上乙個程序的剩餘資源數(1,6,2,2)加上上乙個程序的已分配資源數量(0,0,3,2)得出剩餘資源量(1,6,5,4)
將剩餘資源量(1,6,5,4)與p4需求資源量(0,6,5,2)相比較,每個值都大於。那麼p4是安全序列
第三個是程序p5
我們將上乙個程序的 剩餘資源量 **(1,6,5,4)**加上上乙個程序的已分配資源數量 **(0,3,3,2)**得出剩餘資源數
(1,9,8,6)
將剩餘資源數(1,9,8,6)與p5需求資源量(0,6,5,6)相比較,每個值都大於。那麼p5是安全序列
第四個是程序p2
我們將上乙個程序的 剩餘資源量 **(1,9,8,6)**加上上乙個程序的已分配資源數量 **(0,0,1,4)**得出剩餘資源數
(1,9,9,10)
將剩餘資源數 **(1,9,9,10)**與p2需求資源量(1,7,5,0)相比較,每個值都大於。那麼p2是安全序列
最後乙個是程序p3
我們將上乙個程序的 剩餘資源量 **(1,9,9,10)**加上上乙個程序的已分配資源數量 **(1,0,0,0)**得出剩餘資源數
(2,9,9,10)
將剩餘資源數 **(2,9,9,10)**與p3需求資源量(2,3,5,6)相比較,每個值都大於。那麼p3是安全序列
那麼a選項正確
按照這個思路,b選項也正確,b選項只是將程序p5跟p2調換了位置。
其餘不正確。
總結:剩餘的資源數大於或者等於程序需求的資源數才是安全序列。
剩餘的資源數:剩餘資源數量=資源的數量-已分配資源數量
需求資源數:最大資源需求量-已分配資源數量
銀行家演算法解決死鎖
you死鎖 產生死鎖的根本原因在於系統提供的資源個數少於併發程序所要求的該類資源數。產生死鎖有四個必要條件 1.互斥條件 2.不可搶占條件 3.保持和等待條件 部分分配條件 4.迴圈等待條件 1.互斥條件 即乙個資源每次只能被乙個程序使用 2.保持和等待條件 有乙個程序已獲得了一些資源,但因請求其他...
死鎖,銀行家演算法
我們知道作業系統中很多種資源,如cpu,記憶體,io裝置等,每種資源又有很多例項,對於這些資源,程序該如何訪問?請求 獲取 申請空閒資源 使用 占用 程序占用資源 釋放 資源狀態由占用變為空閒 為了更好的了解死鎖,我們將資源分類 1 預防死鎖。這是一種較簡單和直觀的事先預防的方法。方法是通過設定某些...
死鎖與銀行家演算法
死鎖定義 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。死鎖條件 1 互斥條件 指程序對所分配到的資源進行排它性使用,即在一段時間內某資源...