Scheduling Algorithms

 

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