銀行家算法

⑴ 系統此時是否處於安全狀態?

①, 初始化,令Work = Available, Finish列全爲false

 進程 Max   Allocation Need Work Finish
R1  R2  R3  R4  R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4
P0  0    0    4    4 0    0    3    2 0    0    1    2 1    6    2    2 false
P1 2    7    5    0 1    0    0    0 1    7    5    0   false
P2 3    6  10  10 1    3    5    4 2    3    5    6   false
P3 0    9    8    4 0    3    3    2 0    6    5    2   false
P4 0    6    6  10 0    0    1    4 0    6    5    6   false

② Need1 ≤ Work, 所以將資源分配給P0,同時將Finish[0]改爲true, 如下圖:

 進程 Max   Allocation Need Work Finish
R1  R2  R3  R4  R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4
P0  0    0    4    4 0    0    3    2 0    0    1    2 1    6    6    6 true
P1 2    7    5    0 1    0    0    0 1    7    5    0   false
P2 3    6  10  10 1    3    5    4 2    3    5    6   false
P3 0    9    8    4 0    3    3    2 0    6    5    2   false
P4 0    6    6  10 0    0    1    4 0    6    5    6   false

③ Need3 ≤ Work,所以將資源分配給P3,同時將Finish[3]改爲true, 如下圖:

 進程 Max   Allocation Need Work Finish
R1  R2  R3  R4  R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4
P0  0    0    4    4 0    0    3    2 0    0    1    2   true
P1 2    7    5    0 1    0    0    0 1    7    5    0   false
P2 3    6  10  10 1    3    5    4 2    3    5    6   false
P3 0    9    8    4 0    3    3    2 0    6    5    2 1   15  14  10 true
P4 0    6    6  10 0    0    1    4 0    6    5    6   false

④ Need1 ≤ Work,所以將資源分配給P1,同時將Finish[1]改爲true, 如下圖:

 進程 Max   Allocation Need Work Finish
R1  R2  R3  R4  R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4
P0  0    0    4    4 0    0    3    2 0    0    1    2   true
P1 2    7    5    0 1    0    0    0 1    7    5    0 3   22   19   10 true
P2 3    6  10  10 1    3    5    4 2    3    5    6   false
P3 0    9    8    4 0    3    3    2 0    6    5    2   true
P4 0    6    6  10 0    0    1    4 0    6    5    6   false

⑤ Need2 ≤ Work,所以將資源分配給P2,同時將Finish[2]改爲true, 如下圖:

 進程 Max   Allocation Need Work Finish
R1  R2  R3  R4  R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4
P0  0    0    4    4 0    0    3    2 0    0    1    2   true
P1 2    7    5    0 1    0    0    0 1    7    5    0   true
P2 3    6  10  10 1    3    5    4 2    3    5    6 6   28   29   20 true
P3 0    9    8    4 0    3    3    2 0    6    5    2   true
P4 0    6    6  10 0    0    1    4 0    6    5    6   false

⑥ Need4 ≤ Work,所以將資源分配給P4,同時將Finish[4]改爲true, 如下圖:

 進程 Max   Allocation Need Work Finish
R1  R2  R3  R4  R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4
P0  0    0    4    4 0    0    3    2 0    0    1    2   true
P1 2    7    5    0 1    0    0    0 1    7    5    0   true
P2 3    6  10  10 1    3    5    4 2    3    5    6   true
P3 0    9    8    4 0    3    3    2 0    6    5    2   true
P4 0    6    6  10 0    0    1    4 0    6    5    6 6   34   35   30 true

⑵ 若此時P進程發出Request[1,2,2,2],系統能否將資源分配給它?

假設可以分配, 分配後如下圖:

 進程 Max   Allocation Need Work Finish
R1  R2  R3  R4  R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4 R1  R2  R3  R4
P0  0    0    4    4 0    0    3    2 0    0    1    2   false
P1 2    7    5    0 2    2    2    2 0    5    3    0 0    4    0    0 false
P2 3    6  10  10 1    3    5    4 2    3    5    6   false
P3 0    9    8    4 0    3    3    2 0    6    5    2   false
P4 0    6    6  10 0    0    1    4 0    6    5    6   false

這時候, 剩餘資源不能滿足P0~04任意進程所需要的資源,所以進入死鎖狀態。 所以:不能分配!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章