文档介绍:《计算机操作系统》课程设计题目银行家算法分析学院计算机与软件学院专业计算机科学与技术班级学号姓名指导教师起止时间 2 一、算法综述银行家算法:在进程向系统提出资源分配请求时,算法会先对进程提出的请求进行合法性检查, 即检查请求的是不大于需要的, 是否不大于可利用的。若请求合法, 则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配, 否则,不分配,恢复原来状态,拒绝申请。二. 算法分析 银行家算法中的数据结构为资源的种类 i 进程的数量 j 可利用资源向量 int Available[j] 最大需求矩阵 int Max[i][j] 分配矩阵 int Allocation[i][j] 需求矩阵 int need[i][j]= Max[i][j]- Allocation[i][j] 申请各类资源数量 int Request i[j] i 进程申请 j 资源的数量工作向量 int Work[x] int Finish[y] 银行家算法设 Request i 是进程 P i 的请求向量,如果 Request i [j]=K ,表示进程 P i 需要 k个 Rj 类型的资源,当 P i 发出资源请求后,系统按照下述步骤进行检查: (1) 如果 Request i [j]≤ Need[j], 便转向步骤( 2) ;否则认为出错,因为它所需要的资源数已经超过它所宣布的最大值。(2) 如果 Request i [j]≤ Available[j] , 便转向步骤(3); 否则, 表示尚无足够资源,P i 须等待。(3) 系统试探着将资源分配给进程 P i ,并修改下面数据结构中的数值: Available[j]:=Available[j]-Request i [j]; Allocation[i,j]:=Allocation[i,j]+Request i [j]; Need[i,j]:=Need[i,j]-Request i [j]; (4) 系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程 P i, 以完成本次分配; 否则本次的试探分配作废, 恢复原来的资源分配状态,让进程 P i 等待。 安全性检查算法( Check_safe() 函数) (1) 设置两个向量: 工作向量 Work , 它表示系统可提供给进程继续运行所需的各类资源数目, 在执行安全性算法开始时, Work= Available 。 3 Finish ,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做 Finish[i]=0 ;当有足够的资源分配给进程时,再令 Finish[i]=1 。(2) 在进程中查找符合以下条件的进程: 条件 1: Finish[i]=0 ; 条件 2: need[i][j]<=Work[j] 若找到,则执行步骤(3) 否则,执行步骤(4) (3) 当进程获得资源后, 可顺利执行, 直至完成, 并释放出分配给它的资源, 故应执行: Work[j]= Work[j]+ Allocation[i][j] ; Finish[i]=1 ; goto step 2; (4) 如果所有的 Finish[i]=1 都满足, 则表示系统处于安全状态, 否则, 处于不安全状态。三、算法设计初始化算法流程图: 4 银行家算法流程图: (1) 采用动态输入的方法对进程个数 Pnum , 资源种类数 Stype, 资源总数 Ssum[], 最大需求 Max[][], 已分配 Allocation[][] 进行初始化; (2) 根据已输入数据计算出需求矩阵 Need[][], 可用资源数 Available[]; (3) 利用 Check_safe() 函数对此刻系统的安全性进行检测,如果安全,给出安全序列; (4) 进程 i 提出资源请求,利用 Ask_Distribution() 函数检测请求是否合理;合理则满足请求,并给出安全序列;不合理则给出错误提示; (5) 做出开始界面、选择界面、退出界面,使程序美观、易操作; 5 四、编码实现(实验的 java 代码) import ; public class YinHang { Scanner in = new Scanner(System. in ); int Pnum ; // 进程个数 int Stype ; // 资源种类数 int [] Ssum ; // 各类资源总数 int [][] Max ; // 最大需求矩阵 int [][] Allocation ; // 已分配矩阵 int [][] Need ; // 需求矩阵 int [] Available ; // 可用资