您的位置:首页 > 其它

银行家算法避免死锁

2016-05-20 15:54 204 查看
要求:

完成程序数据结构的设计,数据的录入。

完成进程需求矩阵的输出,包括最大需求矩阵,尚需资源矩阵,可获得资源显示。

完成某进程请求资源试分配。

完成安全性检查。

#include<iostream.h>

#include<string.h>

#include<stdlib.h>

#include<stdio.h>

#define Status int

#define true 1

#define false 0

int M=100;//进程的最大数为100

int N=100;//资源的最大数为100

int Claim[100][100]={0};//各进程所需各类资源的最大需求

int Available[100]={0};//系统可用资源

char name[100]={0};//资源的名称

int Allocation[100][100]={0};//系统已分配资源

int Need[100][100]={0};//还需要资源

int Request[100][100]={0};//请求资源向量

int finish[100]={0};//存放安全序列

int Work[100]={0};//存放系统可提供资源

1. 试探分配

当进程pi提出资源申请时,系统执行下列步骤:

(1)若Request[i][j]≤Need[i][j],转(2);

否则错误返回

(2)若Request[i][j]≤Available[j],

转(3);否则进程等待

(3)试探着把资源分配给进程Pi,则有:

Available[j]=Available[j]-Request[i][j];

Allocation[i],[j]=Allocation[i],[j]+Request[i][j];

Need[i],[j]=Need[i],[j]-Request[i][j];

2. 安全性检测算法:

n 借助于死锁的安全性测试算法来实现。

n 定义布尔型向量finish[k],k=1,..,n。检测死锁算法如下:

(1)Work= Available

(2)在剩余的进程集合中查每一个进程Pk,如果Claim[k,*]- Allocation [k,*]=0,则finish[k]:=true;否则finish[k]:=false;这里k=1,..,n

(3)在剩余的进程集合中找一个进程Pk,需满足条件:

finish[k]=false&(request[*]≤Work)

找到这样的Pk便转(4);否则转(5)

(4)Work:= Work + Allocation;finish[k]:=true;然后转(3)

(5) 如果对k=1,..,n若finish[k]=true不成立,那么,系统出现了死锁,并且finish[k]=false的Pk为死锁进程。

#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define Status int
#define true 1
#define false 0
int M=100;//进程的最大数为100
int N=100;//资源的最大数为100
int Claim[100][100]={0};//各进程所需各类资源的最大需求
int Available[100]={0};//系统可用资源
char name[100]={0};//资源的名称
int Allocation[100][100]={0};//系统已分配资源
int Need[100][100]={0};//还需要资源
int Request[100][100]={0};//请求资源向量
int finish[100]={0};//存放安全序列
int Work[100]={0};//存放系统可提供资源
void write();

main()
{
write();
}

void write()
{
char s;
int i,j;
FILE* fp=fopen("C:\\io.txt","w");

printf("请输入进程数:\n");
scanf("%d",&M);
fprintf(fp,"\n%d",M);

printf("请输入资源数:\n");
scanf("%d",&N);
fprintf(fp,"\n%d",N);

for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{

printf("请输入%d进程所需%d资源的最大需求:\n",i+1,j+1);
scanf("%d",&Claim[j][i]);
fprintf(fp,"\n%d",Claim[j][i]);
}
}

for(i=0;i<N;i++)
{
printf("请输入%d资源的最大需求:\n",i+1);
scanf("%d",&Available[i]);
fprintf(fp,"\n%d",Available[i]);
}

fclose(fp);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: