銀行家演算法(banker』s algorithm)是乙個避免死鎖(deadlock)的著名演算法,是由艾茲格·迪傑斯特拉在2023年為t.h.e系統設計的一種避免死鎖產生的演算法。它以銀行借貸系統的分配策略為基礎,判斷並保證系統的安全執行。
設系統中有3種型別的資源(a,b,c)和5個程序(p1,p2,p3,p4,p5),a資源的數量是17,b資源的數量是6,c資源的數量是19。在t0時刻系統的狀態如下表:
程序最大資源需求量(max)
已分配資源量(allocation)
p14,0,11
4,0,5
p25,3,6
4,0,2
p34,2,5
2,1,4
p45,5,9
2,1,2
p54,2,4
3,1,3
系統採用銀行家演算法實施死鎖避免策略,若當前系統剩餘資源(a,b,c)分別為(2,3,3),下列哪乙個序列不是安全序列?
a) p5,p1,p4,p2,p3
b) p3,p2,p4,p1,p5
c) p5,p4,p3,p2,p1
d) p4,p5,p1,p2,p3
由題目條件可以看出,此時5個程序和剩餘資源的總和與題幹中資源數量相當(有時題目不會給當前剩餘資源需要自己算),另外我們需要算出每個程序需要的資源 need = max - allocation
那麼完整的程序資訊可以寫為
程序最大資源需求量(max)
已分配資源量(allocation)
需要資源量(need)
p14,0,11
4,0,5
0,0,6
p25,3,6
4,0,2
1,3,4
p34,2,5
2,1,4
2,1,1
p45,5,9
2,1,2
3,4,7
p54,2,4
3,1,3
1,1,1
下面就是程序順序分配的問題
在程序分配的過程中,需要注意的變數有:可用於工作的資源量(work),已分配資源量(allocation),需要資源量(need)和判斷安全的標識(flag),其中flag的變化決定了這一程序順序是否安全。
下面以a選項為例展示判斷程序安全與否的過程
程序work
allocation
need
work+allocation
flag
p52,3,3
3,1,3
1,1,1
5,4,6
true
p15,4,6
4,0,5
0,0,6
9,4,11
true
p49,4,11
2,1,2
3,4,7
11,5,13
true
p211,5,13
4,0,2
1,3,4
15,5,15
true
p315,5,15
2,1,4
2,1,1
17,6,19
true
在程序執行的過程中,初始work = 當前剩餘資源,而由於當前程序結束後不僅當前程序所使用的資源會被釋放,本身分配給此程序的資源也同樣會被釋放用於下一程序,所以下一程序 i+1的可用資源有:work(i+1) = work(i) + allocation(i)這一式子,而判斷下一程序 i+1是否安全,flag是否為true的判斷標準即此程序所需要的資源是否在可使用資源的範圍內,即是否滿足 need(i+1) ≤ work(i+1),當所有程序後標識均為true,可以認為此序列為安全序列。因此在採用銀行家演算法可知此題選擇d。
銀行家演算法
我們可以把作業系統看作是銀行家,作業系統管理的資源相當於銀行家管理的資金,程序向作業系統請求分配資源相當於使用者向銀行家貸款。為保證資金的安全,銀行家規定 1 當乙個顧客對資金的最大需求量不超過銀行家現有的資金時就可接納該顧客 2 顧客可以分期貸款,但貸款的總數不能超過最大需求量 3 當銀行家現有的...
銀行家演算法
銀行家演算法 banker s algorithm 是乙個避免死鎖 deadlock 的著名演算法,是由艾茲格 迪傑斯特拉在1965年為t.h.e系統設計的一種避免死鎖產生的演算法。它以銀行借貸系統的分配策略為基礎,判斷並保證系統的安全執行。就像我們從銀行貸快一樣,首先銀行會考慮到我們有沒有償還能力...
銀行家演算法
死鎖是作業系統層面的乙個錯誤,是程序死鎖的簡稱,最早在 1965 年由 dijkstra 在研究銀行家演算法時提出的,它是計算機作業系統乃至整個併發程式設計領域最難處理的問題之一。事實上,計算機世界有很多事情需要多執行緒方式去解決,因為這樣才能最大程度上利用資源,才能體現出計算的高效。但是,實際上來...