您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页死锁实验报告【范本模板】

死锁实验报告【范本模板】

来源:好走旅游网
操作系统实验二报告

一.实验名称:死锁的检测与解除

二.实验目的:观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。 三.实验内容: 死锁的检测算法:

1.找出不再申请资源的进程,将它们所占的资源与系统中还剩余的资源加在一起作为“可分配的资源”,同时对这些进程置标志;

2.检测所有无标志的进程,找出一个所需资源量不超过“可分配的资源\"量的进程,将其所占用的资源添加到“可分配的资源”中,同时为该进程置标志;重复2)直到所有进程均有标志或无标志的进程的所需资源量均超过“可分配的资源”量;

3.若进程均有标志,说明系统当前不存在死锁;若存在无标志的进程,则表示系统当前已有死锁形成,这些无标志的进程就是一组处于死锁状态的进程。 死锁的解除:

当死锁检测程序检测到有死锁存在时,一般采用两种方式来解除死锁:

1.终止进程:终止一个或多个涉及死锁的进程的执行,收回它们所占的资源再分配。 2.抢夺资源:从涉及死锁的一个或几个进程中抢夺资源,把夺来的资源再分配给卷入死锁的其他进程,直到死锁解除. 四.实验代码:#include 〈iostream〉 { int i,j; using namespace std; cout〈〈\"请输入进程的数目:\"; #define mp 50 //最大进程数 cin〉〉m; #define mr 100 /最大资源数 cout〈〈\"请输入资源的种类:\"; int keyong[mr]; //可用资源数组 cin>>n; int MAX[mp][mr]; //最大需求矩阵 cout〈<”请输入每个进程最多所需的各资源int fenpei[mp][mr]; //分配矩阵 数,按照\"<>MAX[i][j]; int p[mp]; //记录序列 cout〈〈\"请输入每个进程已分配的各资源数,int Work[mr]; //工作数组 也按照”〈〈m〈〈\"x\"<fenpei[i][j]; void jc(); need[i][j]=MAX[i][j]-fenpei[i][j]; void main() if(need[i][j]〈0) { Init(); { cout<〈\"您输入的第” Safe(); 〈1

} cout<〈\"请输入各个资源现有的数目:”〈continue; for(i=0;i〈n;i++)

{ cin>〉keyong[i]; } cout<〈\"剩余需求矩阵:”<bool Safe() /*安全性算法*/ { int i,j,k;

for(i=0;i{ FINISH[i]=false; //判断进程i是否已执行 }

for(i=0;i〈m;i++) {

if(FINISH[i]==true) { continue; } else

{ for(j=0;j〈n;j++) { if(need[i][j]〉Work[j]) { break; } }

if(j==n)

{ FINISH[i]=true; for(k=0;k〈n;k++)

{ Work[k]+=fenpei[i][k]; //进程i执行完后回收资源} p[l++]=i; i=—1; } else

} }

if(l==m) {

cout<〈”系统是安全的”〈〈endl; cout〈<”安全序列:”〈〈endl; for(i=0;icout〈cout〈〈\"-—〉\"; } }

cout<〈\"\"<cout<〈\"会发生死锁,发生死锁的进程是:”<void jc() { int i,j,k,q; i=0;

while(i〈m&&FINISH[i]==false) //寻找没执行的 { for(j=0;j〈n;j++) { keyong[j]+=fenpei[i][j]; //回收 fenpei[i][j]=0; } if(Safe()) cout<〈”死锁已解除”<2

Safe(); }

五.实验结果 输入 进程 1 2 3 4 5 已拥有资源数 (0。0。1.2) (2。0.0.0) (0.0.3.4) (0.3.3.2) 总需求资源数 (0.0.1。2。) (2。7。5。0) (6。6.5。6) (0。6.5.2) }

(2。3。5。4) (4。3。5。6) 其中系统可用资源数 为 2 1 0 0

给进程3 分配资源数 0 1 0 0

六.实验心得:

加深理解了有关资源申请分配、检测以及避免死锁等概念,了解死锁和避免死锁的具体实施方法。死锁的解除实质上就是如何让释放资源的进程能够继续运行.为了解除死锁就要剥夺资源,此时,需要考虑一下几个问题 : 选择一个牺牲进程,即要剥夺哪个进程的哪些资源?剥夺的进程如何再次运行?.怎样保证不发生\"饿死”现象 ?“最小代价”,即最经济合算的算法,使得进程回退带来的开销最小。但是,”最小开销”是很不精确的,进程重新运行的开销包括很多因素:

进程的优先级、该进程使用的资源种类和数量?为完成任务,进程还需要多少资源?有多少进程要被撤销、该进程被重新启动运行的次数。。只有综合考虑各个进程之间的关系,跟资源的关系,才能搞好的解除死锁。避免系统出错。

3

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务