Sei sulla pagina 1di 12

#include<stdio.

h>

#include<conio.h>

void main()

int process,resource,i,j,instanc,k=0,count1=0,count2=0; //count,k variables are


taken for counting purpose

int avail[20],max[20][20],allot[20][20],need[20][20],completed[20];

printf("\n\t Enter No. of Process:-\n");

printf("\t\t");

scanf("%d",&process); //Entering No. of Processes

printf("\n\tEnter No. of Resources:-\n");

printf("\t\t");

scanf("%d",&resource); //No. of Resources

for(i=0;i<process;i++)

completed[i]=0; //Setting Flag for uncompleted Process

printf("\n\tEnter No. of Available Instances\n");


for(i=0;i<resource;i++)

printf("\t\t");

scanf("%d",&instanc);

avail[i]=instanc; // Storing Available instances

printf("\n\tEnter Maximum No. of instances of resources that a Process need:\n");

for(i=0;i<process;i++)

printf("\n\t For P[%d]",i);

for(j=0;j<resource;j++)

printf("\t");

scanf("%d",&instanc);

max[i][j]=instanc;

printf("\n\t Enter no. of instances already allocated to process of a resource:\n");


for(i=0;i<process;i++)

printf("\n\t For P[%d]\t",i);

for(j=0;j<resource;j++)

printf("\t\t");

scanf("%d",&instanc);

allot[i][j]=instanc;

need[i][j]=max[i][j]-allot[i][j]; //calculating Need of each process

printf("\n\t Safe Sequence is:- \t");

while(count1!=process)

count2=count1;

for(i=0;i<process;i++)

for(j=0;j<resource;j++)

{
if(need[i][j]<=avail[j])

k++;

if(k==resource && completed[i]==0 )

printf("P[%d]\t",i);

completed[i]=1;

for(j=0;j<resource;j++)

avail[j]=avail[j]+allot[i][j];

count1++;

k=0;

if(count1==count2)

{
printf("\t\t Stop ..After this.....Deadlock \n");

break;

getch();

output:

Enter No. of Available Instances

Enter Maximum No. of instances of resources that a Process need:

For P[0] 7

For P[1] 3

For P[2] 9
0

For P[3] 2

For P[4] 4

Enter no. of instances already allocated to process of a resource:

For P[0] 0

For P[1] 2

For P[2] 3

For P[3] 2
1

For P[4] 0

Safe Sequence is:- P[1] P[3] P[4] P[0] P[2]

Deadlock detection:

#include <stdio.h>

#include <conio.h>

void main()

int found,flag,l,p[4][5],tp,tr,c[4][5],i,j,k=1,m[5],r[5],a[5],temp[5],sum=0;

clrscr();

printf("Enter total no of processes");

scanf("%d",&tp);

printf("Enter total no of resources");

scanf("%d",&tr);

printf("Enter claim (Max. Need) matrix\n");

for(i=1;i<=tp;i++)

printf("process %d:\n",i);
for(j=1;j<=tr;j++)

scanf("%d",&c[i][j]);

printf("Enter allocation matrix\n");

for(i=1;i<=tp;i++)

printf("process %d:\n",i);

for(j=1;j<=tr;j++)

scanf("%d",&p[i][j]);

printf("Enter resource vector (Total resources):\n");

for(i=1;i<=tr;i++)

scanf("%d",&r[i]);

printf("Enter availability vector (available resources):\n");

for(i=1;i<=tr;i++)

scanf("%d",&a[i]);

temp[i]=a[i];

for(i=1;i<=tp;i++)

sum=0;

for(j=1;j<=tr;j++)
{

sum+=p[i][j];

if(sum==0)

m[k]=i;

k++;

for(i=1;i<=tp;i++)

for(l=1;l<k;l++)

if(i!=m[l])

flag=1;

for(j=1;j<=tr;j++)

if(c[i][j]<temp[j])

flag=0;

break;

if(flag==1)

m[k]=i;

k++;
for(j=1;j<=tr;j++)

temp[j]+=p[i][j];

printf("deadlock causing processes are:");

for(j=1;j<=tp;j++)

found=0;

for(i=1;i<k;i++)

if(j==m[i])

found=1;

if(found==0)

printf("%d\t",j);

getch();

output:

process 1:

process 2:

2
0

process 3:

process 4:

process 5:

Enter allocation matrix

process 1:

process 2:

process 3:

0
3

process 4:

process 5:

Enter resource vector (Total resources):

Enter availability vector (available resources):

deadlock causing processes are:2 3 4

Potrebbero piacerti anche