死锁进程实验报告
一、实验目的:
观察死锁发生的现象,了解死锁发生的原因。
掌握如何判断死锁发生的方法。
二、实验分析:
死锁现象是操作系统各个进程竞争系统中有限的资源引起的。
如果随机给进程分配资源,就可能发生死锁,
因此就应有办法检测死锁的发生。
本次实验中采用“银行家算法”判断死锁的发生。
三、实验设计:
本实验设计一个3个并发进程共享3种系统资源且每种系统资源有10个的系统。
系统能显示各种进程的进展情况以及检察是否有错误和死锁现象产生。
四、算法说明:
“银行家算法”。
按每个进程的申请数量给各个进程试探性分配资源,看能否找个一个序列使各个进程都能正常运行结束。
若能,则不会发生死锁;若不能,则会发生死锁。
五、程序使用说明:
一、本程序用于检测错误和是否会发生死锁。
系统有3个进程竞争3种系统资源,每种资源有10个。
二、输入各个进程的最大需求资源数目数组max[3]和已经得到的资源数目组
[3],系统计算出各个进程还应申请的资源数目数组need[3]。
三、若进程最大需求数大于系统资源数(10),则出错;若进程申请的资源数目大于其需要的最大资源数目,则出错。
/*死锁实验源程序*/
include<math.h>
include<stdio.h>
typedef struct
{
int state;
int max[3];
int alloc[3];
int need[3];
}Pc;
int whefinish(Pc *p)
{
if((p[0].state&&p[1].state&&p[2].state)==1) return 1;
else return 0;
}
inpalloc(Pc *P,int *q1,int *q2)
{
int m,n;
for(m=0;m<3;m++)
for(n=0;n<3;n++)
{
scanf("%d",&p
[m].alloc[n])
p[m].need[n]=p[m].max[n]-p[m].alloc[n];
q1[n]=q1[n]-p[m].alloc[n];
if(p[m].need[n]>p[m].max[n])
q2[n]=0;
}
Prlcess(Pcb *p1,int *p2,int *q)
{
if(p1->need[0]<p2[0]&&p1->need[1]<p2[1]&&p1->need[2]<p2[2]) {
P->state=0;
p2[0]+=P->alloc[0];
p2[1]+=p->alloc[1];
p2[2]+=p->alloc[2];
*p=3;
}
}
main()
{
int i,j,n,x=0;
int state[3],avil[3]={10,10,10}
Pc pcb[3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
scanf("%d",Pcb[i].max[j];
if(Pcb[i].max[j]>10)
state[i]=0;
}
if((state[0]&&state[1]&&state[2])==0) printf("error!\n");
else
{
inpalloc(&Pcb,&avil[3],&state[3]);
if((state[0]&&state[1]&&state[2])==0) printf("Error!\n");
else
{
for(i=0;i<3;i++)
for(j=0;j<3;j++)
Process(&Pcb[j],&avil,&j);
if(whefinish(&Pcb)==1)
printf("all Pcbs are finishde!\n");
else printf("Deally-Embrace!\n");
}
}
}
六、实验心得:
通过这次实验使我对死锁的概念,死锁产生的原因,死锁是否会产生的判断算法,银行家算法,都有了更为深入和直观的了解以及掌握。