银行家算法 Output() 输出某时刻的资源分配情况;Bank() 银行家算法的步骤 1、2、3、及4调用安全性算法;Security() 进行安全性检查;Main() 各种数据结构的定义。假设 有0-4 五个进程(假设系统的当前状态是安全的),三类资源 即:A、B、C(以下各种数据均取自课本P97例子)T0 时刻的资源分配表(各种资源的数量分别为:10、5、7) 资源情况进程 MaxA B C AllocationA B C NeedA B C AvailableA B CP0 7 5 3 0 1 0 7 4 3 3 3 2P1 3 2 2 2 0 0 1 2 2 P2 9 0 2 3 0 2 6 0 0 P3 2 2 2 2 1 1 0 1 1 P4 4 3 3 0 0 2 4 3 1T0 时刻的资源分配表(各种资源的数量分别为:10、5、7) 资源情况进程 Max Allocation Need Available A B C A B C A B C A B CP0 7 5 3 0 1 0 7 4 3 3 3 2P1 3 2 2 2 0 0 1 2 2 P2 9 0 2 3 0 2 6 0 0 P3 2 2 2 2 1 1 0 1 1 P4 4 3 3 0 0 2 4 3 1
明天考操作系统了。我实验时编的程序:#include<stdio.h>#include<string.h>#define P 5 // 进程数#define M 3 // 资源数int Max[P][M]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};int Allocation[P][M]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};int Need[P][M]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};int Available[M]={3,3,2};int Work[M];int Finish[M];int sta[P]; // 进程安全序列int ok;void DFS(int w){ int i,j,flag; if(w==P) { for(i=0;i<P;i++) printf("%d ",sta[i]); printf("\n"); ok=1; return; } for(i=0;i<P;i++) { if(Finish[i]==0) { flag=1; for(j=0;j<M;j++) { if(Need[i][j]>Work[j]) { flag=0; break; } } if(flag==1) { for(j=0;j<M;j++) { Work[j]+=Allocation[i][j]; } Finish[i]=1; sta[w]=i; DFS(w+1); // 参数 进程个数 for(j=0;j<M;j++) // 回溯 { Work[j]-=Allocation[i][j]; } Finish[i]=0; //if(ok==1) return ; } } }}int IsSave(){ int i; ok=0; for(i=0;i<M;i++) { Work[i]=Available[i]; Finish[i]=0; } DFS(0); return ok;}int main(){ if(IsSave()==0) { printf("系统处于非安全状态!\n"); return 0; } printf("ok\n");}