Thursday, 1 November 2012

Pin It

Widgets

C code for Round Robin Scheduling Algorithm


 //Program to calculate average waiting time, average turnaround time and fraction of cpu utilized by the processes at 5 different overheads and 4 different time quantums, in a round-robin process scheduling algorithm.


//Input file will have first column as burst time of the processes and second column will have arrival time of the different processes.



Code for round-robin:
#include <stdio.h>
#define max 1000

part1 (FILE *fptr)
{
    int u , v ,   j , i , a =0 ,   within_process = 0 , count , c  ,d , n , k , z ;   
     double tq[] = { 0.050 , 0.100 ,  0.250 , 0.500 } , overhead[] = {0 , 0.005 , 0.010 , 0.015 , 0.020  , 0.025} , ARRIVAL[max] , bt[max] , ch1 , ch2, st[max];
      double wt[max] ,tat[max] , swt,stat,temp , awt,atat, processing_time = 0 ,sq=ARRIVAL[0];       
 
    if (fptr == NULL)        /* Check it's open */
        printf("Error in opening file \n");   
   
    else while(fscanf(fptr,"%lf %lf",&ch1,&ch2) == 2)
        {       
                bt[a] =ch2;
                ARRIVAL[a] =ch1;             
                a++;
        }                
        fclose(fptr);

      for (u = count  =0; u < 4 ; u++)
          for (v = 0 ; v < 6 ; v++)
        {
                c= d=n =1 ,  k = z =swt=stat=temp =awt=atat= processing_time = 0 ,sq=ARRIVAL[0];
               
             for (i=0;i<a ; i++)
            st[i] = ARRIVAL[i]+  bt[i] ;
       
            if (tq[u] == 0)
            {
                printf ("you have given zero time quantum: \n");
                return 0;
            }
           
            while(1)
            {       
                for(i=count=0;i<n;i++)
                {                           
                    if ( ( (c=within_process) == 1) || ( z==1 && bt[i]> tq[u])  ||  ARRIVAL[i] == sq ) /////first if starts
                    {       
                        temp=tq[u];  //here i will always equal to 0
                        c=z=0;
                    }           
                    else    
                        temp=tq[u] + overhead[v];    ///first if ends   
       
                    if(st[i]==ARRIVAL[i])
                    {
                        d=0;
                        count++;
                        continue;
                    }

                    if(st[i]>tq[u]+ARRIVAL[i])
                    {   
                        d=0;
                        st[i]=st[i]-tq[u];
                    }
                       
                    else if(st[i]>ARRIVAL[i])
                    {
                        temp=st[i] - ARRIVAL[i];
               
                         if (d==1)                   
                            d=0;           
                        else if (  (z=within_process) ==1  ||  ARRIVAL[i] == sq )
                             z= within_process = 0 ;
                        else 
                            temp=st[i]- ARRIVAL[i]+overhead[v];
   
                        st[i]=ARRIVAL[i];
                    }
                    sq=sq+temp;
                    tat[i]=sq - ARRIVAL[i];
                }
                for (j=0  , n = 0; j<a ;  j++  )
                    if (ARRIVAL[j]<= sq)                        
                        n++;

                if  (n!=a)
                {
                    if (count == n)
                    {
                        sq= ARRIVAL[n];       
                        z=1;
                    }
                else if (count == n-1)
                    within_process = 1;   
                }

                else if(count == a)        break;           
            }
            for(i=0;i<a;i++)
            {
                processing_time = processing_time + bt[i];
                wt[i]=tat[i]-bt[i];
                swt=swt+wt[i];
                stat=stat+tat[i];
            }   
            printf ("time quantum : %lfsec \noverhead     : %lfsec\n," , tq[u] , overhead[v]);
            printf("Avg wait time is  :%lfsec\nAvg turn around time is  :%lfsec\nfraction of time the processor is busy : %lf\n\n\n",swt/a,stat/a , (processing_time)/ sq);
        }
}
void main(int argc, char *argv[])
{    FILE *fp;
    fp=fopen(argv[1],"r");   
            part1(fp);   
}


Example for input file: (column1:burst time, column2 : arrival time)

31 2.783560
55 27.282004
98 42.814522
134 49.986730
164 42.805902
182 28.249353
205 55.561030
250 26.369485
288 68.582049
326 37.274777
366 37.144992
400 12.059136
425 46.168534
456 21.090157
489 57.053016
532 38.640908
573 0.817403
611 34.732701
638 31.593761
659 49.477451
686 22.472914
730 54.603773


No comments: