银行家算法,Banker‘s alogrithm
原理请搜别的博主,现在我们直接做题。
现在resources有R1=21,R2=24
程序有P1,P2,P3
先看allocation matrix
假设为
|7|0|
|5|0|
|0|6|
a1.1为aP1.R1
Maximum matrix 为
|21|0 |
|7|6|
|16| 24|
现在我们知道,maximum matrix为一共每个进程需要多少资源,allocation matrix是已经分配的。所以我们进程还需要的资源就是maximum matrix - allocation matrix = need matrix
那么need matrix为
|14| 0 |
|2|6|
| 16|18 |
总共的资源为21和24,已经分配出去了allocation matrix里的各项和,即R1还剩余的为 21 - 7 - 5 - 0 = 9
R2还剩余的为 24 - 0 - 0 - 6 = 18
这里面R2剩余很多不考虑,我们现在只看R1,(是时候举一反三了)
显然R1现在还剩下9,也就是说对应的need matrix, 它只能满足P2的需求,所以P2是第一个。
这时候管他是释放了还是结束了,请自寻原理。P2中已经allocated的R1被释放,即9+5=14。所以第一位是P2。安全结束。(如果其中此步结束后所有need matrix的R1的值大于14,那么整个都是不安全的)
14对应着need matrix 里的P1,所以第二个是P1。
结束后释放,14+7 = 21。这时候所有R1已经被释放,21>16 (16是need matrix里的),显然P3也是安全的。
所以顺序就是P2 P1 P3
复习到一半我发现还有个特殊的request
再举个例子,R1和R2总共为32,85
allocation matrix为
11 0
7 0
0 21
maximum matrix为
32 0
11 21
25 85
那么need matrix为
21 0
4 21
25 64
所以现在R1的剩余量是32 - 11 - 7 = 14
R2的剩余量是 85 - 21 = 64
可以看出这里R2又不用同时考虑了
根据之前的规则,首先是P2的need为4<14为第一个,14+7=21,P1的need 21=21,所以P1是第二个(全部可以进行下去,是安全的,否则无安全序列)21+11=32>25
所以安全序列为 P2,P1,P3
这时候if P1 request (14,0)行不行呢?
第一个我们先判断这个request的14是否大于need matrix里的值,need是21,所以没有超过maximum matrix即总共需求量,可以进行下一步(否则全失败)
第二个,我们把request的14和R1的剩余量比较,R1的剩余量最初为32-11-7=14,可以说是刚好,可以进行第三步了(否则需要等待释放,我猜想为:如果此时P1是第一个,那么就不可能有等待释放,是个死循环。如果P1不是第一个,且R1的量真的通过安全序列被放出来了,那么可以进行下一步)
第三步,把request的加到allocation里。我认为request就是直接分配给P1。所以直接加到allocation里,整个新allocation matrix 为
11+14 0
7 0
0 21
而need matrix为
21-14 0
4 21
25 64
此时R1的剩余量为32-11-14-7=0,R2的剩余量为65-0=65不变
此时R1不能分配给任何process去满足其需求(need matrix)再释放,所以request失败,不能请求。
本文为期末狗复习时方便记录思考写下,解题具有范围性(可能只有我们老师出这样的题吧的意思哈哈哈),请有错误立即指出,帮助度过期末周。