BankerAlgorithm 银行家算法

BankerAlgorithm


用Java语言写的银行家算法 - 操作系统作业

  • 详细配置在 Config.java 中
  • BaseProcess已经封装好了算法

设计思路

  1. 设计 BaseProcess 抽象进程类.

    设置静态成员Avaliable,Max,Allocation,Need进程公共向量,及createProcessNumber(已经实例化Process个数),封装Request函数,用于进程请求资源
  2. Request函数实现如下算法:
    ① 如果Request[i][j]<=Need[i,j],便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
    ② 如果Request[i][j]<=Available[j],便转向步骤3;否则,表示尚无足够资源,Pi须等待。
    ③ 系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:
    Available[j]=Available[j]-Request[j];
    Allocation[i,j]=Allocation[i,j]+Request[j];
    Need[j,j]=Need[j,j]-Request[j];
    ④ 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态(即调用SafeCheck()函数)。若安全(即SafeCheck()函数boolean值为true),才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待
  3. 定义返回值为boolean的SafeCheck()函数实现安全性算法:
    ① 设置Work和Finish两个向量。
    ② 从进程集合中找到一个能满足下述条件的进程:
    Finish[i]=false
    Need[i,j]<=Work[j]:若找到,执行步骤3,否则,执行步骤4.
    ③ 当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
    Work[j]=Work[j]+Allocation[i,j];
    Finish[i]=true;
    go to step2;
    ④ 如果所有进程的Finish[i]=true都满足,则表示系统所处于安全状态;否则,系统处于不安全状态。

流程图

变量说明

  1. 可利用资源向量Available:这是一个含有m个元素的数组,其中每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态的改变。如果Available[j]=K,则表示系统中有Rj类资源K个。
  2. 最大需求矩阵Max:这是一个n*m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。
  3. 分配矩阵Allocation:这也是一个n*m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K
  4. 需求矩阵Need:这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。上述三个矩阵间存在关系:Need[i,j]=Max[i,j]-Allocation[i,j]
  5. 程序公共配置:

代码实现

  • 码云:https://gitee.com/pldq/BankerAlgorithm
  • 百度云盘:链接: https://pan.baidu.com/s/1dEMeuEP 密码: 2a7h

测试结果

进程请求资源:

你可能感兴趣的:(JAVA,操作系统,java,算法)