#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