Coding:
#include<stdio.h>
#define FINISHED 0
#define WAITING 1
#define RUNNING 2
struct pro
{
char ID[6];
int burst_time;
int wait_time;
int turn_time;
int state;
}process[10];
int no;
void main()
{
int i,j,sum,time=0,time_slice=1,curr_proc,prev_time=0,sturn=0;
int fin=0;
printf("\nEnter the no of process:");
scanf("%d",&no);
for(i=1;i<=no;i++)
{
printf("\nEnter process ID:");
scanf("%s",process[i].ID);
printf("\nEnter cpu burst time:");
scanf("%d",&process[i].burst_time);
process[i].wait_time=0;
process[i].turn_time=process[i].burst_time;
process[i].state=WAITING;
}
curr_proc=1;
process[curr_proc].state=RUNNING;
while(1)
{
process[curr_proc].burst_time--;
time++;
for(j=1;j<=no;j++)
{
if(process[j].state==WAITING)
{
process[j].wait_time++;
process[j].turn_time++;
}
}
if(time_slice==5||process[curr_proc].burst_time==0)
{
if (process[curr_proc].burst_time==0)
{
process[curr_proc].state=FINISHED;
fin++;
}
else
process[curr_proc ].state=WAITING;
printf("\n%s-%d to %d",process[curr_proc].ID,prev_time,time);
if(fin==no)
break;
curr_proc=curr_proc%no+1;
while(process[curr_proc].state==FINISHED)
{
curr_proc=curr_proc%no+1;
}
process[curr_proc].state=RUNNING;
prev_time=time;
time_slice=0;
}
time_slice++;
}
printf("\n\n Process Waitingtime Turnaround time\n\n");
sum=0;
for(i=1;i<=no;i++)
{
sum+=process[i].wait_time;
sturn+=process[i].turn_time;
printf("\n%s\t%d\t\t%d",process[i].ID,process[i].wait_time,process[i].turn_time);
}
printf("\n\nAverage waiting time:%.2f\n",(float)sum/(float)no);
printf("\nAverage turn around time:%.2f\n",(float)sturn/(float)no);
}
Output:
Enter process ID:P1
Enter cpu burst time:9
Enter process ID:P2
Enter cpu burst time:12
Enter process ID:P3
Enter cpu burst time:10
P1-0 to 5
P2-5 to 10
P3-10 to 15
P1-15 to 19
P2-19 to 24
P3-24 to 29
P2-29 to 31
Process Waitingtime Turnaround time
P1 10 19
P2 19 31
P3 19 29
Average waiting time:16.00
Average turn around time:26.33
No comments:
Post a Comment