1.编写模拟银行家算法的程序; 2.根据表1所给的例子进行银行家算法的正确性。 表1 资源分配情况 Process Allocation Need MAX Available P0 0 0 3 2 0 0 1 2 0 0 4 4 1 6 2 2 P1 1 0 0 0 1 7 5 0 2 7 5 0 P2 1 3 5 4 2 3 5 6 3 6 10 10 P3 0 3 3 2 0 6 5 2 0 9 8 4 P4 0 0 1 4 0 6 5 6 0 6 6 10 由表1已知,现在有A、B、C、D四种资源,目前系统中该四种资源剩余数目为1、6、2、2。请按照银行家算法回答: 1. 现在系统是否处于安全状态? 2. 若进程P2发出请求向量Request(1,2,2,2),系统能否满足它的要求?
时间: 2023-06-19 15:09:10 浏览: 114
1. 根据银行家算法,判断系统是否处于安全状态需要进行如下步骤:
- 计算每个进程还需要的资源量Need
- 计算系统当前可用的资源量Available
- 执行银行家算法,判断是否存在一个安全序列
首先,计算每个进程还需要的资源量Need:
| Process | Allocation | Need | MAX | Available |
| ------- | ---------- | --------- | --------- | --------- |
| P0 | 0 0 3 2 | 0 0 1 0 | 0 0 4 4 | 1 6 2 2 |
| P1 | 1 0 0 0 | 0 7 5 0 | 2 7 5 0 | |
| P2 | 1 3 5 4 | 1 0 0 2 | 3 6 10 10 | |
| P3 | 0 3 3 2 | 0 3 2 0 | 0 9 8 4 | |
| P4 | 0 0 1 4 | 0 6 4 6 | 0 6 6 10 | |
其次,计算系统当前可用的资源量Available:
Available = (1, 6, 2, 2)
最后,执行银行家算法,判断是否存在一个安全序列。银行家算法的流程为:
1. 找到一个进程 i,使得它的 Need 小于等于 Available。
2. 将进程 i 的所有资源释放,并将这些资源加入 Available 中。
3. 将进程 i 加入安全序列。
4. 重复步骤 1~3,直到所有进程都被加入安全序列,或者找不到满足条件的进程。
根据上面的表格,可以找到以下安全序列:
P1 -> P3 -> P4 -> P0 -> P2
因此,系统处于安全状态。
2. 若进程 P2 发出请求向量 Request(1, 2, 2, 2),系统能否满足它的要求?
首先,需要判断请求是否合法,即 Request[i] <= Need[i]。根据表格,可以得到:
Need[2] = (1, 0, 0, 2)
Request = (1, 2, 2, 2)
因此,请求合法。
接下来,需要判断系统是否能够满足请求。根据银行家算法,需要执行以下步骤:
1. 判断 Request 是否小于等于 Available。
2. 如果满足条件,试探性地分配资源,计算新的 Available 和 Need。
3. 执行银行家算法,判断是否存在一个安全序列。
首先,判断 Request 是否小于等于 Available:
Available = (1, 6, 2, 2)
Request = (1, 2, 2, 2)
因此,Request <= Available。
接下来,试探性地分配资源,计算新的 Available 和 Need:
| Process | Allocation | Need | MAX | Available |
| ------- | ---------- | --------- | --------- | --------- |
| P0 | 0 0 3 2 | 0 0 1 0 | 0 0 4 4 | 2 8 4 4 |
| P1 | 1 0 0 0 | 0 7 5 0 | 2 7 5 0 | |
| P2 | 2 5 7 6 | 0 0 0 0 | 3 6 10 10 | |
| P3 | 0 3 3 2 | 0 3 2 0 | 0 9 8 4 | |
| P4 | 0 0 1 4 | 0 6 4 6 | 0 6 6 10 | |
最后,执行银行家算法,判断是否存在一个安全序列。根据表格,可以找到以下安全序列:
P1 -> P3 -> P4 -> P0 -> P2
因此,系统可以满足进程 P2 的请求。