操作系统——银行家算法(Java)


1 实验目的:

银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。

2 实验内容:

1)设计进程对各类资源最大申请表示及初值确定。
2)设定系统提供资源初始状况。
3)设定每次某个进程对各类资源的申请表示。
4)编制程序,依据银行家算法,决定其申请是否得到满足。

3 源代码:

银行家算法(Java)完整代码
下面是实现框架

import java.util.Scanner;

//银行家算法的数据结构
class Banker{
   
	
	//Map<Integer, String> P_name = new HashMap<Integer, String>();	//进程名
	//Map<Integer, String> S_name = new HashMap<Integer, String>();	//资源名
	int ID[],			//进程代号
		M,				//m个进程
		N,				//n类资源
		All[],			//系统各资源数量
		Max[][],		//m个进程对n类资源的最大需求量
		Allocation[][],	//m个进程已经得到n类资源的资源量
		Need[][],		//m个进程还需要n类资源的资源量
		Available[][];	//系统可用资源数
		
	boolean Finish[];	//标记进程是否完成
	int a=0;//Available的第一个下标

	public Banker() {
   	//无参构造函数
	
		//代码空缺

	}
	
	public Banker(int[] iD, int m, int n, int[] all, int[][] max, int[][] allocation, int[][] need, int[][] available,
			boolean[]
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
银行家算法 1. 实验目的和要求 银行家算法是避免死锁的一种重要方法,要求编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 2. 实验内容 1.设计进程各类资源最大申请表示初值确定。 2.设定系统提供资源初始状况。 3.设定每次某个进程各类资源申请表示。 4.编制程序,依据银行家算法,决定其申请是否得到满足。 3. 实验说明 1.数据结构 假设有M个进程N类资源,则有如下数据结构: MAX[M*N] M个进程对N类资源最大需求量 AVAILABLE[N] 系统可用资源数 ALLOCATION[M*N] M个进程已经得到N类资源资源量 NEED[M*N] M个进程还需要N类资源资源量 2.银行家算法进程I提出请求Request[N],则银行家算法按如下规则进行判断。 (1)如果Request[N]<=NEED[I,N],则转(2);否则,出错。 (2)如果Request[N]<=AVAILABLE,则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 3.安全性检查 (1)设置两个工作向量WORK=AVAILABLE;FINISH[M]=FALSE (2)从进程集合中找到一个满足下述条件的进程, FINISH[i]=FALSE NEED<=WORK 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 WORK=WORK+ALLOCATION FINISH=TRUE GO TO 2 (4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全。 4. 参考程序 #include "string.h" #include "iostream.h" #define M 5 //总进程数 #define N 3 //总资源数 #define FALSE 0 #define TRUE 1 //M个进程对N类资源最大资源需求量 int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; //系统可用资源数 int AVAILABLE[N]={10,5,7}; //M个进程已经得到N类资源资源量 int ALLOCATION[M][N]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; //M个进程还需要N类资源资源量 int NEED[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; int Request[N]={0,0,0};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

门牙磕掉了

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

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

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

打赏作者

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

抵扣说明:

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

余额充值