1 实验问题描述
设计程序模拟避免进程死锁的银行家算法的工作过程。假设有系统中有n个进程P1, … ,Pn,有m类可分配的资源R1, … ,Rm,在T0时刻,进程Pi分配到的j类资源为Allocationij个,它还需要j类资源Need ij个,系统目前剩余j类资源Workj个,现采用银行家算法进行资源分配避免死锁的发生。
程序要求如下:
判断当前状态T0是否安全,如果安全,给出安全序列;如果不安全给出理由。
对于下一个时刻T1,某个进程Pk会提出请求Request(R1, … ,Rm),判断是否可以分配给P k进程请求的资源。
输入:
进程数量n,资源种类数m,以及各类资源的最大示例数量;
T0时刻各个进程的资源分配情况Allocation、剩余所需资源Need:
![](https://i-blog.csdnimg.cn/blog_migrate/52acd50dcc29e2ffe4613863ea800d97.png)
T1时刻,发出请求的进程编号pid,以及请求的资源情况reqs;
输出:
判断T0时刻是否安全的详细信息,如果安全,则输出安全的进程序列,否则提示不安全信息。例如:
![](https://i-blog.csdnimg.cn/blog_migrate/a1737b6f58bc0e1001306a5d0812099e.png)
security sequence:P1,P3,P4,P2,P0
判断T1时刻满足进程请求后系统是否安全的详细信息,最后给出是否可以满足该进程请求的结论信息。例如:
![](https://i-blog.csdnimg.cn/blog_migrate/ade93d5a981255bd06339f68bde25680.png)
Conclusion:Requests of p1 is able to be granted.
2 测试数据
测试数据1:
n = 5, m = 3
pid | Allocation | Need | Available | ||||||
0 | 0 | 1 | 0 | 7 | 4 | 3 | 3 | 3 | 2 |
1 | 2 | 0 | 0 | 1 | 2 | 2 | |||
2 | 3 | 0 | 2 | 6 | 0 | 0 | |||
3 | 2 | 1 | 1 | 0 | 1 | 1 | |||
4 | 0 | 0 | 2 | 4 | 3 | 1 |
Requests:
Pid=1, reqs=[1, 0, 2]
测试数据2
n = 5, m = 3
pid | Allocation | Need | Available | ||||||
0 | 0 | 2 | 1 | 4 | 1 | 0 | 3 | 5 | 2 |
1 | 1 | 0 | 1 | 2 | 3 | 1 | |||
2 | 0 | 1 | 3 | 4 | 0 | 4 | |||
3 | 3 | 2 | 1 | 4 | 2 | 2 | |||
4 | 0 | 2 | 0 | 5 | 1 | 3 |
Requests:
a) Pid=3, reqs=[1, 2, 1]
b) Pid=3, reqs=[0, 1, 0]
c) Pid=4, reqs=[5, 1, 3]
d) Pid=4, reqs=[2, 0, 1]
3 流程图
![](https://i-blog.csdnimg.cn/blog_migrate/f5e94fc52cbc3539355cd52aceb175a6.png)
4 实验结果
测试数据1:
![](https://i-blog.csdnimg.cn/blog_migrate/efdd556949fdef7389c46ba355f7c487.png)
测试数据2:
![](https://i-blog.csdnimg.cn/blog_migrate/a7d3bdea1dc5607d2be938f78ebd5a7f.png)
5 实验代码
请见GitHub。