OPTIMAL PAGE REPLACEMENT ALGORITHM

#include<stdio.h>
int main()
{
  int f,r;
  int flag1,flag2,flag3,i,j,k,pos,max,fault=0;
  printf("Enter frame size : ");
  scanf("%d",&f);
   
  printf("Enter ref_str length : ");
  scanf("%d",&r);
   
  int fr[f],ref_str[r],temp[f];
   
  printf("Enter page reference string : ");
  for(i=0;i<r;i++)
  scanf("%d",&ref_str[i]);
 
  printf("\n\n");
  for(i=0;i<f;i++)
  fr[i]=temp[i]=-1;
   
  for(i=0;i<r;i++)
  {
    flag1=flag2=0;
    for(j=0;j<f;j++)
    {
      if(fr[j]==ref_str[i])
      {
        flag1=flag2=1;
        printf("page %d hit\n",ref_str[i]);
        break;
      }
    }
    if(flag1==0)
    {
      for(j=0;j<f;j++)
      {
        if(fr[j]==-1)
        {
          fault++;
          fr[j]=ref_str[i];
          flag2=1;
          printf("page %d fault\n",ref_str[i]);
          break;
        }
      }   
    }
    if(flag2==0)
    {
      flag3=0;
      for(j=0;j<f;j++)
      {
        temp[j]=-1;
        for(k=i+1;k<r;k++)
        {
          if(fr[j]==ref_str[k])
          {
            temp[j]=k;
            break;
          }
        }
      }
      for(j=0;j<f;j++)
      {
        if(temp[j]==-1)
        {
          pos=j;
          flag3=1;
          break;
        }
      }
      if(flag3==0)
      {
        max=temp[0];
        pos=0;
        for(j=1;j<f;j++)
        {
          if(temp[j]>max)
          {
            max=temp[j];
            pos=j;
          }
        }               
      }
      fr[pos]=ref_str[i];
      printf("page %d fault\n",ref_str[i]);
      fault++;
    }
    printf("Current frame status : ");
    for(j=0;j<f;j++)
    printf("%d ",fr[j]);
    puts("\n\n");
  }
  printf("\n\nTotal Page fault = %d", fault);
  return 0;
}

Comments