操作系统 - 银行家算法Java实现

算法描述

程序实现思路银行家算法顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块 PCB 其中“状态”有就绪态、等待态和完成态。当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。显然,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁.

流程图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

代码实现

变量说明

1.可利用资源向量 Available ,Available[j]= k 表示系统中现有 j 类资源k个。

2.最大需求矩阵 Max,Max[i][j]= k 表示进程 i 需要 j 类资源的最大数目为 k 。

3.分配矩阵 Allocation, Allocation[i][j]= k 表示进程 i 当前已经分到 j 类资源的数目为 k 。Allocation[i]表示进程i的分配向量。

4.需求矩阵 Need,Need[i][j] = k,表示进程i还需要 j 类资源 k 个,才能完成其任务。Need[i]表示进程i的需求向量。

上述三个矩阵间存在关系:Need[i][j] = Max[i][j] - Allocation[i][j];

Java实现

Main.java

package BankersAlgorithm;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
   
	public static int N = 100;
	public static int M = 100;
	public static void main(String[] args) throws FileNotFoundException {
   
		//定义变量
		File file = new File("D:\\data2021219\\java-learning\\java-learning\\src\\BankersAlgorithm\\input.txt");
		Scanner scanner = new Scanner(file); 
		int[] Available = new int[N];
		int[] Request = new int[N];  //0号位置存放请求者编号
		int[][] Max = new int[M][N]; 
		int[][] Allocation = new int[M][N]; 
		int[][] Need = new int[M][N];
		int m,n;  //m个进程,n种资源。
		
		// 初始化
		m = scanner.nextInt();
		n = scanner.nextInt(); 
		for(int i = 1;i<=n;i++)
			Available[i] = scanner.nextInt();
		for(int i = 1;i<= m;i++) {
   
			for(int j = 1;j<=n;j++) {
   
				Max[i][j] = scanner.nextInt(); 
			} 
		}
		for(int i = 1;i<= m;i++) {
   
			for(int j = 1;j<=n;j++) {
   
				Allocation[i][j] = scanner.nextInt();
				Need[i][j] = Max[i][j] - Allocation[i][j]; 
			} 
		}
		for(int i = 1
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛阳八中我最棒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值