1. 程式人生 > >銀行家算法實例(轉)

銀行家算法實例(轉)

要花 borde csdn 哪些 先來 判斷 單純 運行期 net

  在網上找了一篇不可多的的講銀行家算法的例題的博文,mark下來。作者寫的還是不錯,簡單易懂,比單純講含義要實用的多。

轉自:

木軒琰的博客

最近開始備考計算機四級,基本沒有遇到什麽問題,感覺計算機四級就是考理解型記憶力,銀行家算法的題算是在計算機四級裏少有的計算題。

例1.設系統中有三種類型的資源(A,B,C)和五個進程(P1,P2,P3,P4,P5),A資源的數量是17,B資源的數量是6,C資源的數量為19。在T0時刻系統的狀態如下表:

最大資源需求量

已分配資源量

A,B,C

A,B,C

P1

4,0,11

4,0,5

P2

5,3,6

4,0,2

P3

4,2,5

2,1,4

P4

5,5,9

2,1,2

P5

4,2,4

3,1,3

系統采用銀行家算法實施死鎖避免策略,若當前系統剩余資源(A,B,C)分別為(2,3,3),下列哪一個序列是安全序列?

A.P3,P1,P4,P2,P5

B.P1,P3,P5,P2,P4

C.P4,P2,P3,P5,P1

D.P2,P3,P1,P4,P5

幾乎所有關於銀行家算法的單選題的數據都差不多,在解這道題之前先來解釋一下什麽是安全序列。安全序列是指一個進程序列{P1,…,Pn}是安全的,即對於每一個進程Pi(1≤i≤n),它以後尚需要的資源量不超過系統當前剩余資源量與所有進程Pj (j < i )當前占有資源量之和。這句話說得比較抽象,在解析過程中我們進行理解。

解析:我們首先算出各個進程尚需要的資源量,尚需要的資源量=最大資源需求量-已分配資源量,由此可得各進程尚需要的資源量為

P1 P2 P3 P4 P5
A,B,C 0,0,6 1,3,4 2,1,1 3,4,7 1,1,1

接下來,我們分析選項A,P3需要的資源量為(2,1,1),而系統剩余資源為(2,3,3),因此進程P3進程得以完成,並且釋放它占有的資源量,即已分配資源量,此時系統剩余資源量為(2+2,3+1,3+4)=(4,4,7),(4,4,7)大於(或等於)其它所有進程(即P1,P1,P2,P4,P5)尚需要的資源量(註意,這裏的“大於”指的是A,B,C三類分別大於),因此選項A的序列是安全序列

選項B:P1需要的資源為(0,0,6),顯然系統剩余資源不滿足條件,B為不安全序列。

選項C:P4需要的資源為(3,4,7),顯然系統剩余資源不滿足條件,C為不安全序列。

選項D:P2需要的資源為(1,3,4),顯然系統剩余資源部滿足條件,D為不安全序列。

幾乎所有銀行家算法的單選題都可以用上述方法一眼秒殺,當然這只是計算機四級的前奏,在單選題中,我們可以通過排除法輕松地選出答案,但是計算機四級是有多選題的,多選題的銀行家算法可能就得花上一分多鐘去判斷出正確選項,一定要仔細再仔細,腦袋轉不過來極有可能出錯。以下是一道關於銀行家算法的多選題,自己感受一下吧,也是so easy的。

例2.某操作系統的當前資源分配如下表所示。

進程

最大資源需求

已分配資源數量

R1 R2 R3

R1 R2 R3

P1

7 5 3

0 1 0

P2

3 2 2

2 0 0

P3

9 0 2

3 0 2

P4

2 2 2

2 1 1

P5

4 3 3

0 0 2

假設當前系統可用資源R1、R2和R3的數量為(3,3,2),且該系統目前處於安全狀態,那麽下列哪些是安全序列?

A.P2P4P5P1P3

B.P2P4P5P3P1

C.P4P1P2P3P5

D.P3P2P5P4P1

E.P4P2P3P5P1

解析:方法參見例1.

答案:ABE

關於銀行家算法的拓展說明:(以下內容為《全國計算機等級考試四級教程——操作系統原理》原文)

銀行家算法是通過動態地檢測系統中資源分配情況和進程對資源的需求情況來決定如何分配資源的,在能確保系統處於安全狀態時才把資源分配給申請者,從而避免系統發生死鎖。由於銀行家算法是在系統運行期間實施的,要花費相當多的時間,該算法需要m×n2操作。銀行家算法要求每類資源的數量是固定不變的,而且必須事先知道資源的最大需求量,這難以做到。不安全狀態並非一定是死鎖狀態,如果一個進程申請的資源當前是可用的,但該進程必須等待,這樣資源利用率會下降。

銀行家算法實例(轉)