操作系统-银行家算法

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

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

()、设计思路

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、测试结果

 《操作系统-银行家算法》

    原文作者:银行家问题
    原文地址: https://blog.csdn.net/jzp1083462154/article/details/79037147
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞