操作系统银行家算法带简单界面

  • g4_303151
    了解作者
  • 6.5KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-26 01:25
    上传日期
操作系统银行家算法带简单界面
T_1.zip
  • ossy2.doc
    15KB
  • Main.java
    12.2KB
内容介绍
package com.company; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Scanner; class BankersAlgorithm { private final int sourceKinds; //系统资源种类数 private final int proNums; //系统进程数目 private final int[] source; //初始资源数量 private final int[][] Max; //线程需要的最大资源数矩阵 private final int[][] Allocation; //已分配给线程的资源矩阵 private final int[][] Need; //需求矩阵 private final int[] Available; //资源剩余矩阵 private final int[] Work; //系统可提供给进程继续运行所需的各类资源数目 private final boolean[] finish; //判断状态 private final ArrayList<String> result; //输出结果 private final int[] reneed; public BankersAlgorithm(int proNums, int sourceKinds, int[] source) { //对数组进行初始化 this.proNums = proNums; this.sourceKinds = sourceKinds; this.Available = source; this.Max = new int[proNums][sourceKinds]; this.Allocation = new int[proNums][sourceKinds]; this.Need = new int[proNums][sourceKinds]; finish = new boolean[proNums]; this.reneed = new int[sourceKinds]; for (int i = 0; i < proNums; i++) { this.Max[i] = new int[sourceKinds]; this.Allocation[i] = new int[sourceKinds]; this.Need[i] = new int[sourceKinds]; finish[i] = false; } this.source = new int[sourceKinds]; Work = new int[sourceKinds]; result = new ArrayList<>(); } public void setMax(Scanner inMax) { //设置进程需要最大资源数 for (int i = 0; i < proNums; i++) for (int j = 0; j < sourceKinds; j++) { Max[i][j] = inMax.nextInt(); } } public void setAllocation(Scanner inAllo) { //设置初始已分配资源 for (int i = 0; i < proNums; i++) for (int j = 0; j < sourceKinds; j++) { Allocation[i][j] = inAllo.nextInt(); } } private void setNeed() { //计算need矩阵 for (int i = 0; i < proNums; i++) { for (int j = 0; j < sourceKinds; j++) { Need[i][j] = Max[i][j] - Allocation[i][j]; //需求矩阵 //System.out.print(Need[i][j] + " "); } // System.out.println(); } for (int i = 0; i < sourceKinds; i++) { //计算剩余资源矩阵 int sum = 0; for (int j = 0; j < proNums; j++) sum += Allocation[j][i]; source[i] = Available[i] + sum; } // for (int i = 0; i < sourceKinds; i++) // System.out.println(source[i]); System.arraycopy(Available, 0, Work, 0, Available.length); } public void setreneed(Scanner inAli) { int i = inAli.nextInt(); i = i-1; for (int k = 0; k < sourceKinds; k++) { reneed[k] = inAli.nextInt(); } for (int k = 0; k < sourceKinds; k++) { Allocation[i][k] += reneed[k]; Available[k] -=reneed[k]; } for (int k = 0; k < sourceKinds; k++){ System.out.print("占有:"+Allocation[i][k]); System.out.println("资源剩余"+Available[k]); } } private void findSafeSequence(int k, JTextArea out_result) { //找所有的安全序列算法 if (k == proNums) { //当遍历到深度为proNums,表示找到安全序列,进行输出 for (int i = 0; i < result.size(); i++) out_result.append("P" + result.get(i) + " "); out_result.append("\n"); return; } for (int i = 0; i < proNums; i++) { if (!finish[i]) { boolean task = true; for (int j = 0; j < sourceKinds; j++) { if (Need[i][j] > Work[j]) task = false; } if (task) { //满足要求,对数据修改 for (int j = 0; j < sourceKinds; j++) Work[j] += Allocation[i][j]; finish[i] = true; result.add(i + ""); findSafeSequence(k + 1, out_result); //递归进入下一层 result.remove((result.size() - 1)); //回退该层,并进行数据还原 for (int j = 0; j < sourceKinds; j++) Work[j] -= Allocation[i][j]; finish[i] = false; } } } } public void initInput(Scanner inMax, Scanner inAllo, JTextArea out_result) { //将初始化以及寻找安全序列函数整合到一起 setMax(inMax); setAllocation(inAllo); setNeed(); findSafeSequence(0, out_result); int num = out_result.getLineCount(); out_result.append("安全序列个数:" + String.valueOf(num - 2) + "\n"); } public void initInput_2(Scanner inMax, Scanner inAllo, JTextArea out_result,Scanner inAli){ setMax(inMax); setAllocation(inAllo); setreneed(inAli); setNeed(); findSafeSequence(0, out_result); int num = out_result.getLineCount(); out_result.append("安全序列个数:" + String.valueOf(num - 2) + "\n"); } } class Pframe { //界面 JFrame frame; JButton start; JTextArea in_souNum, in_souInit, in_proNum, in_Max, in_Allo, out_result, in_Ali; JLabel l_souNum, l_souInit, l_proNum, l_Max, l_Allo, l_result, l_Ali; JScrollPane scroll; JButton work, work1; JPanel panel; Pframe(String title) { //简单界面及其布局 frame = new JFrame(title); frame.setSize(720, 480); frame.setLayout(null); in_souNum = new JTextArea(5, 20); //资源类别数 in_souInit = new JTextArea(6, 20); //每类资源的个数 in_proNum = new JTextArea(6, 20); //进程数目 in_Max = new JTextArea(6, 20); //最大需求矩阵 in_Allo = new JTextArea(6, 20); //分配矩阵 in_Ali = new JTextArea(5, 20); out_result = new JTextArea(6, 20); l_souNum = new JLabel("请输入资源类别数:"); l_souInit = new JLabel("请输入可用资源矩阵(空格隔开):"); l_proNum = new JLabel("请输入进程数目:"); l_Max = new JLabel("请输入最大需求矩阵(空格隔开):"); l_Allo = new JLabel("请输入已经分配矩阵(空格隔开):"); l_Ali = new JLabel("输入进程号和请求(空格隔开):"); l_result = new JLabel("运行结果如下:"); work = new JButton("开始执行"); work1 = new JButton("改动后执行"); scroll = new JScrollPane(out_result); scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); frame.add(l_souNum); l_souNum.setBounds(30, 25, 180, 25); frame.add(in_souNum); in_souNum.setBounds(30, 50, 180, 25); frame.add(l_souInit); l_souInit.setBounds(30, 75, 180, 25); frame.add(in_souInit); in_souInit.setBounds(30, 100, 180, 25); frame.add(l_proNum); l_proNum.setBounds(240, 75, 180, 25); frame.add(in_proNum); in_proNum.setBounds(
评论
    相关推荐
    • 操作系统算法
      多级调度算法 银行家算法 磁盘调度算法 生产者—消费者问题,这些算法供大家参考。
    • 操作系统算法
      操作系统算法 该存储库包括调度算法
    • 操作系统算法实验报告
      实验一、进程控制实验 实验二、线程和进/线程管道通信实验 实验三、进程调度算法实验 实验四、进程同步实验 实验五、进程互斥实验 实验六、死锁问题实验 实验七、内存页面置换算法实验...实验九、文件系统接口实验
    • 操作系统算法模拟
      采用vs2010,C#语言完成,一共实现了三种模拟,处理器调度算法的模拟,内存分配策略的模拟,磁盘分配算法,解决方案下包含这三个项目,其中disc、mem采用.net 2.0,processor采用.net 4.0.
    • 操作系统算法——页面置换算法
      设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问命中率: 要求设计主界面以灵活选择某算法,且以下算法都要实现 1、先进先出的算法(FIFO) 2、最近最少使用算法(LRU) 3、最佳淘汰...
    • 十大经典操作系统算法
      这是含有是个操作系统中的诗歌经典算法的集合,含金量很大
    • 操作系统算法模拟系统
      操作系统课程设计,操作系统算法模拟系统——用以模拟操作系统课程涉及的相关算法,包括进程调度算法(不少于三个)、银行家算法、页面置换算法(不少于三个)和驱动调度算法(不少于三个),完成系统设计和课程设计...
    • 操作系统算法
      FIFO,LRU,电梯算法,读者优先算法,进程调度,时间片轮转调度算法,写者优先,页面置换算法,哲学家进餐问题,完整正确C实现,整理很辛苦啊
    • 操作系统算法:操作系统中的重要算法
      操作系统算法:操作系统中的重要算法
    • C语言模拟操作系统算法
      用C语言模拟操作系统拟分页式存储管理算法,学习操作系统的朋友,可以看一下!