- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
死锁的检测与解除
操作系统实验报告
——死锁的检测与解除
学院:计算机与电子信息学院
专业:计算机科学技术与网络工程类2008级4班
姓名:刘荣鹏
学号:0807100419
一、实验目的:熟悉死锁检测与解除算法,理解死锁的检测及解除死锁的方法,加深记意。二、实验环境:Win2000/winxp?? VC++6.0三、实验内容:编程实现死锁检测算法、死锁解除算法,数据动态输入,解锁采用释放最大死锁进程资源的方法实现。 四.实验流程五.程序代码:#includeiostream.h#includestdio.h#includeiomanipusing namespace??std;??//名字空间#define TRUE 1#define FALSE 0????//布尔值int compare(int **request,int *work,int N,int k) //如果Request[i]work则返回false{int j,c=0;for(j=0;jN;j++){?? ???? if(request[k][j]work[j])?????? {??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(finish[i]==FALSEcompare(request,work,n,i)==TRUE)??//比较?????????? {??????????????for(j=0;jn;j++) //增加工作向量??????????????{?? ??????????????????work[j]+=allocation[i][j];????????????????}??????????????finish[i]=TRUE;??????????????p[i]=TRUE;?? //第i个进程放完资源??????????????flag=TRUE;??????????????break;?????????? }?????? }????}//********若所有的进程都放完,则返回ture,否则返回false**************????if(flag==FALSE)?? ????{???? for(i=0;im;i++)???????? if(finish[i]==FALSE)??{ K++; }????}?? if(K0)??{ return FALSE;}?? else??if(K==0)??????{??return TRUE;}//*******************************************8**************}//解锁函数void jiesuo(int *work,int **request,int **allocation,int *finish,int *p,int m,int n){??????int i,j,t,flag;??????int *sum=new??int[m];??????for(i=0;im;i++)??//初始化数组??????????sum[i]=0;??????for(i=0;im;i++)???? //统计死锁资源、释放??????????if(p[i]==FALSE)????????????{????????????????for(j=0;jn;j++)???????????????? sum[i]=sum[i]+allocation[i][j];??????????????allocation[i][j]=0;??????????}??????t=sum[0];??????for(i=1;im;i++)????//找出最大死锁进程i??????????if(tsum[i]) { t=sum[i];flag=i;}?????
文档评论(0)