Program to implement least recently used algorithm

    

#include <stdio.h>
#define max 100 
int findLRU(int time[], int n){
  int i, minimum = time[0], pos = 0;
 
  for(i = 1; i < n; ++i){
    if(time[i] < minimum){
      minimum = time[i];
      pos = i;
    }
  }
  
  return pos;
}
 
int main()
{
    int no_of_frames, no_of_pages, frames[max], pages[max], counter = 0, time[max], flag1, flag2, i, j, pos, faults = 0;
  printf("Enter number of frames: ");
  scanf("%d", &no_of_frames);
  
  printf("Enter number of pages: ");
  scanf("%d", &no_of_pages);
  
  printf("Enter reference string: ");
  
    for(i = 0; i < no_of_pages; ++i){
      scanf("%d", &pages[i]);
    }
    
  for(i = 0; i < no_of_frames; ++i){
      frames[i] = -1;
    }
    
    for(i = 0; i < no_of_pages; ++i)
  {
      flag1 = flag2 = 0;
      
      for(j = 0; j < no_of_frames; ++j)                 
    {
        if(frames[j] == pages[i])                //check every frame to the ref string  for equal or not 
      {
          counter++;
          time[j] = counter;
          flag1 = flag2 = 1;
          break;
        }
      }
      
      if(flag1 == 0){
      for(j = 0; j < no_of_frames; ++j)
      {
          if(frames[j] == -1)        //check frame is empty or not
        {
            counter++;
            faults++;
            frames[j] = pages[i];
            time[j] = counter;
            flag2 = 1;
            break;
          }
        } 
      }
      
      if(flag2 == 0)            //for new ref string enter into the frame
    {
        pos = findLRU(time, no_of_frames);
        counter++;
        faults++;
        frames[pos] = pages[i];
        time[pos] = counter;
      }
      
      printf("\n");
      
      for(j = 0; j < no_of_frames; ++j){
        printf("%d\t", frames[j]);
      }
  }
  
  printf("\n\nTotal Page Faults = %d", faults);
    
    return 0;
}  


Output:

Enter number of frames: 3
Enter number of pages: 10
Enter reference string: 4
7
6
1
7
6
1
2
7
2

4       -1      -1
4       7       -1
4       7       6
1       7       6
1       7       6
1       7       6
1       7       6
1       2       6
1       2       7
1       2       7

Total Page Faults = 6