PRIORITY PREEMPTIVE ALGORITHM

#include<stdio.h>
main()
{
  int n,i;
  puts("enter no. of process");
  scanf("%d",&n);
 
  int at[n],bt[n],pri[n];
 
  puts("enter arrival,burst and priority");
  for(i=0;i<n;i++)
  scanf("%d%d%d",&at[i],&bt[i],&pri[i]);
 
  int wt[n],tt[n],j,min,temp_pri[n];
  puts("Process\tArrival\tBurst\tPriority");
  for(i=0;i<n;i++)
  {
    wt[i]=tt[i]=0;
    printf("p%d\t%d\t%d\t%d\n",i+1,at[i],bt[i],pri[i]);
  }
 
  for(i=0;i<n;i++)
  {
    min=i;
    for(j=i+1;j<n;j++)
    {
      if(at[min]>at[j])
      min=j;
    }
    at[min]=at[min]+at[i]-(at[i]=at[min]);
    bt[min]=bt[min]+bt[i]-(bt[i]=bt[min]);
    pri[min]=pri[min]+pri[i]-(pri[i]=pri[min]);
  }
 
  int k,wait=0,count=0;
 
  for(i=0;i<n-1;i++)
  {
    if(bt[i]==0)
    bt[i]=-1;
   
    else if(bt[i]>0)
    {
      j=0;
      while(at[i]>=at[j]&&j<n)
      {
        temp_pri[j]=pri[j];
        j++;
      }
      min=0;
      for(k=0;k<j;k++)
      {
        if(temp_pri[k]>0&&temp_pri[min]>temp_pri[k])
        min=k;
      }
     
      wt[min]+=wait-tt[min];
      wait+=at[i+1]-at[i];
      tt[min]=wait;
     
      if(bt[min]>=wait)
      bt[min]-=at[i+1]-at[i];
      else
      {
        bt[min]=0;
        pri[i]=-1;
      }
    }
  }
 
  i=0;
  while(count<n)
  {
    if(bt[i]==0)
    {
      bt[i]=-1;
      count++;
    }
    else if(bt[i]>0)
    {
      min=i;
      for(j=0;j<n;j++)
      {
        if(pri[min]>pri[j]&&pri[j]>0)
        min=j;
      }
      wt[min]+=wait-tt[min];
      wait+=bt[min];
      tt[min]=wait;
      pri[min]=-1;
      bt[min]=0;
    }
    if(i==n-1) i=0;
    else i++;
  }
 
  float awt=0,atat=0;
  for(i=0;i<n;i++)
  {
    awt+=wt[i]-at[i];
    atat+=tt[i]-at[i];
  }
  awt=awt/n;
  atat=atat/n;
  printf("Average waiting time = %.2f\n",awt);
  printf("Average turn around time time = %.2f\n",atat);
}

Comments