⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cn700_vc3484645.txt

📁 这是操作系统《银行家的的算法》 大家一起共享啊!
💻 TXT
字号:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
int Available[50],Allocation[100][100],Max[100][100];//已有资源量
int Need[100][100],Request[40],Work[50],Finish[100],p[100];//需求
int i,j,n,m,l=0,flag=0;//定义全局变量
void safe()
{	
	for (i=0; i<n;i++)
		{
			if (Finish[i]==0)
			{
				flag=0;
				for (j=0; j<m; j++)
				{
					if (Work[j]>=Need[i][j])
						flag=flag+1;
				}
		
				if(flag==m)
				{
					p[l]=i; 
					Finish[i]=1;
					for (j=0; j<m;j++)
					{
						Work[j]=Work[j]+Allocation[i][j];
					}
					l=l+1;
					i= -1;
				}
			}
			i++;
		}
}

int main()
{
	cout<<"           --------------------------------------------------"<<endl;
	cout<<"           ||                                               ||"<<endl;
	cout<<"           ||                模拟银行家算法                 ||"<<endl; 
	cout<<"           ||                                               ||"<<endl; 
	cout<<"           ||                                作者:严晓明   ||"<<endl; 
	cout<<"           ||                                    02102116   ||"<<endl; 
	cout<<"           --------------------------------------------------"<<endl;
	int k=0,r=0;
	char b;
	cout<<"输入进程的数量: ";//从此开始输入有关数据
    cin>>n;
    cout<<"输入资源种类数: ";
	cin>>m;
	cout<<"输入各种资源可利用的数量Available["<<m<<"]: "<<endl;
    for (j=0; j<m; j++)
	{
		cin>>Available[j];
		Work[j]=Available[j];          //初始化Work[j]
	}
	//system("cls");
	cout<<"\n请输入各进程当前已分配的资源数量Allocation["<<n<<"]["<<m<<"]: "<<endl;
	cout<<"\n请严格按照("<<n<<"×"<<m<<")的距阵输入:"<<endl;
	for (i=0; i<n; i++)
	{
		for (j=0; j<m; j++)
		{
			cin>>Allocation[i][j];
		}
		/*if(Available[j]<Allocation[i][j])
			{
				cout<<"您输入的已分配的资源量大于资源总量!!请重新输入!!"<<endl;
			}*/
		Finish[i]=0;//初始化Finish[i]
		//break;
	}
	cout<<"\n输入各进程对各类资源的最大需求数Max["<<n<<"]["<<m<<"]: "<<endl;
    cout<<"\n请严格按照("<<n<<"×"<<m<<")的距阵输入:"<<endl;
	for (i=0; i<n; i++)
	{
		for (j=0; j<m; j++)
		{
			cin>>Max[i][j];
			Need[i][j] = Max[i][j]-Allocation[i][j];
		}
	}

	//判断当前状态的安全性
	safe();
	if (l<n)
	{

		cout<<"\n当前状态不安全!!!!!"<<endl;
		return 0;
	}
	else
	{	int i;
		l=0;
		cout<<"\n安全的状态!!!"<<endl;
		cout<<"安全序列为:   ";
	//	if(i==0)
	//	{
			//cout<<"进程(0)"<<endl;
			//Finish[i]=0;
	//	}
		for (i=0; i<n; i++)
		{
			cout<<"进程"<<"("<<p[i]<<")"<<"==>>";
			Finish[i]=0;
			
			
		}
		cout<<endl;
	}
	//system("cls");
    do
	{
		//输入请求
		cout<<"\n请输入申请资源的进程编号: "<<endl;
		cin>>k;
		if(k>n-1)
		{
		cout<<"您输入了错误的进程号,请检查!!"<<endl;
		break;
		}
		cout<<"\n请输入申请各类资源的数量: "<<endl;
		for (j=0; j<m; j++)
		{
			cout<<"进程"<<k<<"["<<j<<"]:";
			cin>>Request[j];	
		}

		//判断输入的情况
		for (j=0; j<m; j++)
		{
			if (Request[j] > Need[k][j])
			{
				system("cls");
			    cout<<"出错!申请大于需要量~~"<<endl;
			    return 0;
			}
		}
		for (j=0; j<m; j++)
		{
			if (Request[j]>Available[j])
			{
				//system("cls");
				cout<<"根本没那么多资源,请仔细检查!!!"<<endl;
				return 0;
			}
		}

		//改变Avilable、Allocation、Need的值
		for (j=0; j<m; j++)
		{
			Available[j] = Available[j]-Request[j];
			Allocation[k][j] = Allocation[k][j]+Request[j];
			Need[k][j] = Need[k][j]-Request[j];
			Work[j] = Available[j];
		}

		//判断当前状态的安全性
		safe();
		if (l<n)
		{
			l=0;
			cout<<"\n当前状态不安全!!!!!!";
			//恢复数据 
			for (j=0; j<m; j++)
			{
				Available[j] = Available[j]+Request[j];
				Allocation[k][j] = Allocation[k][j]-Request[j];
				Need[k][j] = Need[k][j]+Request[j];
				Work[j] = Available[j];
			}
			for (i=0; i<n; i++)
				Finish[i]=0;
		}
		else
		{	system("cls");
			l=0;
			cout<<"\n申请资源成功!!!"<<endl;
			cout<<"\n安全的状态!!!"<<endl;
		    cout<<"安全序列为:   ";
			for (i=0; i<n; i++)
			{
				cout<<"进程"<<"("<<p[i]<<")"<<"==>>";
				Finish[i]=0;
			}
			cout<<endl;
		}

        //显示输入各数组的值
		cout<<"\n当前状态:"<<endl;
	    cout<<"资源量[m]:"<<endl;
        for (j=0; j<m; j++)
		{
			cout<<Available[j]<<"    ";
		}
	    cout<<endl;
	    cout<<"\n已分配资源[n][m]:"<<endl;
	    for (i=0; i<n; i++)
		{
			for (j=0; j<m; j++)
			{
				cout<<Allocation[i][j]<<"    "; 
			}
		    cout<<endl;
		}
	    cout<<"\n最大需求[n][m]:"<<endl;
	    for (i=0; i<n; i++)
		{
			for (j=0; j<m; j++)
			{
				cout<<Max[i][j]<<"    ";
			}
		    cout<<endl;
		}
		//system("cls");
		cout<<"\n要继续申请资源,请按'y'或'Y',否则按'n'或'N'"<<endl;
		cin>>b;
		if(b=='y'||b=='Y')
		{
			r=1;
			//输入请求
		    cout<<"\n请输入申请资源的进程编号(0,1…,n-1):"<<endl;
		    cin>>k;
			if(k>n-1)
				{
					cout<<"您输入了错误的进程号,请检查!!"<<endl;
					break;
				}
		    cout<<"\n请输入申请各类资源的数量:"<<endl;
		    for (j=0; j<m; j++)
			{
			    cout<<"进程"<<k<<"["<<j<<"]:";
				cin>>Request[j];
			}
		}
		else
		r=0;
		system("cls");
	cout<<"           ----------------------------------------------------"<<endl;
	cout<<"           ||                                                ||"<<endl;
	cout<<"           ||                                                ||"<<endl; 
	cout<<"           ||                  欢迎再次使用!!!               ||"<<endl; 
	cout<<"           ||                       Welcome Back!!!          ||"<<endl; 
	cout<<"           ||                                                ||"<<endl; 
	cout<<"           ----------------------------------------------------"<<endl;	
	}while (r==1);
	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -