Expt No: 3 SCHEDULING ALGORITHMS
Date:
Aim: To write a program to display the Gantt chart for
FCFS, SJF, Priority and Round Robin scheduling.
Programs
// Scheduling Algorithms
#include<stdio.h>
#include<stdlib.h>
typedef struct
process
{
int pid, ft, wt, bt, priority;
}pr;
// Number of Process
int n = 4;
pr p[4];
// Read Burst time for process
void fnRead()
{
int
i;
printf("\tEnter
the values for Burst time\n");
for(i=0;i<n;i++)
{
printf("\tEnter for Process
%d : ",i);
scanf("%d",&p[i].bt);
p[i].pid=i;
}
}
// Display Gantt Chart
void fnDisplay()
{
int i;
printf("\n\nGANTT
CHART\n\n");
for(i=0;i<n;i++)
printf("\tP%d\t",p[i].pid);
printf("\n0\t");
for(i=0;i<n;i++)
printf("\t%d\t",p[i].ft);
printf("\n");
}
// Calculate Waiting time and Turnaround time
void fnCalc()
{
int i, j;
float avgwt, avgtat, sum_wt=0, sum_tat=0;
for(i=0;i<n;i++)
{
if(i==0)
p[i].wt=0;
else
p[i].wt=p[i-1].ft;
p[i].ft=p[i].wt+p[i].bt;
sum_wt=sum_wt+p[i].wt;
sum_tat=sum_tat+p[i].ft;
}
avgwt=sum_wt/n;
avgtat=sum_tat/n;
printf("\nAverage Turnaround Time :
%5.2f ms",avgtat);
printf("\nAverage Waiting Time :
%5.2f ms \n\n", avgwt);
}
// FCFS Scheduling
void fcfs()
{
fnRead();
fnCalc();
fnDisplay();
}
// SJF Scheduling
void sjf()
{
int i,j;
pr temp;
fnRead();
// Sort Process based on Burst time
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(p[j].bt>p[j+1].bt)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
fnCalc();
fnDisplay();
}
// Priority Scheduling
void ps()
{
int i,j;
pr temp;
fnRead();
// Read Priority
of Process
printf("\nEnter
Priority for Process : \n");
for(i=0;i<n;i++)
{
printf("Process
%d : ",i);
scanf("%d",&p[i].priority);
}
// Sort process
based on Priority
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(p[j].priority>p[j+1].priority)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
fnCalc();
fnDisplay();
}
void main()
{
printf("\nFCFS
Scheduling : \n");
fcfs();
printf("\nSJF
Scheduling : \n");
sjf();
printf("\nPriority
Scheduling : \n");
ps();
}
// Round Robin Scheduling
#include<stdio.h>
#include<stdlib.h>
typedef struct
process
{
int pid, ft, wt, bt, priority;
}pr;
// Number of Process
int n = 4;
pr p[4];
// Read Burst time for process
void fnRead()
{
int i;
printf("\tEnter the values for Burst
time\n");
for(i=0;i<n;i++)
{
printf("\tEnter for Process
%d : ",i);
scanf("%d",&p[i].bt);
p[i].pid=i;
}
}
// Round Robin Scheduling
void rrs( )
{
int TQ;
int i, j,
cycle=0, count=0;
int AP[25],
AT[25];
int fin=0,
time=0, fintime=0;
float avgwt,
avgtat, sum_wt=0, sum_tat=0;
fnRead();
printf("\n\tEnter
the Time Quantum : ");
scanf("%d",&TQ);
AT[0]=0;
while(fin<n)
{
for(i=0;i<n;i++)
{
if(p[i].bt>0)
{
time =
(p[i].bt<=TQ)?p[i].bt:TQ;
p[i].bt-=time;
if(p[i].bt==0)
{
p[i].wt
= fintime - (cycle*TQ);
p[i].ft
= fintime+time;
fin++;
}
fintime+=time;
AP[count] = p[i].pid;
count+=1;
AT[count] = AT[count-1]+time;
}
}
cycle+=1;
}
for(i=0;i<n;i++)
{
sum_wt=sum_wt+p[i].wt;
sum_tat=sum_tat+p[i].ft;
}
avgwt=sum_wt/n;
avgtat=sum_tat/n;
printf("\nAverage Turnaround Time :
%5.2f ms",avgtat);
printf("\nAverage Waiting Time :
%5.2f ms \n\n", avgwt);
printf("\n\nGANTT
CHART\n\n\t");
for(i=0;i<count;i++)
printf("\tP%d\t",AP[i]);
printf("\n");
for(i=0;i<=count;i++)
printf(" %d\t",AT[i]);
printf("\n");
}
void main()
{
printf("\nRound
Robin Scheduling : \n");
rrs();
}
Result: Thus the program to display waiting time, turnaround
time and Gantt chart for FCFS, SJF, Priority and Round Robin scheduling were
written and executed
No comments:
Post a Comment
Don't be a silent reader...
Leave your comments...
Anu