死锁的检测与解除 (1).doc
- 文档编号:163601
- 上传时间:2022-10-04
- 格式:DOC
- 页数:11
- 大小:220.50KB
死锁的检测与解除 (1).doc
《死锁的检测与解除 (1).doc》由会员分享,可在线阅读,更多相关《死锁的检测与解除 (1).doc(11页珍藏版)》请在冰豆网上搜索。
操作系统
(实验报告)
死锁的检测与解除
姓名:
*****
学号:
****
专业班级:
***
学验日期:
2011/12/2
指导老师:
***
一、实验名称:
死锁的检测和解除
二、实验内容:
编程实现对操作系统死锁的检测和解除,利用数据的动态输入,解锁时采用的是释放占用系统资源最大的进程的方法来实现。
三、实验目的:
熟悉死锁检测与的解除的算法,深入理解死锁的检测与解锁的具体方法,加深对死锁问题深刻记意。
并且进一步掌握死锁的条件,死锁定理等相关知识。
四、实验过程
1.基本思想:
利用资源分配图来理解此问题,可以认为此图就是由一组结点N和一组边E所组成的一个对偶G=(N1E);把N分为互斥的两个子集进程P结点和资源R结点,进程结点集和资源结点集,凡是属于E中的一个边,都连接着P中的一个结点和R中的一个结点由P中的一个结点指向R中的一个结点是资源请求边,而由R中的一个结点指向P中的一个结点的边称为资源分配边,在这个图中找到一个既不阻塞又不独立的结点Pi,如果是在顺利的情况下,则该进程可以获得足够资源而继续运行,运行完释放所有资源,这就可以说是消除了它的请求边和分配边,让它成为一个孤立的点,再继续,分配给请求资源的进程……这样循环下去直到所有的进程都能成为孤立的点,或是出现了无法消除的环状,若是出现了环状,即出现了死锁,采取释放占用资源最多的进程的方法来解决问题,直到最后所有的进程结点P均成为孤立的点。
解锁才算成功,程序才能结束。
2.主要数据结构:
(1)可利用资源向量Available.这是一个含有m类资源的数组,用来表示每种资源可用的的数量。
(2)把不占用任何资源,且没有申请资源的进程,列入数组finish中,并赋值true。
(3)从进程集合中找到一个Request<=Work的进程,做如下的处理:
将其资源分配图简化,释放出资源,增加Work的量,做Work=Work+Allocation
并将它的标志位finish也设为true.
(4)如果不能把所有的进程标志位都赋值为true,则出现了死锁,开始采取解锁的方案。
在此我选用的是释放占用资源最多的进程的方法,如果某个进程的Request<=Work则可以做Work=Work+Allocation运算并将该进程标志位改成true。
这样循环下去,若还不能解锁,则按上述方式再撤消一个进程,如此反复,直到死锁解除。
3.输入输出
每次开始运行程序,则要求用户开始输入进程的个数,资源源种类,可用资源量Available,及各个进程占有的各个资源的数量和请求数量,最后用循环将此时的状态输出,并判断是否有死锁,若有,则自动撤消进程解锁,若无,则直接输出无死锁的提示,并询问用户是否还要继续运行成序。
4.程序流程图
有死锁的情况
5.截屏
有死锁的情况:
无死锁的情况
6.源程序:
packagecom.Deadlock;
importjava.util.*;
publicclassDeadlock
{
publicintAvailable[];
publicbooleanp[],L[];
intm,n,k=0,c;
publicstaticintcount=0;
publicintWork[];
publicintRequest[][];
publicintAllocation[][];
booleanfinish[];
publicDeadlock()
{
m=15;
n=15;
k=0;
c=0;
finish=newboolean[15];
Available=newint[15];
p=newboolean[15];
L=newboolean[15];
//publicstaticintcount=0;
Work=newint[15];
Request=newint[15][15];
Allocation=newint[15][15];
}
booleancompare(intindex)
{
booleanf=false;
intt=0;
for(inti=0;i { if(Request[index][i]>Work[i]) { t++; break; } } if(t==0) { f=true; }else { f=false; } returnf; } voidInput() { Scannersc=newScanner(System.in); System.out.println("请输入进程数: "); n=sc.nextInt(); System.out.println("请输入资源的各类数: "); m=sc.nextInt(); Available=newint[m]; Request=newint[n][m]; Allocation=newint[n][m]; System.out.println("请输入各资源可用的数量: "); for(inti=0;i { Available[i]=sc.nextInt(); } System.out.println("请输入各个进程占有的资源数量的<"+n+"*"+m+">的矩阵: "); for(inti=0;i { for(intj=0;j { Allocation[i][j]=sc.nextInt(); } } System.out.println("请输入各进程请求各资源的数量<"+n+"*"+m+">的矩阵: "); for(inti=0;i { for(intj=0;j { Request[i][j]=sc.nextInt(); } } for(inti=0;i Work[i]=Available[i]; } voidOutput() { System.out.println("您输入各资源的可用数量是: "); for(inti=0;i { System.out.print(Available[i]+""); } System.out.println(); System.out.println("各个进程占有的资源分别是<"+n+"*"+m+">的矩阵: "); for(inti=0;i { System.out.print("P"+(i+1)+": "); for(intj=0;j { System.out.print(Allocation[i][j]+""); } System.out.println(); } System.out.println("各个进程请求各资源的数量分别是<"+n+"*"+m+">的矩阵: "); for(inti=0;i { System.out.print("P"+(i+1)+": "); for(intj=0;j { System.out.print(Request[i][j]+""); } System.out.println(); } } booleancheck() { inti,j,k=0; booleanff=false; for(i=0;i { finish[i]=true; for(j=0;j { if(Allocation[i][j]>0||Request[i][j]>0) finish[i]=false; } } booleanflag=true; while(flag) { flag=false; for(i=0;i { if(! finish[i]&&compare(i)) { for(j=0;j { Work[j]+=Allocation[i][j]; } finish[i]=true; p[i]=false; flag=true; break; } } } if(! flag) { for(i=0;i if(! finish[i]) { k++; } } if(k>0)ff=false; elseif(k==0) ff=true; returnff; } voiddelock() { inti,j,flag=0; int[]sum=newint[n]; for(i=0;i sum[i]=0; for(i=0;i if(p[i]) { for(j=0;j sum[i]=sum[i]+Allocation[i][j]; //Allocation[i][j]=0; } intmax=sum[0]; for(i=1;i { if(max { max=sum[i]; flag=i; } } System.out.println("撤消占资源源最大的进程: "+flag); System.out.println(); for(j=0;j Work[j]+=Allocation[flag][j]; finish[flag]=true; p[flag]=false; if(check()) { System.out.println("成功解锁! "); } else{ delock(); } } voidoperate() { booleanflag=check(); if(flag) { System.out.println("不会发生死锁! "); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 死锁的检测与解除 1 死锁 检测 解除
![提示](https://static.bdocx.com/images/bang_tan.gif)