/*Objective implement Optimal Page replacement algorithm Author:Rahul kumar */ #include <stdio.h> #define m 100 int main() { int no_of_frames,no_of_pages,frames[m],pages[m],temp[m],flag1,flag2,flag3,i,j,k,pos,max,faults=0; printf("Enter number of frames: "); scanf("%d", &no_of_frames); printf("Enter number of pages: "); scanf("%d", &no_of_pages); printf("Enter page 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) //for non empty frame or no fault { if(frames[j] == pages[i]) { flag1 = flag2 = 1; break; } } if(flag1 == 0) //for empty frame { for(j = 0; j < no_of_frames; ++j) { if(frames[j] == -1) { faults++; frames[j] = pages[i]; flag2 = 1; break; } } } if(flag2 == 0) { flag3=0; for(j =0; j < no_of_frames; ++j) { temp[j]=-1; for(k=i+1;k< no_of_pages;++k) { if(frames[j]==pages[k]) { temp[j]=k; break; } } } for(j = 0; j < no_of_frames; ++j) { if(temp[j] == -1) { pos = j; flag3 = 1; break; } } if(flag3==0) { max=temp[0]; pos=0; for(j=1;j < no_of_frames; ++j) { if(temp[j] > max) { max=temp[j]; pos=j; } } } frames[pos]=pages[i]; faults++; } 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: 4 Enter number of pages: 10 Enter page reference string: 2 3 4 2 1 3 7 5 4 3 2 -1 -1 -1 2 3 -1 -1 2 3 4 -1 2 3 4 -1 2 3 4 1 2 3 4 1 7 3 4 1 5 3 4 1 5 3 4 1 5 3 4 1 Total Page Faults = 6