山东科技大学学生课程设计
#include
int pro; //进程数 int res; //资源数
int safe; //safe=1 系统安全 safe==0 系统不安全
int allocation[M][M],need[M][M],available[M],max[M][M];
char name1[M],name2[M]; //定义全局变量 void main() {
//函数声明 void check(); void print(); int i,j,p=0,q=0;
int flag=1;//flag=1继续分配 flag=0不再进行分配
int request[M],allocation1[M][M],need1[M][M],available1[M];
程序源代码
- 33 -
山东科技大学学生课程设计
printf(\银行家算法*****\\n\ printf(\请输入进程个数:\\n\ scanf(\
printf(\请输入资源种类数:\\n\ scanf(\
printf(\请输入Max矩阵:\\n\ for(i=0; i scanf(\进程运行所需要的最大资源数目 printf(\请输入Allocation矩阵:\\n\ for(i=0; i scanf(\已分配给进程的资源数 printf(\请输入Available矩阵\\n\ for(i=0; i scanf(\现在可以利用的资源 for(i=0; i need[i][j]=max[i][j]-allocation[i][j]; //进程还需要的资源数目 print(); //输出 check(); //检测安全状态 if(safe==1) //安全 { while(flag==1) { q=0;//q=1 超过需要的最大资源数 p=0;//p=1 超过此时系统的资源 printf(\请输入请求资源的进程:\\n\ scanf(\ - 34 - 山东科技大学学生课程设计 printf(\请输入该进程所请求的资源数:\\n\ for(j=0; j if(request[j]>need[i][j]) p=1;//超过需要的最大资源数 if(p) printf(\请求资源超过该进程最大的资源需求量,请求失败.\\n\ else { for(j=0; j if(request[j]>available[j]) q=1; //超过此时系统的资源 if(q) printf(\系统没有足够的资源,请求失败!\\n\ else //请求满足条件 { for(j=0;j //备份此时的available矩阵、allocation矩阵、need矩阵 available1[j]=available[j]; allocation1[i][j]=allocation[i][j]; need1[i][j]=need[i][j]; //系统尝试把资源分配给请求的进程 available[j]=available[j]-request[j]; allocation[i][j]+=request[j]; need[i][j]=need[i][j]-request[j]; } print(); - 35 - 山东科技大学学生课程设计 check(); //检测分配后的安全性 if(safe==0) //如果分配后系统不安全 { for(j=0;j //还原 available[j]=available1[j]; allocation[i][j]=allocation1[i][j]; need[i][j]=need1[i][j]; } printf(\返回分配前资源数\\n\ print(); } } } printf(\是否还要继续分配资源:是:1 否:0\\n\ scanf(\ } } } void check() //安全算法函数 { int k,f; int s=0; int i,j; int work[M];//]表示可提供进程继续运行的各类资源数 int a[M]; bool finish[M]; safe=1; for(i=0; i - 36 - 山东科技大学学生课程设计 finish[i]=false; //初始化进程均没得到足够资源数 未完成 for(i=0; i for(i=0;i if(finish[i]==false) { f=1; for(j=0;j if(f==1) //找到还没有完成且需求数小于work的进程 { finish[i]=true; a[s++]=i; //记录安全序列 for(j=0;j work[j]=work[j]+allocation[i][j]; //释放该进程已分配的资源 } } } k--; } f=1; for(i=0;i if(finish[i]==false) - 37 -