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

📄 bank.txt

📁 用c++实现的操作系统中著名的银行家算法
💻 TXT
字号:
7 5 3
3 2 2
9 0 2
2 2 2
4 3 3


0 1 0
2 0 0
3 0 2
2 1 1
0 0 2

#include <iostream>
using namespace std;

int Sum[3] = {10, 5, 7};                    
int Available[3];         
int Max[5][3];   
int Allocation[5][3];  
int Need[5][3];        
int Request[5][3];    
bool Finish[5];        
int p[5];                
                                 
void Printmenu();
void Init();
bool Safe();
void Bank();
void Print();

int main()
{
	int n;
	Printmenu();
	while (1)
	{
	
		cin>>n;
		switch (n)
		{
		case 1:
			system("cls");
			Init();
			Printmenu();
			continue;
		case 2:
			system("cls");
			Safe();
			Printmenu();
			continue;
		case 3:
			system("cls");
			Print();
			Printmenu();
			continue;
		case 4:
			system("cls");
			Bank();
			Printmenu();
			continue;
		case 5:
			exit(1);

		}
		system("cls");
	}
	return 0;
}
void Printmenu()
{
	cout<<" ---------"<<"银行家算法模拟"<<"--------------"<<endl<<endl;
	cout<<"1.初始化分配"<<endl;
	cout<<"2.判断是否安全并输出"<<endl;
	cout<<"3.显示资源分配表"<<endl;
	cout<<"4.动态分配资源"<<endl;
	cout<<"5.退出"<<endl;
	cout<<"输入:";

}
void Init()                //初始化分配
{
    int i,j;
 
    cout<<"输入最大需求矩阵Max"<<endl;
    for(i = 0; i < 5; i++)
		for(j = 0; j < 3; j++)
			cin>>Max[i][j];
    cout<<"输入分配矩阵Allocation"<<endl;
    for(i = 0; i < 5; i++)
    {
        for(j = 0; j < 3; j++)
        {
            cin>>Allocation[i][j];
            Need[i][j]=Max[i][j]-Allocation[i][j];
            if(Need[i][j] < 0)
            {
                cout<<"您输入的第"<<i+1<<"个进程的第"<<j+1<<"个资源数大于最大需求数,请重新输入:"<<endl;
                j--;
                continue;
            }
        }
    }
 
    for(i = 0; i < 3; i++)
    {
		Available[i] = Sum[i] - Allocation[0][i] - Allocation[1][i] - Allocation[2][i] - Allocation[3][i]-Allocation[4][i];
       // cout<<Available[i]<<endl;
    }
	cout<<"输入完毕"<<endl;
}

void Print()        //显示资源分配表
{
	int i, j;
	cout<<"最大需求矩阵Max"<<endl;
	for(i = 0; i < 5; i++)
	{
		for(j = 0; j < 3; j++)
			cout<<Max[i][j]<<" ";
		cout<<endl;
	}
	cout<<"分配矩阵Allocation"<<endl;
	for(i = 0; i < 5; i++)
	{
		for(j = 0; j < 3; j++)
			cout<<Allocation[i][j]<<" ";
		cout<<endl;
	}

}
void Bank()        //银行家算法
{
    int i, process;
    while(1)
    {
        cout<<"请输入要分配资源的进程号(输入-1退出)"<<endl;
        cin>>process;
		if(process == -1)
			break;
        cout<<"请输入进程所分配的各资源的数量"<<endl;
        for(i = 0; i < 3; i++)
        {
            cin>>Request[process][i];
        }
        for(i = 0; i < 3; i++)
        {
            if(Request[process][i] > Need[process][i])            //step 1
            {
                cout<<"您输入的请求数超过进程的需求量!请重新输入!"<<endl;
                continue;
            }
            if(Request[process][i] > Available[i])               //step 2
            {
                cout<<"您输入的请求数超过系统有的资源数!请重新输入!"<<endl;
                continue;
            }
        }
        for(i = 0; i < 3; i++)                                   //step 3
        {
            Available[i] -= Request[process][i];
            Allocation[process][i] += Request[process][i];
            Need[process][i] -= Request[process][i];
        }
        if(Safe())
        {
            cout<<"安全状态同意分配请求!"<<endl;
        }
        else
        {
            cout<<"不安全状态"<<endl;
            for(i = 0; i < 3; i++)          //系统不安全,分配作废
            {
                Available[i] += Request[process][i];
                Allocation[process][i] -= Request[process][i];
                Need[process][i] += Request[process][i];
            }
        }
        for(i = 0;i < 5; i++)
        {
            Finish[i] = false;
        }
	}
}

bool Safe()                    //安全性算法
{
    int i, j, k, l=0;
    int Work[3];                
    for(i = 0; i < 3; i++)
	{
		Work[i]=Available[i];
	}

    for(i = 0; i < 5; i++)
    {
        Finish[i] = false;
    }
    for(i = 0; i < 5; i++)
    {    
        if(Finish[i] == true)
        {
            continue;
        }
        else
        {
            for(j = 0; j < 3; j++)
            {
                if(Need[i][j] > Work[j])
                {
                    break;
                }
            }
            if(j == 3)
            { 
                Finish[i] = true;
                for(k = 0; k < 3; k++)
                {
                    Work[k] += Allocation[i][k];
                }
                p[l++] = i;
				if(i == 4)              //循环查看
					i = -1;
            }
            else
            {
                continue; 
            }
        }
        if(l == 5)
        {
            cout<<"安全序列:"<<endl;
            for(i = 0; i < l; i++)
            {
                cout<<p[i];
                if(i != l-1)
                {
                    cout<<"-->";
                }
            }
            cout<<""<<endl;
            return true;
        }
    }
    cout<<"系统是不安全的"<<endl;
    return false;
}

⌨️ 快捷键说明

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