天天看點

銀行家算法(The banker\'s algorithm) - lifehacker

銀行家算法(The banker\'s algorithm)

該文簡述了銀行家算法的主要内容

銀行家算法主要用于解決死鎖問題,是一種基于靜态資源配置設定的死鎖檢測方法。

首先,我們為資源定義出三種狀态:

  1. 已被程序占用
  2. 程序資源需求最大值
  3. 系統可用資源

易見,(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)。不安全狀态隻是找不到一種合适的順序,可以在使用已有資源的情況下逐次滿足

*所有*程序的運作需要,但不一定導緻死鎖。下面假設兩種情況:

  1. 有A、B兩程序,目前可用資源無法滿足任一程序的需要,但A在運作時暫時釋放了所占用的資源,使得B得以結束,進而釋放更多資源,使得A順利結束。
  2. 有A、B、C三個程序,目前資源可以滿足A的運作需要,是以此時A并沒有陷入死鎖。

是以,安全狀态保證了一定不會發生死鎖,而不安全狀态沒有這個保證,僅此而已。在實際應用當中,往往不能預知程序所需的資源最大值,且資源的可用性

容易改變(例如列印機卡紙了),是以應用不廣。

相關連結:

死鎖:http://en.wikipedia.org/wiki/Deadlock

銀行家算法(英文):http://en.wikipedia.org/wiki/Banker%27s_algorithm

銀行家算法(The banker\'s algorithm) - lifehacker