天涯浪子 发表于 2010-5-17 08:13:59

操作系统银行家算法源代码

操作系统银行家算法源代码
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#define False 0
#define True 1
int Max={0};//各进程所需各类资源的最大需求
int Avaliable={0};//系统可用资源
char name={0};//资源的名称
int Allocation={0};//系统已分配资源
int Need={0};//还需要资源
int Request={0};//请求资源向量
int temp={0};//存放安全序列
int Work={0};//存放系统可提供资源
int M=100;//作业的最大数为100
int N=100;//资源的最大数为100
void showdata()//显示资源矩阵
{
   int i,j;
   cout<<"系统目前可用的资源:"<<endl;
   for(i=0;i<N;i++)
    cout<<name<<" ";
   cout<<endl;
   for (j=0;j<N;j++)
      cout<<Avaliable<<" ";//输出分配资源
   cout<<endl;
   cout<<"             Max      Allocation   Need"<<endl;
   cout<<"进程名      ";
   for(j=0;j<3;j++){
      for(i=0;i<N;i++)
   cout<<name<<" ";
   cout<<"      ";
   }
   cout<<endl;
   for(i=0;i<M;i++){
    cout<<" "<<i<<"         ";
    for(j=0;j<N;j++)
   cout<<Max<<" ";
    cout<<"      ";
    for(j=0;j<N;j++)
   cout<<Allocation<<" ";
    cout<<"      ";
    for(j=0;j<N;j++)
   cout<<Need<<" ";
    cout<<endl;
   }
}
int changdata(int i)//进行资源分配
{
int j;
for (j=0;j<M;j++) {
      Avaliable=Avaliable-Request;
      Allocation=Allocation+Request;
      Need=Need-Request;
}
return 1;
}
int safe()//安全性算法
{
int i,k=0,m,apply,Finish={0};
int j;
int flag=0;
Work=Avaliable;
Work=Avaliable;
Work=Avaliable;
for(i=0;i<M;i++){
   apply=0;
   for(j=0;j<N;j++){
    if (Finish==False&&Need<=Work){   
   apply++;
   if(apply==N){
      for(m=0;m<N;m++)
         Work=Work+Allocation;//变分配数
         Finish=True;
      temp=i;
      i=-1;
         k++;
      flag++;
   }
    }
   }
}
for(i=0;i<M;i++){
   if(Finish==False){
   cout<<"系统不安全"<<endl;//不成功系统不安全
   return -1;
   }
}
    cout<<"系统是安全的!"<<endl;//如果安全,输出成功
    cout<<"分配的序列:";
for(i=0;i<M;i++){//输出运行进程数组
       cout<<temp;
    if(i<M-1) cout<<"->";
}
   cout<<endl;
   return 0;
}
void share()//利用银行家算法对申请资源对进行判定
{
char ch;
int i=0,j=0;
ch='y';
cout<<"请输入要求分配的资源进程号(0-"<<M-1<<"):";
    cin>>i;//输入须申请的资源号
cout<<"请输入进程 "<<i<<" 申请的资源:"<<endl;
for(j=0;j<N;j++)
{
   cout<<name<<":";
   cin>>Request;//输入需要申请的资源
}
      for (j=0;j<N;j++){
      if(Request>Need)//判断申请是否大于需求,若大于则出错
   {
   cout<<"进程 "<<i<<"申请的资源大于它需要的资源";
         cout<<" 分配不合理,不予分配!"<<endl;
   ch='n';
         break;
}
       else {
             if(Request>Avaliable)//判断申请是否大于当前资源,若大于则
   {                         //出错
   cout<<"进程"<<i<<"申请的资源大于系统现在可利用的资源";
       cout<<" 分配出错,不予分配!"<<endl;
       ch='n';
   break;
       }
    }
    }
    if(ch=='y') {
       changdata(i);//根据进程需求量变换资源
    showdata();//根据进程需求量显示变换后的资源
       safe();//根据进程需求量进行银行家算法判断
    }
}
void addresources(){//添加资源
    int n,flag;
cout<<"请输入需要添加资源种类的数量:";
cin>>n;
flag=N;
N=N+n;
for(int i=0;i<n;i++){
   cout<<"名称:";
   cin>>name;
   cout<<"数量:";
   cin>>Avaliable;
}
showdata();
safe();
}
void delresources(){//删除资源
char ming;
int i,flag=1;
cout<<"请输入需要删除的资源名称:";
do{
    cin>>ming;
for(i=0;i<N;i++)
   if(ming==name){
    flag=0;
    break;
   }
if(i==N)
   cout<<"该资源名称不存在,请重新输入:";
}
while(flag);
for(int j=i;j<N-1;j++)
{
   name=name;
   Avaliable=Avaliable;
    }
N=N-1;
showdata();
safe();
}
void changeresources(){//修改资源函数
cout<<"系统目前可用的资源:"<<endl;
    for(int i=0;i<N;i++)
    cout<<name<<":"<<Avaliable<<endl;
cout<<"输入系统可用资源:"<<endl;
cin>>Avaliable>>Avaliable>>Avaliable;
cout<<"经修改后的系统可用资源为"<<endl;
for (int k=0;k<N;k++)
    cout<<name<<":"<<Avaliable<<endl;
showdata();
safe();
}
void addprocess(){//添加作业
    int flag=M;
M=M+1;
cout<<"请输入该作业的最打需求量"<<endl;
for(int i=0;i<N;i++){
   cout<<name<<":";
   cin>>Max;
   Need=Max-Allocation;
}
showdata();
safe();
}
int main()//主函数
{
    int i,j,number,choice,m,n,flag;
char ming;
cout<<"*****************资源管理系统的设计与实现*****************"<<endl;
cout<<"请首先输入系统可供资源种类的数量:";
cin>>n;
N=n;
for(i=0;i<n;i++)
{
   cout<<"资源"<<i+1<<"的名称:";
   cin>>ming;
   name=ming;
   cout<<"资源的数量:";
   cin>>number;
   Avaliable=number;
}
cout<<endl;
cout<<"请输入作业的数量:";
cin>>m;
M=m;
cout<<"请输入各进程的最大需求量("<<m<<"*"<<n<<"矩阵):"<<endl;
for(i=0;i<m;i++)
   for(j=0;j<n;j++)
    cin>>Max;
do{
    flag=0;
    cout<<"请输入各进程已经申请的资源量("<<m<<"*"<<n<<"矩阵):"<<endl;
    for(i=0;i<m;i++)
    for(j=0;j<n;j++){
      cin>>Allocation;
       if(Allocation>Max)
       flag=1;
   Need=Max-Allocation;
   }
   if(flag)
    cout<<"申请的资源大于最大需求量,请重新输入!\n";
}
while(flag);
    showdata();//显示各种资源
    safe();//用银行家算法判定系统是否安全
    while(choice)
{
    cout<<"**************银行家算法演示***************"<<endl;
    cout<<"               1:增加资源    "<<endl;
    cout<<"               2:删除资源    "<<endl;
    cout<<"               3:修改资源    "<<endl;
    cout<<"               4:分配资源    "<<endl;
    cout<<"               5:增加作业    "<<endl;
    cout<<"               0:离开      "<<endl;
    cout<<"*******************************************"<<endl;
    cout<<"请选择功能号:";
    cin>>choice;
    switch(choice)
    {
      case 1: addresources();break;
      case 2: delresources();break;
   case 3: changeresources();break;
   case 4: share();break;
   case 5: addprocess();break;
   case 0: choice=0;break;
   default: cout<<"请正确选择功能号(0-5)!"<<endl;break;
    }
}
    return 1;
}

starfei1314 发表于 2010-5-17 19:42:15

没看懂!!!这是干什么的呀

只为技术狂 发表于 2014-10-30 10:58:43

看不懂太深奥了
页: [1]
查看完整版本: 操作系统银行家算法源代码