-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSJF-Preemtive.c
109 lines (109 loc) · 1.83 KB
/
SJF-Preemtive.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <stdio.h>
#include <malloc.h>
struct process
{
int pid,at,bt,wt,ft,tat,finish,arr,count;
};
typedef struct process p_adt;
void dis(p_adt *p,int no,float avg,float tat)
{
int i;
printf("\n\t\t*****Preemptive SJF*********\n");
printf("\nP_ID Arrival\t\tBurst\t\tTurnAround\tfinish\t\twait\n");
for(i=0;i<no;i++)
{
printf("%d\t %d\t\t %d\t\t %d\t\t %d \t\t %d\n",p[i].pid,p[i].at,p[i].bt,p[i].tat,p[i].ft,p[i].wt);
}
printf("Average Waiting Time is :%f\n",avg);
printf("Average Turn Around time is:%f\n",tat);
}
void finish(p_adt *p,int n)
{
int cputime=0,i,j,k,a,s,min,id,sum=0;
for(i=0;i<n;i++)
{
sum+=p[i].bt;
}
for(i=0;i<=sum;i++)
{
k=0;
for(j=0;j<n;j++)
{
if(p[j].finish==0)
{
if(p[j].at<=cputime)
{
p[k].arr=p[j].pid;
a=j;
k++;
}
}
}
min=p[a].bt;
id=p[k-1].arr;
for(s=p[0].arr;s<p[k-1].arr;s++)
{
if(p[s].finish==0)
{
if(p[s].bt<=min)
{
min=p[s].bt;
id=s;
}
}
}
cputime++;
p[id].ft=cputime;
p[id].count++;
if(p[id].count==p[id].bt)
{
p[id].finish=1;
}
}
}
float turnAround(p_adt*p,int n)
{
int i;
float tave=0;
for(i=0;i<n;i++)
{
p[i].tat=p[i].ft-p[i].at;
tave+=p[i].tat;
}
return tave/n;
}
float average(p_adt *p,int n)
{
int i;
float ave=0;
for(i=0;i<n;i++)
{
p[i].wt=p[i].ft-(p[i].bt+p[i].at);
ave+=p[i].wt;
}
return ave/n;
}
void main()
{
int n,i;
printf("enter the number of processes\n");
scanf("%d",&n);
p_adt *p=(p_adt*)malloc(n*sizeof(p_adt));
for(i=0;i<n;i++)
{
printf("Enter the arrival time of process %d-> ",i);
p[i].pid=i;
scanf("%d",&p[i].at);
}
for(i=0;i<n;i++)
{
printf("Enter the burst time of process %d-> ",i);
p[i].finish=0;
p[i].count=0;
scanf("%d",&p[i].bt);
}
finish(p,n);
float avg=average(p,n);
float tat=turnAround(p,n);
dis(p,n,avg,tat);
}