题目
在一个多用户操作系统中,有5个进程 {P0, P1, P2, P3, P4} 和三类资源 {A, B, C}。系统中的资源总数分别为 A = 10, B = 5, C = 7。
在某时刻 T0,系统的资源分配情况如下表所示:
进程 | Allocation(A,B,C) | Maximum(A,B,C) |
p0 | (0, 2, 0) | (7, 5, 3) |
p1 | (2, 0, 0) | (3, 2, 2) |
p2 | (3, 0, 2) | (9, 0, 2) |
p3 | (2, 1, 1) | (2, 2, 2) |
p4 | (0, 0, 2) | (4, 3, 3) |
此时系统的可用资源向量 Available 为 (3, 3, 2)。
> 单词意思:Need:需要多少;Allocation:已分配;Maximum:最大容量
任务
1. 求每个进程的Need向量;
2. 使用银行家算法判断当前系统是否处于安全状态,如果是请找出一个安全序列,如果不是,请给出理由;
3. 如果p1进程的请求资源变成(1,0,0),系统是否满足安全序列;如果是,请更新表格,给出Allocation,maximum和Need;如果不是,请给出理由;
答案
1.求每个进程的Need向量;
每个进程的Need向量等于=Maximum-Allocation;所以得到以下表格:
进程 | Allocation(A,B,C) | Maximum(A,B,C) | Need |
p0 | (0, 2, 0) | (7, 5, 3) | (7,3,3) |
p1 | (2, 0, 0) | (3, 2, 2) | (1,2,2) |
p2 | (3, 0, 2) | (9, 0, 2) | (6,0,0) |
p3 | (2, 1, 1) | (2, 2, 2) | (0,1,1) |
p4 | (0, 0, 2) | (4, 3, 3) | (4,3,1) |
2. 判断是否安全以及找出一个安全序列;
最简单的理解就是,当我们算出上面每个进程的Need值之后,只需要和Avaliable比较,然后就能选择先让哪一个进程执行;
ps:这里有一个很重要的知识点,进程执行完之后,Avaliable = Avaliable+Allocation;因为进程执行完之后,已分配的资源会被释放,所以就会被释放在Avaliable里面去(安全序列并不是唯一的顺序,主要是看你怎么分配);
①初始值Avaliable 分配给p1后更新Avaliable = (3,3,2)+(2,0,0) = (5,3,2)
②再分配给p4后更新Avaliable = (5,3,2)+(0,0,2) = (5,3,4)
③在分配给p3后更新Avaliable = (5,3,4) + (2,1,1) = (7,4,5)
④在分配给p0后更新Avaliable = (7,4,5)+(0,0,2)=(7,4,7)
⑤在分配给p2后更新Avaliable;到这里就能很明显看出是满足的;
所以最终答案:是否安全?安全;安全序列为:p1---p4---3---p0---p2
3. 如果p1进程的请求资源变成(1,0,0),系统是否满足安全序列;如果是,请更新表格,给出Allocation,maximum和Need;如果不是,请给出理由;
只需要把上面的表格
换成(1,0,0)后再根据步骤2重新算一遍得出答案即可;