当前位置:首页 > 银行家算法的模拟实现
}
}while(tmp==0);
void proc_require0(void) {
int j,tmp;
require0: }
/*请求资源超过需求资源*/ int over_need() { }
/*请求资源超过可利用资源*/ int over_avail() {
int j;
for(j=0;j if(request[serial_proc][j]>available[j]) int j; for(j=0;j if(request[serial_proc][j]>need[serial_proc][j]) { } printf(\请求资源超过需求资源\\n\ return 1; printf(\现在第?进程请求\\n\ scanf(\ if (serial_proc<0 ||serial_proc>=n_proc) { } printf(\进程号非法(越界)\\n\ goto require0; tmp=0; for(j=0;j tmp+=need[serial_proc][j]; if (!tmp) { } printf(\对[%d]进程,各资源要求\\n\ for(j=0;j scanf(\ printf(\该进程处于完成状态\\n\ goto require0; printf(\ return 0; } { } printf(\请求资源超过可利用资源\\n\ return 1; return 0; /*资源申请成功*/ int apply_success(int be_need,int be_avail) { if (be_need==0 && be_avail==0) { return 1; } 0; return } /*安全性检查*/ int check_security() { L2: for(i=0;i if(finish[i]==0) { tmp=1; for(j=0;j if(need[i][j]>work[j]) { } tmp=0; break; /*没有进行安全检查*/ int i,j,tmp; for(j=0;j work[j]=available[j]; for(i=0;i finish[i]=0; t=0; if(!tmp) continue; else { for(j=0;j work[j]+=allocation[i][j]; finish[i]=1; tmp=0; for(j=0;j } } tmp+=need[i][j]; if(tmp) index[t++]=i; goto L2; } for(j=0;j if(finish[j]==0) return 0; return 1; /*银行家算法主体*/ void banker() { int allocation_t[10],available_t[10],need_t[10];/*临时变量*/ int tmp; int j; /*保留当前的资源分配*/ for(j=0;j { } available_t[j]=available[j]; allocation_t[j]=allocation[serial_proc][j]; need_t[j]=need[serial_proc][j]; /*修改available,allocation,need矩阵*/ for(j=0;j if(check_security(type_src,n_proc)) { } tmp=0; for(j=0;j tmp+=need[serial_proc][j]; available[j]-=request[serial_proc][j]; need[serial_proc][j]-=request[serial_proc][j]; allocation[serial_proc][j]+=request[serial_proc][j]; if(!tmp) for(j=0;j available[j]+=allocation[serial_proc][j]; else { for(j=0;j } } allocation[serial_proc][j]=allocation_t[j]; need[serial_proc][j]=need_t[j]; available[j]=available_t[j]; } int finish_all(void) { } /*结果输出*/ void output() { int i,j; printf(\安全序列输出格式:[进程号,进程数]\\n\ for(i=0;i printf(\ printf(\依次为:最大需求矩阵,已分配矩阵,需求矩阵,可利用矩阵\\n\ for(i=0;i printf(\ printf(\ for(i=0;i for(j=0;j if(need[i][j]!=0) return 1; int i,j; return 0; for(j=0;j printf(\ printf(\ for(j=0;j printf(\ printf(\ for(j=0;j printf(\ printf(\ if (i==serial_proc) for(j=0;j printf(\ printf(\
共分享92篇相关文档