銀行家算法(The banker\'s algorithm)
該文簡述了銀行家算法的主要内容
銀行家算法主要用于解決死鎖問題,是一種基于靜态資源配置設定的死鎖檢測方法。
首先,我們為資源定義出三種狀态:
- 已被程序占用
- 程序資源需求最大值
- 系統可用資源
易見,(1)+(3)=系統資源總和
銀行家算法就是通過枚舉,驗證能否通過手頭上的可用資源,逐次滿足各程序需要,并釋放其占用資源,最終
實作所有程序的運作需要。
下面通過矩陣示範算法運作過程:
假設在某一狀态,有
程序 最大需求記憶體 需求列印機 | 已占用記憶體 已占用列印機
A 100 1 | 80 0
B 200 0 | 50 0
可用資源:
記憶體 列印機
150 1
可見,A的需求能夠滿足。假設A能順利運作并結束,則A釋放所占用資源,此時矩陣化為:
程序 最大需求記憶體 需求列印機 | 已占用記憶體 已占用列印機
A 100 1 | 80 0
B 200 0 | 50 0
可用資源:
記憶體 列印機
230 1
此時,B程序的需求也得到滿足,所有程序最後均順利結束。我們稱這種狀态為安全狀态(safe state)。反之,
則稱為不安全狀态(unsafe state)。不安全狀态隻是找不到一種合适的順序,可以在使用已有資源的情況下逐次滿足
*所有*程序的運作需要,但不一定導緻死鎖。下面假設兩種情況:
- 有A、B兩程序,目前可用資源無法滿足任一程序的需要,但A在運作時暫時釋放了所占用的資源,使得B得以結束,進而釋放更多資源,使得A順利結束。
- 有A、B、C三個程序,目前資源可以滿足A的運作需要,是以此時A并沒有陷入死鎖。
是以,安全狀态保證了一定不會發生死鎖,而不安全狀态沒有這個保證,僅此而已。在實際應用當中,往往不能預知程序所需的資源最大值,且資源的可用性
容易改變(例如列印機卡紙了),是以應用不廣。
相關連結:
死鎖:http://en.wikipedia.org/wiki/Deadlock
銀行家算法(英文):http://en.wikipedia.org/wiki/Banker%27s_algorithm
