欢迎来到天天文库
浏览记录
ID:55600722
大小:54.50 KB
页数:8页
时间:2020-05-20
《实验四 死锁检测实验.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验四死锁检测实验(一)实验目的采用银行家算法来预防死锁是可靠的,但也是非常保守的,因为它限制了进程对资源的存取,从而降低了进程的并发运行程度。死锁检测并不限制进程对资源的申请,只要有,就分配,但这也可能造成死锁。但由于死锁并不是经常发生的,故大大提高了系统运行的效率。通过本实验,可使学生进一步加深理解和掌握死锁的检测算法。(二)实验题目两个题目任选其一:1、编写对每种类型多个资源的死锁检测算法。2、使用检测“进程—资源循环等待链”的方法,编写死锁检测算法(有参考代码)(三)实验要求题目1:(1)死锁检测算法的数据
2、结构参考教材3.4.2节图3-6的现有资源矩阵E、可用资源矩阵A、当前分配矩阵C、进程请求资源矩阵R。(2)完成对教材中图3-7的死锁检测算法例子的测试。(3)完成在图3-7基础上,修改进程2的请求分别为2101下的死锁检测。题目2:(1)利用“进程—资源循环等待链”的方法,编写死锁检测算法的具体方法可参考教材3.4.1节的算法,在了解此算法思想的基础上,也可参考给定代码;具体代码描述见附件1。(2)利用教材图3-5a)中的资源分配图完成对该算法的测试。(四)实验报告要求画出所实现算法的详细框图;说明所采用的数据结
3、构;列出输入数据(进程和所申请的资源数据可用命令行或文件输入);列出运算的输出结果(输入结果包括是否死锁,死锁进程有哪些,也可包含中间结果);实验总结与心得。根据情况可以列出代码。8附件1:模拟死锁检测算法描述1.输入:“资源分配表”文件,每一行包含资源编号、进程编号两项(均用整数表示,并用空格分隔开),记录资源分配给了哪个进程。“进程等待表”文件,每一行包含进程编号、资源编号两项(均用整数表示,并用空格分隔开),记录进程正在等待哪个资源。下面是一个示例:资源分配表:112233进程等待表:1223312.处理要求
4、:程序运行时,首先提示“请输入资源分配表文件的文件名:”;再提示“请输入进程等待表文件的文件名:”。输入两个文件名后,程序将读入两个文件中的有关数据,并按照死锁检测算法进行检测。3.输出要求:第一行输出检测结果:有死锁或无死锁。第二行输出进程循环等待队列,即进程编号(如果有死锁)。4.死锁检测算法:检测算法通过反复查找进程等待表和资源分配表,来确定进程Pj对资源ri的请求是否导致形成环路,若是,便确定出现死锁。5.源代码参考:#include#include#include
5、constintMAXQUEUE=100;//定义表的最大行数typedefstructnode{intresource;intprocess;}cell;//边的结构(一个资源节点、一个进程节点)8celloccupy[MAXQUEUE];//分配边数组intoccupy_quantity;//分配边的数量cellwait[MAXQUEUE];//申请边数组intwait_quantity;//申请边的数量//初始化函数voidinitial(){inti;for(i=0;i6、;i++){occupy[i].process=-1;occupy[i].resource=-1;wait[i].process=-1;wait[i].resource=-1;}occupy_quantity=0;wait_quantity=0;}//读数据文件intreadData(){FILE*fp;charfname[20];inti;cout<<"请输入资源分配表文件的文件名:"<>fname;if((fp=fo7、pen(fname,"r"))==NULL){cout<<"错误,文件打不开,请检查文件名:)"<8、cin>>fname;if((fp=fopen(fname,"r"))==NULL){cout<<"错误,文件打不开,请检查文件名:)"<
6、;i++){occupy[i].process=-1;occupy[i].resource=-1;wait[i].process=-1;wait[i].resource=-1;}occupy_quantity=0;wait_quantity=0;}//读数据文件intreadData(){FILE*fp;charfname[20];inti;cout<<"请输入资源分配表文件的文件名:"<>fname;if((fp=fo
7、pen(fname,"r"))==NULL){cout<<"错误,文件打不开,请检查文件名:)"<8、cin>>fname;if((fp=fopen(fname,"r"))==NULL){cout<<"错误,文件打不开,请检查文件名:)"<
8、cin>>fname;if((fp=fopen(fname,"r"))==NULL){cout<<"错误,文件打不开,请检查文件名:)"<
此文档下载收益归作者所有