陕西师范大学《操作系统》课程设计报告
设计题目:银行家算法的实现
姓名:韩晓宇
学号:41012168
银行家算法分析、设计与
int Request[100]={0};//请求资源向量
int temp[100]={0};//存放安全序列
int Work[100]={0};//存放系统可提供资源
int M=100;//作业的最大数为100
int N=100;//资源的最大数为100
void showdata()//显示资源矩阵
{
int i,j;
int MM;//设定MM值,为输出对齐
if(N==1||N==2||N==4)MM=16;
else if(N==3||N==5)MM=15;
else if(N==6)MM=18;
else MM=14;
cout<<endl;
cout<<setiosflags(ios_base::right)//右对齐输出
<<setw(MM*2-8)<<"Max"
<<setiosflags(ios_base::right)
<<setw(MM)<<"Allocation"
<<setiosflags(ios_base::right)
<<setw(MM)<<"Need"
<<setiosflags(ios_base::right)
<<setw(MM)<<"Avaliable"<<endl;
cout<<setiosflags(ios_base::right)
<<setw(MM-8)<<"进程名";
for(j=0;j<4;j++)
for(i=0;i<N;i++)
cout<<setiosflags(ios_base::right)
<<setw(MM/N)<<name[i];
cout<<endl;
for(i=0;i<M;i++){
cout<<setiosflags(ios_base::right)
<<setw(MM-9)<<"P"<<i;
for(j=0;j<N;j++)
cout<<setiosflags(ios_base::right)
<<setw(MM/N)<<Max[i][j];
for(j=0;j<N;j++)
cout<<setiosflags(ios_base::right)
<<setw(MM/N)<<Allocation[i][j];
for(j=0;j<N;j++)
cout<<setiosflags(ios_base::right)
<<setw(MM/N)<<Need[i][j];
if(i==0)
for (j=0;j<N;j++)
cout<<setiosflags(ios_base::right)
<<setw(MM/N)<<Avaliable[j];//输出分配资源
cout<<endl;
}
}
int changdata(int i)//进行资源分配
{
int j;
for (j=0;j<M;j++) {
Avaliable[j]=Avaliable[j]-Request[j];
Allocation[i][j]=Allocation[i][j]+Request[j];
Need[i][j]=Need[i][j]-Request[j];
}
return 1;
}
int ifsafe()//安全性算法
{
int i,k=0,m,apply,Finish[100]={0};
int j;
int flag=0;
Work[0]=Avaliable[0];
Work[1]=Avaliable[1];
Work[2]=Avaliable[2];
for(i=0;i<M;i++){
apply=0;
for(j=0;j<N;j++){
if (Finish[i]==False&&Need[i][j]<=Work[j]){
apply++;
if(apply==N){
for(m=0;m<N;m++)
Work[m]=Work[m]+Allocation[i][m];//更新分配数
银行家算法陈德利 来自淘豆网m.daumloan.com转载请标明出处.