Least Recently Used (LRU) Page Replacement Algorithm

#include<stdio.h>
int findLRU(int time[],int n)
{
  int i,min=time[0],pos=0;
  for(i=1;i<n;i++)
  {
    if(time[i]<min)
    {
      min=time[i];
      pos=i;
    }
  }
  return pos;
}

int main()
{
  int f=3,r=20;
  int counter=0,flag1,flag2,i,j,pos,fault=0;
 
  printf("Enter frame size : ");
  scanf("%d",&f);
   
  printf("Enter reference string length : ");
  scanf("%d",&r);
 
  int fr[f],time[f],ref_str[r];
 
  puts("Enter reference string: ");
  for(i=0;i<r;i++)
  scanf("%d",&ref_str[i]);

  printf("\n\n");
  for(i=0;i<f;i++)
  fr[i]=-1;
   
  for(i=0;i<r;i++)
  {
    flag1=flag2=0;
    for(j=0;j<f;j++)
    {
      if(fr[j]==ref_str[i])
      {
        counter++;
        time[j]=counter;
        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)
        {
          counter++;
          fault++;
          fr[j]=ref_str[i];
          time[j]=counter;
          flag2=1;
          printf("page %d fault\n",ref_str[i]);
          break;
        }
      }   
    }
    if(flag2==0)
    {
      pos=findLRU(time,f);
      counter++;
      fault++;
      fr[pos]=ref_str[i];
      time[pos]=counter;
      printf("page %d fault\n",ref_str[i]);
    }
    printf("Current Frame Status\n");
    for(j = 0; j < f; ++j)
    printf("%d ", fr[j]);
    printf("\n\n");
  }
  printf("Total Page fault = %d", fault);
  return 0;
}

Comments