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

资源简介

(1) 简单的交互界面 (2) 能显示当前系统资源的剩余情况和占用情况 (3) 能输入每个进程的最大资源要求 模拟利用银行家算法为进程的若干次资源请求分配资源 (4) 输入本次资源要求; (5) 按银行家算法为进程分配资源,本次分配是否成功要显示出来(要能处理各种情况:可以满足这次请求、由于资源不够不能满足这次请求、由于可能产生不安全不能满足这次请求、请求不合理拒绝请求等) (6) 作业撤销时要回收资源

资源截图

代码片段和文件信息


//5.源程序代码
#include 
#include 
#include 
#include 
//定义全局变量
const int x=10y=10;   //常量,便于修改
int Available[x];      //各资源可利用的数量
int Allocation[y][y];  //各进程当前已分配的资源数量
int Max[y][y];  //各进程对各类资源的最大需求数
int Need[y][y]; //尚需多少资源
int Request[x]; //申请多少资源
int Work[x]; //工作向量,表示系统可提供给进程继续运行所需的各类资源数量
int Finish[y]; //表示系统是否有足够的资源分配给进程,1为是
int p[y];  //存储安全序列
int ij;   //i表示进程,j表示资源
int nm;  //n为进程i的数量m为资源j种类数
int l=0;   //l用来记录有几个进程是Finish[i]=1的,当l=n是说明系统状态是安全的
int counter=0;
 
//函数声明
void chushihua();   //初始化函数
void safe();      //安全性算法
void show();    //函数show输出当前状态
void bank();     //银行家算法
void jieshu();      //结束函数

void chushihua()
{
    cout<<“输入进程的数量: “;//从此开始输入有关数据
    cin>>n;
    cout<<“输入资源种类数: “;
    cin>>m;
    cout< cout<<“............................................“<    for (j=0; j    {
       cout<<“    输入资源 “<       cin>>Available[j]; //输入数字的过程...
       Work[j]=Available[j];      //初始化Work[j],它的初始值就是当前可用的资源数
    }
    cout<    cout<<“............................................“< for (i=0; i    {
cout<<“     输入进程 “<        for (j=0; j        {
       
        cin>>Allocation[i][j];
        }
    cout<    Finish[i]=0;//初始化Finish[i]
    }
    cout<    for (i=0; i    {  cout<<“   输入进程 “<        for (j=0; j        {
        
          cin>>Max[i][j];
          if(Max[i][j]>=Allocation[i][j]) //若最大需求大于已分配,则计算需求量
          Need[i][j] = Max[i][j]-Allocation[i][j];
          else
          Need[i][j]=0;//Max小于已分配的时候,此类资源已足够不需再申请
        }
      cout<    }
    cout<}

//安全性算法函数
void safe()
{
    l=0;
    for (i=0; i {  //i++
    if (Finish[i]==0)
  {  //逐个查找Finish[i]==0的进程    条件一
    counter=0;   //记数器
    for (j=0; j    {
    if (Work[j]>=Need[i][j])  counter=counter+1;//可用大于需求,记数
    }
    if(counter==m)  //i进程的每类资源都符合Work[j]>=Need[i][j] 条件二
    {
        p[l]=i;  //存储安全序列
        Finish[i]=1;  //i进程标志为可分配
        for (j=0; j           Work[j]=Work[j]+Allocation[i][j];  //释放资源
        l=l+1; //记数现在有L个进程是安全的,当L=N时说明满足安全序列
        i= -1; //从第一个进程开始继续寻找满足条件一二的进程
    }
  }
 }
}

//显示当前状态函数
void show() //函数show输出当前资源分配情况
{
    int ij; //局部变量
    int All[y]; //各种资源的总数量
    int L1; //局部变量L1
    cout<<“当前的状态为:“<    cout<<“各种资源的总数量:“<    for (j=0;j    {
    cout<<“ 资源“<    All[j]=Available[j];   //总数量=可用的+已分配的
    for (i=0;i    cout<    }
    cout<    for (j=0;j          cout<<“ 资源“<

评论

共有 条评论

相关资源