Saturday, August 9, 2014

Round Robin and Priority Scheduling Program

This is an operating systems lab program to implement round robin as well as priority scheduling. If you have any doubts please let me know.

#include<stdio.h>

struct process
{
char p[10];
int at,bt,pr,wt,tt,r,ar;
}a[100],temp;
int n;

void sorta()
{
    int i,j;
    for(i=0;i<n-1;i++)
    {
         for(j=0;j<n-i-1;j++)
         {
            if(a[j].at>a[j+1].at)
           {
               temp=a[j+1];
               a[j+1]=a[j];
               a[j]=temp;
           }
         }
    }
}

void sortp()
{
      int i,j;
      for(i=0;i<n-1;i++)
      {
           for(j=0;j<n-i-1;j++)
           {
               if(a[j].pr>a[j+1].pr)
              {
                   temp=a[j+1];
                   a[j+1]=a[j];
                   a[j]=temp;
              }
           }
      }
}


void sortar()
{
   int i,j;
   for(i=0;i<n-1;i++)
   {
        for(j=0;j<n-i-1;j++)
        {
             if((a[j].ar>a[j+1].ar)||(a[j].ar==a[j+1].ar&&a[j].ar!=a[j].at))
             {
    temp=a[j+1];
                a[j+1]=a[j];
                 a[j]=temp;
}
        }
   }
}

void main()
{
         int i,c,t=0,f1=1,f=0,tq=0,cf,nt=0;
         float aw=0,at=0;
         printf("Enter the number of Processes: ");
         scanf("%d",&n);
         printf("Enter the process details");
        for(i=0;i<n;i++)
        {
printf("\nProcess ID:");
scanf("%s",&a[i].p);
printf("\nPriority:");
scanf("%d",&a[i].pr);
printf("\nArrival time:");
scanf("%d",&a[i].at);
printf("\nBurst time:");
scanf("%d",&a[i].bt);

a[i].wt=a[i].tt=0;
a[i].r=a[i].bt;
a[i].ar=a[i].at;
         }
printf("\nMENU:\n1.Priority\n2.Round Robin\n");
printf("\nEnter your choice:");
scanf("%d",&c);
switch(c)
{
case 1:
  sorta();
  sortp();
  printf("\nGantt Chart for Priority\n");
  printf("%d",t);
  while(f1==1)
  {
     f1=0;
     for(i=0;i<n;i++)
     {
          if(a[i].at<=t&&a[i].r!=0)
          {
            a[i].wt=t-a[i].at;
            aw+=a[i].wt;
            printf("-----%s",a[i].p);
            t=t+a[i].bt;
            printf("--------");
            printf("%d",t);
            a[i].tt=t-a[i].at;
             at+=a[i].tt;
            a[i].r=0;
            f=0;
            f1=1;
            break;
           }
            else if(f==0&&a[i].r!=0)
            {
            nt=a[i].at;
            f=f1=1;
            }
            else if(nt>a[i].at&&a[i].r!=0)
 
                nt=a[i].at;
       }
     if(f==1)
     {
            t=nt;
            printf(" %d",t);
            f=0;
     }
  }

  printf("\nAverage waiting time=%f",(aw/n));
  printf("\nAverage turn around time=%f\n",(at/n));
  break;
case 2:
printf("\nEnter the time quantum:");
scanf("%d",&tq);
if(tq>0)
{
sorta();
printf("\nGantt Chart for Round Robin\n");
printf("%d",t);
while(f1==1)
{
   cf=0;
   f1=0;
   sortar();
   for(i=0;i<n;i++)
   {
         if(a[i].at<=f&&a[i].r!=0)
        {
a[i].wt+=t-a[i].tt;
printf("------%s",a[i].p);
printf("------");
if(a[i].r<tq)
{
    t=t+a[i].r;
    a[i].r=0;
}
        else
        {
t=t+tq;
a[i].r-=tq;
         }
          printf("%d",t);
          a[i].tt=a[i].ar=t;
         if(cf==0)
        {
cf=1;
f=t;
         }
  }
  if(a[i].r!=0&&f1==0)
  f1=1;
  if(a[i].at>f)
  break;
}
if(cf==0&&f1==1)
  {
      t=f=a[i].at;
      printf(" %d",t);
   }
}
for(i=0;i<n;i++)
{
a[i].wt=a[i].wt-a[i].at;
a[i].tt=a[i].tt-a[i].at;
aw+=a[i].wt;
at+=a[i].tt;
}


printf("\nAverage waiting time=%f",(aw/n));
  printf("\nAverage turn around time=%f\n",(at/n));
      }
else
printf("\nTime quantum is wrong");
break;
default:
printf("\nWrong Choice\n");  
break;
   }
}


No comments:

Post a Comment