银行家算法详细实例(操作系统)

题目与答案:

银行家算法详细实例(操作系统)
银行家算法详细实例(操作系统)

公式:

need = max - allocation (总共的 - 已经占用的 = 需要的) ,

available = 各个进程的全部总量 - 各个进程已经占用的资源之和 , 例如: 这里的 available :

A :20 - (1+6+2+2+0) = 9 , B: 26 - (6+5+4+4+2) = 5 , C:31 - (0+8+4+9+7) = 3 , D:17 - (3+2+3+6+3) = 0 !!! available 就是 (9,5,3,0)

判断系统状态是否安全,给出安全序列:
写解出所有进程的need :
P0   6 6 3 0
P1   0 9 2 4
P2   3 2 0 0
P3   0 9 2 4
P4   3 2 2 5
需要 need <= available 由need和available可知,从P2(满足条件)开始,然后把P2的allocation 释放到 available中,这样的话available变成了 11 9 7 3 ,再按照顺序往下看谁的need满足,下一个是 P0 ,同样把 P0 的 allocation 释放到 available 中,这样循环直到 所有的进程都执行完就算找到了安全序列,如果循环一遍后找不到满足的进程,那么就不存在安全序列。

这样遍历完后找到的安全序列是:P2P0P1P3P4

available 变化过程:
11 9 7 3
12 15 7 6
18 20 15 8
20 24 24 14
20 26 31 17    最后所有进程执行完 available 变成了给出的资源总量

提出请求的解决办法:
1.    当提出请求时,先判断 request <= need ? ,request <= available ?
2.     然后满足的话, available = available - request , allocation = allocation + request , need = need - request (其实,这里的意思就是从available中拿出请求的资源使用,自然available少了,需要的need 也少了,正在占用的allocation多了,都是对应的 request )。
3.     然后去执行安全性算法: 设置 2 个向量 work 和 finish。 初始work = available , finish = false 。

从这里开始就是前面的判断是否有安全序列了,去找 need ,看是否有满足 need <= work(available)的,找到的话,work = work + allocation(就是把该进程已占据的资源释放到work(available)中去,然后设finish = true ),然后再去找 need <= work

这里P1 请求之后request之后,available 变成了 9 4 2 0allocation 变成了 6 6 9 2注意这里的allocation变了,后面计算的时候不要用以前的allocation,容易出错!!)

need变成了:
P0   6 6 3 0
P1   6 13 9 6
P2   3 2 0 0
P3   0 9 2 4
P4   3 2 2 5

available中间过程:
11 8 6 3
12 14 6 6
14 18 15 12
14 20 22 15
20 26 31 17
安全序列:P2P0P3P4P1