原理
设 Request;是进程Pi的请求向量,如果 Requesti[j] = K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检査:
(1) 如果 Requesti[j] ≤ Need[i,j]便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
(2) 如果 Requesti[j] ≤ Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。
(3) 系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值
Available[i] = Available[j] - Requesti[j];
Allocation[i,j] = Allocation[i,j] + Requesti[j];
Need[i,j] = Need[i,j] - Requesti[j];
(4) 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待
代码
/**
* Copyright (c).2019-2019,
* Filename: BankerAlgorithm1
* Author:
* Date:2019/11/6
* Description:
*/
import java.util.Scanner;
class Banker1 {
int[] num_source;//银行家所拥有的资源数
int[][] max_need_couse;//各进程所需要各资源的最大量
int[][] have_num;//各进程已拥有各资源的量
int[][] need_num;//各进程仍需要各资源的量
int[] p;//已分配出的资源数
int[] s;//系统剩余资源数
public Banker1(int[] a,int[][]b,int [][]c,int[][]d,int[]p,int[] s){
this.num_source = a;
this.max_need_couse = b;
this.have_num = c;
this.need_num = d;
this.p = p;
this.s = s;
}
public void display(){
for (int i = 0;i<need_num.length;i++){
System.out.println("进程"+i+"仍需要各资源的量为:");
for(int j= 0;j<need_num[i].length;j++){
System.out.print(