#include<iostream.h>#include<fstream.h>#include<stdlib.h>#include "windows.h"#define MAX_PROCESS 32 //最大进程数#define MAX_COURCE 64 //最大资源类别 int MAX_FACT_PROCESS; //实际总进程数int MAX_FACT_COURCE; //实际资源类别数int Available[MAX_COURCE]; //可利用资源向量int Max[MAX_PROCESS][MAX_COURCE]; //最大需求矩阵int Allocation[MAX_PROCESS][MAX_COURCE]; //分配矩阵int Need[MAX_PROCESS][MAX_COURCE]; //需求矩阵 int Request_PROCESS; //发出请求的进程int Request_COURCE; //被请求资源类别int Request_COURCE_NEMBER; //请求资源数 struct COMP{int value;int num;int next;};int flag=0;void Read_Initiate(void){ //读入初始化文档ifstream infile("Initiate.txt"); if(!infile){cout<<"不能打开输入文件:"<<"Initiate.txt"<<'\n';exit(1);}cout<<"开始读入初始化文档"<<'\n';int ch;int Array[MAX_PROCESS*MAX_COURCE*2];int num=0;while(infile>>ch) Array[num++]=ch;num=0; MAX_FACT_COURCE=Array[num++]; for(int j=0;j<MAX_FACT_COURCE;j++)Available[j]=Array[num++]; MAX_FACT_PROCESS=Array[num++];for(int i=0;i<MAX_FACT_PROCESS;i++){for(int j=0;j<MAX_FACT_COURCE;j++)Max[i][j]=Array[num++];}infile.close();} void Write_Initiate(void){ //写入初始化文档(分配资源ofstream outfile("Initiate.txt");if(!outfile){cout<<"不能打开初始化文档:"<<'\n';exit(1);}int Array[MAX_PROCESS*MAX_COURCE*2];int num=0;Array[num++]=MAX_FACT_COURCE; for(int i=0;i<MAX_FACT_COURCE;i++)Array[num++]=Available[i];Array[num++]=MAX_FACT_PROCESS;for(i=0;i<MAX_FACT_PROCESS;i++)for(int j=0;j<MAX_FACT_COURCE;j++)Array[num++]=Max[i][j]; num=0;outfile<<Array[num++]<<" ";for(i=0;i<MAX_FACT_COURCE;i++)outfile<<Array[num++]<<" ";outfile<<'\n'<<Array[num++]<<endl;for(i=0;i<MAX_FACT_PROCESS;i++){for(int j=0;j<MAX_FACT_COURCE;j++)outfile<<Array[num++]<<" ";outfile<<endl;}DWORD m_delay=3000;Sleep(m_delay);outfile.close();cout<<"修改初始化文档成功!"<<endl;} void Allocated_list(void){ //读入已分配资源列表ifstream infile("Allocated_list.txt"); if(!infile){cout<<"不能打开输入文件:"<<"Allocated_list.txt"<<'\n';exit(1);}cout<<"开始读入已分配资源列表"<<'\n';int ch,num=0;int Array[MAX_PROCESS*MAX_COURCE];while(infile>>ch)Array[num++]=ch;num=0;for(int i=0;i<MAX_FACT_PROCESS;i++)for(int j=0;j<MAX_FACT_COURCE;j++)Allocation[i][j]=Array[num++];infile.close();} void Set_Need(void){ //设置需求矩阵cout<<"设置需求矩阵"<<'\n';for(int i=0;i<MAX_FACT_PROCESS;i++)for(int j=0;j<MAX_FACT_COURCE;j++)Need[i][j]=Max[i][j]-Allocation[i][j];} void Read_Request(void){ //读入请求向量ifstream infile("Request_list.txt"); if(!infile){cout<<"不能打开输入文件:"<<"Request_list.txt"<<'\n';exit(1);} cout<<"开始读入请求向量"<<'\n';int Array[3];int num=0,ch;while(infile>>ch) Array[num++]=ch; Request_PROCESS=Array[0]; Request_COURCE=Array[1]; Request_COURCE_NEMBER=Array[2];infile.close();} void Write_Allocation(void){ //修改资源分配列表(资源分配)ofstream outfile("Allocated_list.txt");if(!outfile){cout<<"不能打开资源分配列表:"<<'\n';exit(1);}for(int i=0;i<MAX_FACT_PROCESS;i++){for(int j=0;j<MAX_FACT_COURCE;j++)outfile<<Allocation[i][j]<<" ";outfile<<endl;} DWORD m_delay=3000;Sleep(m_delay);cout<<"修改资源分配列表成功!"<<endl;outfile.close();} void Allocate_Source(void){ //开始分配(已通过扫描和安全性检测)cout<<'\n'<<"开始给第"<<Request_PROCESS<<"个进程分配第"<<Request_COURCE<<"类资源"<<Request_COURCE_NEMBER<<"个"<<endl;Write_Initiate();Write_Allocation();DWORD m_delay=3000;Sleep(m_delay);cout<<'\n'<<"祝贺您,资源分配已成功!"<<endl;} void Test_Safty(){ //安全性检测cout<<'\n'<<"进入安全性检测!"<<endl; int Work[MAX_COURCE];for(int i=0;i<MAX_FACT_COURCE;i++){Work[i]=Available[i];} bool Finish[MAX_PROCESS][MAX_COURCE];for(i=0;i<MAX_FACT_PROCESS;i++)for(int j=0;j<MAX_FACT_COURCE;j++)Finish[i][j]=false;COMP Array[32];for(i=0;i<MAX_FACT_PROCESS;i++){Array[i].value=Need[i][Request_COURCE-1]; Array[i].num=i;}for(i=0;i<MAX_FACT_PROCESS;i++)for(int j=i+1;j<MAX_FACT_PROCESS;j++){if(Array[i].value>=Array[j].value){int t;t=Array[j].value; Array[j].value=Array[i].value;Array[i].value=t;t=Array[j].num; Array[j].num=Array[i].num; Array[i].num=t;}else continue;}DWORD m_delay=3000;Sleep(m_delay);/*for(i=0;i<MAX_FACT_PROCESS;i++){for(int j=0;j<MAX_FACT_COURCE;j++)cout<<Need[i][j]<<'\t';cout<<endl;}*/if(Finish[Request_PROCESS-1][Request_COURCE-1]==false&&Need[Request_PROCESS-1][Request_COURCE-1]<=Work[Request_COURCE-1]){Work[Request_COURCE-1]=Work[Request_COURCE-1]+Allocation[Request_PROCESS-1][Request_COURCE-1]; Finish[Request_PROCESS-1][Request_COURCE-1]=true;}else{cout<<"未通过安全性测试,不与以分配"<<endl;exit(0);} for(i=0;i<MAX_FACT_PROCESS;i++){if(Array[i].num==Request_PROCESS-1)continue;if(Array[i].num!=Request_PROCESS-1&&Finish[Array[i].num][Request_COURCE-1]==false&&Need[Array[i].num][Request_COURCE-1]<=Work[Request_COURCE-1]){Work[Request_COURCE-1]=Work[Request_COURCE-1]+Allocation[Array[i].num][Request_COURCE-1]; Finish[Array[i].num][Request_COURCE-1]=true;}} for(i=0;i<MAX_FACT_PROCESS;i++){if(Finish[i][Request_COURCE-1]==true)continue;else{cout<<"未通过安全性测试,不与以分配"<<endl; exit(0);}}cout<<'\n'<<"找到一个安全序列:"<<"P"<<Request_PROCESS<<"--->"; for(i=0;i<MAX_FACT_PROCESS;i++){if(Array[i].num==Request_PROCESS)continue;elsecout<<"P"<<Array[i].num<<"--->";}cout<<'\n'<<"已通过安全性测试!"<<endl;Allocate_Source();} void RUN(void){ //执行银行家算法 cout<<"*************************************************"<<'\n'<<"点击1执行!"<<'\n'<<"点击2退出!"<<'\n'<<"*************************************************"<<endl;cin>>flag;if(flag==2)exit(0);if(flag==1){

评论