欢迎来到天天文库
浏览记录
ID:32765662
大小:81.65 KB
页数:14页
时间:2019-02-15
《实验四银行家算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、银行家算法的模拟实现一.实验目的1.了解进程产生死锁原因,了解为什么要避免死锁。2.掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。二.实验内容:采用银行家算法来实现一个n个并发进程共享m个系统资源的系统。进程可以申请和释放资源,系统可以按照各进程的申请计算是否可以分配给其资源。三.实验原理1.银行家算法的思路先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申
2、请。2•银行家算法中用到的主要数据结构可利用资源向量intAvailable[j]j为资源的种类。最大需求矩阵intMax[i][j]i为进程的数量。Allocation[i][j]need[i][j]=Max[i]O]-Allocation[i][j]intRequesti[j]i进程申请j资源的数量Work[x]分配矩阵int需求矩阵int申请各类资源数量工作向量intintFinish[y]3.银行家算法bank()进程i发出请求申请k个j资源,Requesti[j]=k⑴检查申请量是否不大于需求量:Requesti[j]<=need
3、[i,j],^条件不符重新输入,不允许申请大于需求量。(2)检查屮请量是否小于系统屮的可利用资源数量:Requesti[j]<=available[i,j],若条件不符就申请失败,阻塞该进程,用goto语句跳转到重新申请资源。(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:Available[i,j]=Available[i,j]-Requesti[j];Allocation[i][j]=Allocation[i][j]+Requesti[j];need[i][j]=need[i][j]・Requ
4、esti[j];(4)试分配后,执行安全性检查,调用safe()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原來的资源分配状态,让该进程等待。(5)用do{...}while循环语句实现输入字符y/n判断是否继续进行资源申请。4.安全性检查算法(safe()函数)(1)设置两个向量:工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work=AvailableoFinish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Fin
5、ish[i]=0;当有足够的资源分配给进程时,再令Finish[i]=1o(2)在进程屮查找符合以下条件的进程:条件1:Finish[i]=0;条件2:need[i][j]<=Work[j]若找到,则执行步骤(3)否则,执行步骤(4)(1)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work[j]=Work[j]+Allocation[i][j];Finish[i]=1;gotostep2;(2)如果所有的Finish[i]=1都满足则表示系统处于安全状态,否则,处于不安全状态。四:源程序结构分析1.程序结构程
6、序共有以下五个部分:初始化chushihua():用于程序开始进行初始化输入数据:进程数量、资源种类、各种资源可利用数量、各进程的各种资源已分配数量、各进程对各类资源最大需求数等。当前安全性检查safe():用于判断当前状态安全性,根据不同地方的调用提示处理不同。银行家算法bank():进行银行家算法模拟实现的模块,调用其他各个模块进行银行家算法模拟过程。显示当前状态show():显示当前资源分配详细情况,包括:各种资源的总数量(all)、系统目前各种资源可用的数量、各进程已经得到的资源数量、各进程还需要的资源量。主程序main()逐个调用
7、初始化、显示状态、安全性检查、银行家算法函数,使程序有序的进行。2.数据结构程序使用的全局变量:constintx=10,y=10;〃定义常量intAvailable[x];〃各种资源可利用的数量intAllocation[y][y];〃各进程当前己分配的资源数量intMax[y][y];〃各进程对各类资源的最大需求数intNeed[y][y];〃还需求矩阵intRequest[x];//申请各类资源的数量intWork[x];〃工作向量,表系统可提供给进程运行所碍各类资源数量intFinish[y];〃表系统是否有足够的资源分配给进程,0
8、为否,1为是intp[y];〃存储安全序列inti,j;〃全局变量,主要用于循环语句中intn,m;//n为进程的数量,m为资源种类数intl=0,counter=0;3.函数声
此文档下载收益归作者所有