欢迎来到天天文库
浏览记录
ID:22282119
大小:199.74 KB
页数:7页
时间:2018-10-28
《实验四银行家算法模拟》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验四银行家算法模拟【实验目的】(1)进一步理解利用银行家算法避免死锁的问题;(2)在了解和掌握银行家算法的基础上,编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的-•致性。(3)理解和掌握安全序列、安全性算法【实验要求】(1)丁解和理解死锁;(2)理解利用银行家算法避免死锁的原理;(3)会使川某种编程语言。【实验原理】一、安全状态指系统能按照某种顺序如<?1,?2,...办〉(称为<?1,?2,...仰〉序列为安全序列),为每个进程分配所需的资源,直至最人需求,使得每个进程都能顺利完成。二、银行家算法假设在进程并发执行时进程i提出
2、请求j类资源k个后,表示为RequestiLj]=ko系统按卜'述步骤进行安全检查:(1)如果Rcqucsti<Nccdi则继续以下检查,杏则显示需求屮请超出敁大需求值的错误。(2)如果Requesti^Available则继续以卜'检丧,否则显示系统无足够资源,Pi阻塞等待。(3)系统试探着把资源分配给进程Pi,井修改卜*面数据结构屮的数值:Available[j]:=Available[j]-Requesti[j];Allocation[i,j]:=Allocation[i,j]+Requesti[j];Need[i,j]:=Nccd[i,j]-R
3、equesti[j];(4)系统执行安全性算法,检杏此次资源分配系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原來的资源分配状态,让进程Pi等待。三、安全性算法(1)设置两个向量:①工作向fiWork:它表示系统可提供给进程继续运行所需的各类资源数H,它含冇m个元素,在执行安全:算法开始时,Work:=Available;②Finish:它表示系统是否冇妃够的资源分配给进程,使之运行完成。开始时先做Finish(1):=false;当有疋够资源分配给进程时,PJ令Hnish[i]:=true。
4、(2)从进程集合十找到一个能满足下述条件的进稈:①Finish[i]=falsc;②Need[i,j]SWork[j];若找到,执行步骤(3),否则,执行步骤(4)。(3)当进程Pi获得资源P,可顺利执行,直茧完成,并释放出分配给它的资源,故应执行:>Work[j]:=Work[i]+Allocation[i,j];>Finish[i]:=true;>gotostep2;(4)如果所有进程的Finish[i]=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。【实验步骤】参考实验步骤如卜:(1)参考阁1-1所示流程阁编写安全性算法。1
5、开始图1-1安全性算法流程图每次提岀中请之后输岀中请成功与否的结果。如果成功还志耍输出变化前后的各种数裾,并.F1.输出安全序列。(3)参考图1-2所示流程图编写银行家算法。(4)编写主函数来循环调川银行家算法。输入初始参数(资出错返冋:rcturn(crro出错返回:(进程附樂)申请失败。以上分配作废,恢父原來的分配状态:申诸成功。输出各种数据的变化Availablefj]=Availablefj]+Request[i]fj]Allocation[i][j]=Allocation[i][j]—Request[i][j]Nccd[i]
6、j]=Nccd[
7、i]
8、j]+Rcqucst[i]
9、j]结來阁1-2银行家算法流程阁【实验示例】#include10、}};//各进程仍需要的各类资源intresult[5]={-l,-l,-l,-l,-l};//存放预分配成功的线税intcurrentavail[3]={3,3,2};//当前可分配资源printf("银行家总共拥有的各类资源的总数:ABCii1057n);printf("银行FI前仍剩下的各类资源的数量:ABC332");printf("各进程对各类资源的最人需求量:ABC");for(i=0;i<5;i++)printf("P%d:",i);for(j=0;j<3J++){printf(”%d",claim[i][j11、]);C_A[i][j]=claim[i][j]-allocation[i][j];}prin
10、}};//各进程仍需要的各类资源intresult[5]={-l,-l,-l,-l,-l};//存放预分配成功的线税intcurrentavail[3]={3,3,2};//当前可分配资源printf("银行家总共拥有的各类资源的总数:ABCii1057n);printf("银行FI前仍剩下的各类资源的数量:ABC332");printf("各进程对各类资源的最人需求量:ABC");for(i=0;i<5;i++)printf("P%d:",i);for(j=0;j<3J++){printf(”%d",claim[i][j
11、]);C_A[i][j]=claim[i][j]-allocation[i][j];}prin
此文档下载收益归作者所有