Illustrating Working of FIFO Page Replacement Algorithm in C++

#include<iostream.h>

#include<conio.h>

void main() {
  //Getting Framesize and Page count
  int fs, n;
  cout << "\n Enter Framesize:";
  cin >> fs;
  cout << "\n Enter No of pages:";
  cin >> n;
  int d = fs + 2;
  int cf[50][50];
  int i, j, k, l, p, q, tc, z, w;
  int temp[50];
  //Getting pages
  cout << "\n Enter Pages";
  for (i = 0; i < n; i++) {
    cin >> cf[i][0];
  }
  //Initilizing all frames to -1
  for (i = 0; i < n; i++) {
    for (j = 2; j < d; j++) {
      cf[i][j] = -1;
    }
  }
  w = -1;
  //FIFO Algorithm
  for (i = 0; i < n; i++) {
    //Copy old page frame from 2nd iteration
    if (i != 0) {
      for (j = 2; j < d; j++) {
        cf[i][j] = cf[i - 1][j];
      }
    }
    //Considering page is not presesnt
    p = 0;
    //Checking if page is already present or not
    for (j = 2; j < d; j++) {
      if (cf[i][j] == cf[i][0])
        p = 1; //page found
    }
    //If page found then count it as hit
    if (p == 1) {
      cf[i][1] = 1;
    }
    //Else use FIFO to replace the page
    else {
      //Check for blank location
      z = 0;
      for (l = 2; l < d; l++) {
        if ((cf[i][l] == -1) && (z == 0)) {
          cf[i][l] = cf[i][0];
          z = 1;
        }
      }
      cf[i][1] = 0; //Counting it as miss
      //If blank loction not found
      if (z == 0) {
        tc = 0;
        //initilize temp array by -1
        for (l = 0; l < 50; l++) {
          temp[l] = -1;
        }
        //copy page sequence to temp
        for (k = 0; k <= i; k++) {
          if (cf[k][1] == 0) {
            temp[tc] = cf[k][0];
            //cout<<"\nAdded in temp:"<<temp[tc];
            tc++;
          }
        }
        z = 0;
        //check which page is added first by comparing temp with frame
        w = w + 1;
        for (l = w; l < 50; l++) {
          for (k = 2; k < d; k++) {
            if ((temp[l] == cf[i][k]) && (z != 1)) {
              z = 1;
              //cout<<"\n"<<l;
              q = temp[l];
            }
          }
        }
        //replace page
        z = 0;
        for (l = 2; l < d; l++) {
          if ((cf[i][l] == q) && (z == 0)) {
            cf[i][l] = cf[i][0];
            z = 1;
          }
        }
      }
    }
  }
  int hc = 0;
  int mc = 0;
  cout << " \n Answer";
  cout << "\nPage\tHM\n";
  for (i = 0; i < n; i++) {
    for (j = 0; j < d; j++) {
      cout << cf[i][j];
      cout << "\t";
    }
    if (cf[i][1] == 0)
      mc++;
    if (cf[i][1] == 1)
      hc++;
    cout << "\n";
  }
  cout << "\n Hits:" << hc;
  cout << "\n Miss:" << mc;
  getch();
}

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.