操作系统-银行家算法

2018-01-12 11:06:14来源:网络收集作者:管理员人点击

分享

阿里云爆款


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


(二)、设计思路


设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… …)

判断a、b向量的大小


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=true、GOTO(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、测试结果

 操作系统-银行家算法


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台