一、数据结构
- 可利用资源向量Availiable
- 最大需求矩阵Max
- 分配矩阵Allocation
- 需求矩阵Need
注:Need [i,j] = Max [i,j] - Allocation [i,j]
二、算法介绍
1. 银行家算法
(1)如果Request(i) [j] <= Need [i,j],下一步
(2)如果Rquest(i) [i,j] <= Available [j],下一步
(3)尝试分配,修改数据结构
Available [j] = Available [j] - Request(i)[j]
Allocation [i,j] = Allocation [i,j] + Request(i)[j]
Need [i,j] = Need [i,j] - Request(i)[j]
(4)安全性算法
2. 安全性算法
(1)设置变量工作变量Work = Available,Finish:false
(2)寻找满足下列规则的进程
Finish [i] = false
Need [i,j] <= Work [j]
找到进行步骤三,否则步骤四
(3)进程获得资源,可顺利执行,执行下列步骤
Work [i,j] = Work [i,j] + Allocation [i,j]
Finish [i] = true
(4)如果所有进程Finish [i] = true,安全,否则不安全
三、例子
五个进程{P0,P1,P2,P3,P4},三类资源{A,B,C},资源数量10,5,7,T0时刻资源分配情况如图所示
| Max | Allocation | Need | Available | ||||||||
A | B | C | A | B | C | A | B | C | A | B | C | |
P0 | 7 | 5 | 3 | 0 | 1 | 0 | 7 | 4 | 3 | 3(2) | 2(3) | 3(0) |
P1 | 3 | 2 | 2 | 2(3) | 0(0) | 0(2) | 1(0) | 2(2) | 2(0) |
|
|
|
P2 | 9 | 0 | 2 | 3 | 0 | 2 | 6 | 0 | 0 |
|
|
|
P3 | 2 | 2 | 2 | 2 | 1 | 1 | 0 | 1 | 1 |
|
|
|
P4 | 4 | 3 | 3 | 0 | 0 | 2 | 4 | 3 | 1 |
|
|
|
1. 安全监测
| Max | Allocation | Need | Available | Finish | ||||||||
A | B | C | A | B | C | A | B | C | A | B | C | ||
P1 | 3 | 3 | 2 | 1 | 2 | 2 | 2 | 0 | 0 | 5 | 3 | 2 | true |
P3 | 5 | 3 | 2 | 0 | 1 | 1 | 2 | 1 | 1 | 7 | 4 | 3 | true |
P4 | 7 | 4 | 3 | 4 | 3 | 1 | 0 | 0 | 2 | 7 | 4 | 5 | true |
P2 | 7 | 4 | 5 | 6 | 0 | 0 | 3 | 0 | 2 | 10 | 4 | 7 | true |
P0 | 10 | 4 | 7 | 7 | 4 | 3 | 0 | 1 | 0 | 10 | 5 | 7 | true |
由上图可知,存在{P1,P3,P4,P2,P0}安全
2. Request(1) (1,0,2),银行家算法
| Work | Need | Allocation | Work+Allocation | Finish | ||||||||
A | B | C | A | B | C | A | B | C | A | B | C | ||
P1 | 2 | 3 | 0 | 0 | 2 | 0 | 3 | 0 | 2 | 5 | 3 | 2 | true |
P3 | 5 | 3 | 2 | 0 | 1 | 1 | 2 | 1 | 1 | 7 | 4 | 3 | true |
P4 | 7 | 4 | 3 | 4 | 3 | 1 | 0 | 0 | 2 | 7 | 4 | 5 | true |
P0 | 7 | 4 | 5 | 7 | 4 | 3 | 0 | 1 | 0 | 7 | 5 | 5 | true |
P2 | 7 | 5 | 5 | 6 | 0 | 0 | 3 | 0 | 2 | 10 | 5 | 7 | true |
3. P4请求资源,Request [4] = {3,3,0}
Request [4] <= Need [4]
Request [4] > Available
P4 等待
4. P0请求资源,Request [0] = {2,3,0}
Request [0] <= Need [0]
Request [0] <= Available
假设可为P0分配资源,修改数据
| Allocation | Need | Available | ||||||
| A | B | C | A | B | C | A | B | C |
P0 | 0 | 3 | 0 | 7 | 2 | 3 | 2 | 1 | 0 |
P1 | 3 | 0 | 2 | 0 | 2 | 0 |
|
|
|
P2 | 3 | 0 | 2 | 6 | 0 | 0 |
|
|
|
P3 | 2 | 1 | 1 | 0 | 1 | 1 |
|
|
|
P4 | 0 | 0 | 2 | 4 | 3 | 1 |
|
|
|
5. 进行安全检查,Available(2,1,0)不满足,系统不分配