文档介绍:学号 P71514032 专业 计算机科学与技术姓名实验日期 教师签字成绩实验报告【实验名称】银行家算法【实验目的】掌握银行家算法,用银行家算法模拟操作系统避免死锁的方法【实验原理】银行家算法又称“资源分配拒绝”法,其基本思想是,系统中的所有进程放入进程集合,在安全状态下系统受到进程的请求后试探性的把资源分配给他,现在系统将剩下的资源和进程集合中其他进程还需要的资源数做比较,找出剩余资源能满足最大需求量的进程,从而保证进程运行完成后还回全部资源。这时系统将该进程从进程集合中将其清除。此时系统中的资源就更多了。反复执行上面的步骤,最后检查进程的集合为空时就表明本次申请可行,系统处于安全状态,可以实施本次分配,否则,只要进程集合非空,系统便处于不安全状态,本次不能分配给他。请进程等待用C语言编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。程序能模拟多个进程共享多种资源的情形。进程可动态地申请资源,系统按各进程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源数量以及为某进程分配资源后的有关资源数据的情况【数据结构和符号说明】可利用资源向量Available最大需求矩阵Max分配矩阵Allocation需求矩阵Need工作向量Work标记向量Finishcharname[100][10];//定义最大100个进程,每个大小为10intMax[100][100];//定义intAllocation[100][100];//可利用资源向量资源数intNeed[100][100];//需求矩阵intavaiable[100];//系统可利用资源intavaiable1[100];intstate[100];//进程状态数组charname1[100][10];//进程名intbigger;;//是否大于intN;//进程数intn;//资源数intcounter;函数:voidInput()//输入函数voidInit()//初始化voidoutput()//输出安全序列或等待voidinsert_pcb()//请求进程或更新进程voidshow()//显示界面与选择intCmpRequestAvailable(intPos,intn)//比较Request和Available的大小intCmpRequestNeed(intPos,intn)//比较Request和Need的大小voidReset(intn,intPos)//更新request之后的Need,Allocation,Available的值voidBanker()//银行家算法【实验流程图及算法实现】用C语言编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。程序能模拟多个进程共享多种资源的情形。进程可动态地申请资源,系统按各进程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源数量以及为某进程分配资源后的有关资源数据的情况【流程图】代码:#include<iostream>usingnamespacestd;charname[100][10];定义最大100个进程,每个大小为10intMax[100][100];//定义intAllocation[100][100];//可利用资源向量资源数intNeed[100][100];//需求矩阵intavaiable[100];//intstate[100];//进程状态数组intdayu;;是否大于intN;intn;voidinput(){cout<<"输入进程个数"<<endl;cin>>N;cout<<"输入资源个数"<<endl;cin>>n;cout<<"系统现有的各资源的个数"<<endl;for(inti=0;i<n;i++)cin>>avaiable[i];for(inti=0;i<N;i++)//输入{cout<<"输入第"<<i<<"个进程的名字"<<endl;cin>>name[i];cout<<"输入第"<<i<<"所需要各进程的最大资源数"<<endl;for(intj=0;j<n;j++)cin>>Max[i][j];cout<<"输入第"<<i<<"现在所拥有的资源个数"<<endl;for(intj=0;j<n;j++)cin>>Allocation[i][j];state[i]=0;}for(inti=0;i<N;i++)for(intj=0;j<n;j++)//寻找需求矩阵Need[i][j]=Max[i][j]-Allocation[i][j];}voidyinhangjia(){inti,j,k;for(i=0;i<