操作系统-银行家算法

报告下载:地址。。(绝对原创,请勿抄袭)

()、程序功能:实现银行家算法

()、设计思路

request:是Pi进程的请求向量,当Pi发了资源请求后,系统按下述步骤检查:

(1)如果Request[i]<= Need[i],则转向步骤(2)

(2)Request[i] <=Available,则转向步骤(3)

(3)系统试探性地把要求的资源分配给进程Pi,并修改以下数据结构的值:

Available=Available-Request[i]

Allocation[i]= Allocation[i]+ Request[i]

Need[i]= Need[i]- Request[i]

(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态,若安全,才正式将资源分配给Pi进程,完成本次分配;否则,试探性分配作废,恢复原来的资源分配状态,Pi进程进入等待状态。

()、数据结构

所用的的矩阵

类型

名字

注释

int

Available[3]

可利用资源量

int

Alloc[5][3]

分配矩阵

int

Need[5][3]

需求矩阵

int

request[3]

请求向量

 

相关函数

声明

注释

bool compare(int *a, int *b… …)

判断ab向量的大小

bool SecurityCheck(int *Available… …)

安全性检查

int main()

主函数

 

()、算法设计

1、银行家算法流程图

 

2、安全性算法

(1) 设置两个工作向量:Work= Available;finish

(2) 从进程集合中找到一个满足下述条件的进程:

finish ==false、need[i]<=Work;

如找到,执行(3) ; 否则,执行(4)

(3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。

Work+= Alloc[i]Finish=trueGOTO(2)

(4) 如所有的进程Finish= true ,则表 示安全;否则系统不安全。

代码:

//安全性检查
bool SecurityCheck(int *Available, int Need[5][3], int Alloc[5][3])
{
	bool finish[5] = { false,false,false,false,false };
	int Work[3], i(0);
	for (; i<3; i++) 
		Work[i] = Available[i];						//Work向量初始化
	for (i = 0; i < 3; i++)
//寻找need<=Work并且未运行的进程
		if (finish[i] == false&&compare(Need[i], Work, 3)) {	
			for (int j = 0; j < 3; j++)
				Work[j] += Alloc[i][j];				//资源回收
			finish[i] = true;
			i = 0;
		}
	for (i = 0; i < 5; i++)
		if (finish[i] == false)						//存在不满足的进程
			return false;
	return true;										//满足所有进程
}


()、程序运行情况

1、测试数据

m=3种类型的资源(A,B,C, 进程个数n=5、Available=(2,3,3);

进程名

已分配资源

资源需求量

A

B

C

A

B

C

P1

2

1

2

3

4

7

P2

4

0

2

1

3

4

P3

3

0

5

0

0

3

P4

2

0

4

2

2

1

P5

3

1

4

1

1

0

2、测试结果

 


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计一个n个并发进程共享m个系统资源的程序以实现银行家算法。要求: 1) 简单的选择界面; 2) 能显示当前系统资源的占用和剩余情况。 3) 为进程分配资源,如果进程要求的资源大于系统剩余的资源,不与分配并且提示分配不成功; 4) 撤销作业,释放资源。 编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。 银行家算法分配资源的原则是:系统掌握每个进程对资源的最大需求量,当进程要求申请资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需求资源最大量时,就满足进程的当前申请。这样就可以保证至少有一个进程可能得到全部资源而执行到结束,然后归还它所占有的全部资源供其它进程使用。 银行家算法中的数据结构 (1)可利用资源向量Available(一维数组) 是一个含有m个元素,其中的每一个元素代表一类可利用的资源数目,其初值是系统中所配置的该类全部可用资源数目。如果Available[j]=k, 表示系统中现有Rj类资源k个。 (2)最大需求矩阵Max(二维数组) m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k, 表示进程i需要Rj类资源的最大数目为k。 (3)分配矩阵Allocation(二维数组) 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)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值