ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:177.24KB ,
资源ID:3463509      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3463509.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(二死锁的检测与解除.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

二死锁的检测与解除.docx

1、二死锁的检测与解除实验二 死锁的检测与解除一、 实验目的:当系统为进程分配资源时,若未采取任何限制性措施,则系统必须提供检测和解除死锁的手段,为此,系统必须做到:(1)保存有关资源的请求和分配信息;(2)提供一种算法,以利用这些信息来检测系统是否已进入死锁状态。某一状态为死锁状态的充分条件是:当且仅当某一状态的资源分配图是不可完全简化的。通过该实验,可以充分理解死锁的检测与解除的基本原理。二、 实验题目: 设计一个 m个并发进程共享 n个系统资源的系统。进程可动态申请资源和释放资源,系统按各进程的申请动态的分配资源。要求用死锁检测算法检测当某一进程提出资源分配请求时,系统会不会陷入死锁状态;如

2、若陷入死锁状态要求用某种算法解除死锁三实验源程序文件名:sisuo .cpp 执行文件名:sisuo.exe四、实验分析1)本实验采用死锁检测算法检测死锁,死锁检测的数据结构如下 (1)可利用资源向量available,它表示了n类资源中每一类资源的可用数目。(2)把不占用资源的进程用finishi=true标示(3)从进程集合中找到一个requesti=work的进程,做如下处理:将其资源分配图简化,释放出资源,增加工作向量work:=work+allocationi,并将其finishi置1(4)若不能把所有的进程都标记为finishi=1,则表明该系统状态将发生死锁当发现进程死锁时,便应

3、立即把它们从死锁状态中解脱出来。本实验采用的解除死锁的方法是:撤销进程。本实验采用撤销的进程数目最小的方法,把死锁进程中占有资源最多的进程撤销,如若仍发生死锁,继续撤销下一进程2)流程图:(1) 主函数流程图(2)judge函数流程图 (3) check函数流程图(4) 解锁函数流程图3)源代码 #include#include#includeusing namespace std; /名字空间#define TRUE 1#define FALSE 0 /布尔值int compare(int *request,int *work,int N,int k) /如果Requestiwork则返回f

4、alseint j,c=0;for(j=0;jworkj) c+; if(c0) return FALSE;else if(c=0) return TRUE;/判断int check(int *work,int *request,int *allocation,int *finish,int *p,int m,int n) int i,j,flag=TRUE,K=0; while(flag=TRUE) /反复判断,直到无法判断 flag=FALSE; for(i=0;im;i+) /对任一进程进行判断 if(finishi=FALSE&compare(request,work,n,i)=TRU

5、E) /比较 for(j=0;jn;j+) /增加工作向量 workj+=allocationij; finishi=TRUE; pi=TRUE; /第i个进程放完资源 flag=TRUE; break; /*若所有的进程都放完,则返回ture,否则返回false* if(flag=FALSE) for(i=0;i0) return FALSE; else if(K=0) return TRUE;/*/解锁函数void jiesuo(int *work,int *request,int *allocation,int *finish,int *p,int m,int n) int i,j,t,

6、flag; int *sum=new intm; for(i=0;im;i+) /初始化数组 sumi=0; for(i=0;im;i+) /统计死锁资源、释放 if(pi=FALSE) for(j=0;jn;j+) sumi=sumi+allocationij; allocationij=0; t=sum0; for(i=1;im;i+) /找出最大死锁进程i if(tsumi) t=sumi;flag=i; cout撤消占资源最大的进程:flagendl; for(j=0;jn;j+) /回收资源 workj+=allocationflagj; finishflag=TRUE; /完成fl

7、ag进程的操作 pflag=FALSE; /不再对它进行判断 flag=check(work,request,allocation,finish,p,m, n); /判断是否已经解除死锁 if(flag=TRUE) coutendl; cout成功解除死锁endl; else jiesuo(work,request,allocation,finish,p,m,n); /如果还没解除,继续放资源void judge(int *work,int *request,int *allocation,int *finish,int *p,int m,int n) int flag; flag=check

8、(work,request,allocation,finish,p,m, n); /判断if(flag=TRUE) cout不会发生死锁!endl; else cout会发生死锁!死锁进程如下:endl; for(int i=0;im;i+) /找出死锁进程 if(pi=FALSE) couti ; coutendl; jiesuo(work,request,allocation,finish,p,m,n); /解锁 void main() /主函数 cout死锁检测与解除算法示例endl; int m=0;int n=0; int i,j; coutm;coutendl; coutn;cou

9、tendl; int *allocation=new int *m; /定义数组 int *max=new int *m; int *need=new int *m; int *request=new int *m; int *available=new intn; int *p=new intm; int *finish=new intm; int *work=new intn; for( i=0;im;i+) /初始每个进程放资源状态为false pi=FALSE; cout输入可用矩阵availablen:endl; for(i=0;in;i+) coutavailableiavaila

10、blei; coutendl; for(i=0;im;i+) allocationi=new intn; cout输入已分配矩阵allocationmn:endl; for(i=0;im;i+) for(j=0;jn;j+) coutallocationijallocationij; coutendl; for(i=0;im;i+) maxi=new intn; cout 输入最大需求矩阵maxmn:endl; for(i=0;im;i+) for(j=0;jn;j+) coutmaxijmaxij; coutendl; for(i=0;im;i+) needi=new intn; cout需

11、求矩阵为needmn:endl; for(i=0;im;i+) for(j=0;jn;j+) needij=maxij-allocationij; coutneedij ; coutendl; for(i=0;im;i+) requesti=new intn; cout请输入请求矩阵requestmn:endl; for(i=0;im;i+) for(j=0;jn;j+) coutrequestijrequestij; coutendl; coutendl; for(i=0;im;i+) finishi=TRUE; /初始标记为true for(j=0;j0|requestij0) finishi=FALSE; for(j=0;jn;j+) workj=availablej; /初始情况 judge(work,request,allocation,finish,p,m,n); /开始判断四、 调试结果: 以上显示为未发生死锁的调试结果发生死锁,经解锁算法,撤销占资源最大进程,死锁状况成功解除五、 心得体会:通过该实验熟悉了指针的基本使用方法,死锁的检测与解除和银行家算法的数据结构基本相同,至于实验中所实施的死锁解除算法也只是简单撤销某一引起死锁进程所占有资源的简单释放,该实验只是简单模拟了死锁的检测与解除;最大的收获是对死锁定理的理解和对死锁解除算法的认识与实现机理实记。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1