关于操作系统原理的问题

2024-12-01 11:13:01
推荐回答(1个)
回答1:

呵呵.之前我做过.是第6的银行家算法

#include
#include
#include
#define False 0
#define True 1
int Max[100][100]=;//各进程所需各类资源的最大需求
int Avaliable[100]=;//系统可用资源
char name[100]=;//资源的名称
int Allocation[100][100]=;//系统已分配资源
int Need[100][100]=;//还需要资源
int Request[100]=;//请求资源向量
int temp[100]=;//存放安全序列
int Work[100]=;//存放系统可提供资源
int M=100;//作业的最大数为100
int N=100;//资源的最大数为100
void showdata()//显示资源矩阵
{
int i,j;
cout<<"系统目前可用的资源[Avaliable]:"< for(i=0;i cout< cout< for (j=0;j cout< cout< cout<<" Max Allocation Need"< cout<<"进程名 ";
for(j=0;j<3;j++){
for(i=0;i cout< cout<<" ";
}
cout< for(i=0;i cout<<" "< for(j=0;j cout< cout<<" ";
for(j=0;j cout< cout<<" ";
for(j=0;j cout< cout< }
}

int changdata(int i)//进行资源分配
{
int j;
for (j=0;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 safe()//安全性算法
{
int i,k=0,m,apply,Finish[100]=;
int j;
int flag=0;
Work[0]=Avaliable[0];
Work[1]=Avaliable[1];
Work[2]=Avaliable[2];
for(i=0;i apply=0;
for(j=0;j if (Finish[i]==False&&Need[i][j]<=Work[j]){
apply++;
if(apply==N){
for(m=0;m Work[m]=Work[m]+Allocation[i][m];//变分配数
Finish[i]=True;
temp[k]=i;
i=-1;
k++;
flag++;
}
}
}
}
for(i=0;i if(Finish[i]==False){
cout<<"系统不安全"< return -1;
}
}
cout<<"系统是安全的!"< cout<<"分配的序列:";
for(i=0;i cout< if(i";
}
cout< return 0;
}
void share()//利用银行家算法对申请资源对进行判定
{
char ch;
int i=0,j=0;
ch='y';
cout<<"请输入要求分配的资源进程号(0-"< cin>>i;//输入须申请的资源号
cout<<"请输入进程 "<for(j=0;j{
cout< cin>>Request[j];//输入需要申请的资源
}
for (j=0;j if(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错
{
cout<<"进程 "< cout<<" 分配不合理,不予分配!"< ch='n';
break;
}
else {
if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则
{ //出错
cout<<"进程"< cout<<" 分配出错,不予分配!"< 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 cout<<"名称:";
cin>>name[flag];
cout<<"数量:";
cin>>Avaliable[flag++];
}
showdata();
safe();
}
void delresources(){//删除资源
char ming;
int i,flag=1;
cout<<"请输入需要删除的资源名称:";
do{
cin>>ming;
for(i=0;i if(ming==name[i]){
flag=0;
break;
}
if(i==N)
cout<<"该资源名称不存在,请重新输入:";
}
while(flag);
for(int j=i;j{
name[j]=name[j+1];
Avaliable[j]=Avaliable[j+1];

}
N=N-1;
showdata();
safe();
}
void changeresources(){//修改资源函数
cout<<"系统目前可用的资源[Avaliable]:"< for(int i=0;i cout<cout<<"输入系统可用资源[Avaliable]:"<cin>>Avaliable[0]>>Avaliable[1]>>Avaliable[2];
cout<<"经修改后的系统可用资源为"<for (int k=0;k cout<showdata();
safe();
}
void addprocess(){//添加作业
int flag=M;
M=M+1;
cout<<"请输入该作业的最打需求量[Max]"<for(int i=0;i cout< cin>>Max[flag][i];
Need[flag][i]=Max[flag][i]-Allocation[flag][i];
}
showdata();
safe();
}
int main()//主函数
{

int i,j,number,choice,m,n,flag;
char ming;
cout<<"*****************资源管理系统的设计与实现*****************"<cout<<"请首先输入系统可供资源种类的数量:";
cin>>n;
N=n;
for(i=0;i{
cout<<"资源"< cin>>ming;
name[i]=ming;
cout<<"资源的数量:";
cin>>number;
Avaliable[i]=number;
}
cout<cout<<"请输入作业的数量:";
cin>>m;
M=m;
cout<<"请输入各进程的最大需求量("<for(i=0;i for(j=0;j cin>>Max[i][j];
do{
flag=0;
cout<<"请输入各进程已经申请的资源量("< for(i=0;i for(j=0;j cin>>Allocation[i][j];
if(Allocation[i][j]>Max[i][j])
flag=1;
Need[i][j]=Max[i][j]-Allocation[i][j];
}
if(flag)
cout<<"申请的资源大于最大需求量,请重新输入!\n";
}
while(flag);

showdata();//显示各种资源
safe();//用银行家算法判定系统是否安全
while(choice)
{
cout<<"**************银行家算法演示***************"< cout<<" 1:增加资源 "< cout<<" 2:删除资源 "< cout<<" 3:修改资源 "< cout<<" 4:分配资源 "< cout<<" 5:增加作业 "< cout<<" 0:离开 "< cout<<"*******************************************"< 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)!"< }
}
return 1;
}