• 大小: 231KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-04
  • 语言: C/C++
  • 标签: C++  

资源简介

操作系统 里的 银行家算法 用C++语言实现

资源截图

代码片段和文件信息

#include
#define MAXm 50                // 定义最大进程数
#define MAXn 100               //定义最大资源数

int MAX[MAXm][MAXn];           //最大需求矩阵
int Allocation[MAXm][MAXn];    //已分配矩阵
int Available[MAXn];           //可用资源数组
int Need[MAXm][MAXn];          //需求矩阵
int Request[MAXm][MAXn];       //请求矩阵
int Finish[MAXm];              //系统是否有足够的资源分配给进程
int mn;                       //m个进程n个资源

#define False 0
#define True 1
void init();  
int safe();
void banker();
void main()
{init();safe();banker();}

//*************初始化算法***************
void init() 
{
int ij;

    //*****************自定义进程数目与资源种类***************************
cout<<“请输入进程的数目:“;
cin>>m;
cout<<“请输入资源的种类数目:“;
cin>>n;

//*****输入每个进程对每种资源的最大需求、已经获得的数量、每种类型资源的数目

cout<<“各进程资源最大需求(Max)按照“< for(i=0;i for(j=0;j cin>>MAX[i][j]; 

cout<<“各进程当前获得资源(Allocation)按照“< for(i=0;i {
for(j=0;j {
cin>>Allocation[i][j];
Need[i][j]=MAX[i][j]-Allocation[i][j];
 
}
}
cout<<“系统可用资源(Available):“< for(j=0;j {
cin>>Available[j];
}
}

//*****************银行家算法,为进程分配资源***********
void banker() 
{
int ij; 
  int choice;    
    while(1)
    {

       cout<       cout<<“输入要进行的操作(1:分配资源  2:离开) :“;    //用户选择————
       cin>>choice;

       if(choice==1)   //分配资源————

       {

cout<<“请输入要分配资源的进程号(0123……):\n“;
cin>>i;
cout<<“请输入进程申请的资源(Request):“< for(j=0;j cin>>Request[i][j]; 

//**********银行家算法进行检查*************         
       for(j=0;j {
if(Request[i][j]>Need[i][j])
{

cout<<“申请的资源大于它需要的资源数请重新输入!\n“;
continue;
   }
if(Request[i][j]>Available[j])
{

cout<<“当前系统可用资源不够,请等待!“< continue;  
}
}

for(j=0;j {
    
  Available[j]=Available[j]-Request[i][j];   //可用资源减少
  Allocation[i][j]=Allocation[i][j]+Request[i][j];//所得资源增加
  Need[i][j]=Need[i][j]-Request[i][j];       //仍需资源减少
}

if(safe()<0)
{

cout<<“分配不成功,请等待!“;
for (j=0;j


Available[j]=Available[j]+Request[i][j]; 
Allocation[i][j]=Allocation[i][j]-Request[i][j]; 
Need[i][j]=Need[i][j]+Request[i][j]; 

}
for(i=0;i {
 Finish[i]=False;
}

 }  
else
{
cout<<“同意分配请求!“< }
}
else if(choice==2)    //离开————
break; 
else cout<<“请输入合法数字!“;
}
}
 
//*********安全性算法 ************
int safe() 
{
 int ijkl=0;
 int Work[MAXn];                    //工作组
 int p[MAXm];                       //记录序列
 for(i=0;i  Work[i]=Available[i];              //工作分配初始化为系统可用资源 
 for(i=0;i  {
Finish[i]=False;
 }
 for(i=0;i  { 
if(Finish[i]==True)
 {
continue;
 }
 else
 {
 for(

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     213094  2011-06-14 10:15  Debug\bank.exe

     文件     248452  2011-06-14 10:15  Debug\bank.ilk

     文件      15845  2011-06-14 10:15  Debug\bank.obj

     文件     244436  2011-06-14 10:15  Debug\bank.pch

     文件     427008  2011-06-14 10:15  Debug\bank.pdb

     文件      41984  2011-06-14 10:15  Debug\vc60.idb

     文件      61440  2011-06-14 10:15  Debug\vc60.pdb

     文件       3980  2011-05-03 11:58  bank.cpp

     文件       3377  2011-06-14 10:14  bank.dsp

     文件        516  2011-06-14 10:15  bank.dsw

     文件      41984  2011-06-14 10:15  bank.ncb

     文件      48640  2011-06-14 10:15  bank.opt

     文件        736  2011-06-14 10:15  bank.plg

     文件        536  2011-05-03 11:58  bank_.dsw

     目录          0  2011-06-14 10:15  Debug

----------- ---------  ---------- -----  ----

              1352028                    15


评论

共有 条评论