program to implement page replacement algorithm. there are different types of page replacement algorithms for an operating system. I need LRU, Optimal and FIFO now, others are appreciated too.
#include<stdio.h> #include <stdlib.h> int n,nf; int in[100]; int p[50]; int hit=0; int i,j,k; int pg_fault_cnt=0; //Reference String input function void getData() { printf("Enter length of page reference sequence:\n"); scanf("%d",&n); printf("Enter the page reference sequence:\n"); for(i=0; i<n; i++) scanf("%d",&in[i]); printf("Enter no of frames:\n"); scanf("%d",&nf); } void initialize() { pg_fault_cnt=0; for(i=0; i<nf; i++) p[i]=9999; } int isHit(int data) { hit=0; for(j=0; j<nf; j++) { if(p[j]==data) { hit=1; break; } } return hit; } /* int getHitIndex(int data) { int hit_ind=0; for(k=0; k<nf; k++) { if(p[k]==data) { hit_ind=k; break; } } return hit_ind; }*/ void display_Pages() { for (k=0; k<nf; k++) { if(p[k]!=9999) printf(" %d",p[k]); } } //Display to number of page fault value void display_Page_Fault_Cnt() { printf("Total no of page faults:%d\n",pg_fault_cnt); } //page fault for first in first out algorithm void fifo() { initialize(); for(i=0; i<n; i++) { printf("\nFor %d :",in[i]); if(isHit(in[i])==0) { for(k=0; k<nf-1; k++) p[k]=p[k+1]; p[k]=in[i]; pg_fault_cnt++; display_Pages(); } else printf("No page fault"); } display_Page_Fault_Cnt(); } //page fault for optimal page replacement algorithm void optimal() { initialize(); int near[50]; for(i=0; i<n; i++) { printf("\nFor %d :",in[i]); if(isHit(in[i])==0) { for(j=0; j<nf; j++) { int pg=p[j]; int found=0; for(k=i; k<n; k++) { if(pg==in[k]) { near[j]=k; found=1; break; } else found=0; } if(!found) near[j]=9999; } int max=-9999; int replace_index = 0; for(j=0; j<nf; j++) { if(near[j]>max) { max=near[j]; replace_index=j; } } p[replace_index]=in[i]; pg_fault_cnt++; display_Pages(); } else printf("No page fault\n"); } display_Page_Fault_Cnt(); } //page fault for least recent used algorithm void lru() { initialize(); int least[50]; for(i=0; i<n; i++) { printf("\nFor %d :",in[i]); if(isHit(in[i])==0) { for(j=0; j<nf; j++) { int pg=p[j]; int found=0; for(k=i-1; k>=0; k--) { if(pg==in[k]) { least[j]=k; found=1; break; } else found=0; } if(!found) least[j]=-9999; } int min=9999; int replace_index=0; for(j=0; j<nf; j++) { if(least[j]<min) { min=least[j]; replace_index=j; } } p[replace_index]=in[i]; pg_fault_cnt++; display_Pages(); } else printf("No page fault!\n"); } display_Page_Fault_Cnt(); } int main() { int choice; while(1) { printf("\nPage Replacement Algorithms\n1.Enter data\n2.FIFO\n3.Optimal\n4.LRU\n5.Exit\nEnter your choice:\n"); scanf("%d",&choice); switch(choice) { case 1: getData(); break; case 2: fifo(); break; case 3: optimal(); break; case 4: lru(); break; case 5: exit(5); default: return 0; } } }