LRU
// LRU
#include <stdio.h> #include <stdlib.h>
#define FRAME_SIZE 3 #define PAGE_COUNT 10
int isPageInMemory(int page, int frames[], int
frameCount) {
for (int i = 0; i
< frameCount; i++) { if (frames[i] == page) {
return 1; } } return 0; }
int getLRUIndex(int time[], int frameCount) {
int min = time[0],
index = 0;
for (int i = 1; i
< frameCount; i++) { if (time[i]
< min) { min = time[i];
index = i; } } return index;
}
void lruPageReplacement(int pages[], int pageCount) {
int
frames[FRAME_SIZE]; int time[FRAME_SIZE]; int
pageFaults = 0;
for (int i = 0; i
< FRAME_SIZE; i++) { frames[i] = -1; time[i] = 0; }
printf("Page
Reference:\n");
for (int i = 0; i
< pageCount; i++) { printf("%d
", pages[i]);
if
(!isPageInMemory(pages[i], frames, FRAME_SIZE)) { pageFaults++;
int lruIndex =
getLRUIndex(time, FRAME_SIZE); frames[lruIndex] = pages[i];
time[lruIndex] =
i; printf("-> Page Fault!
Frames: [");
for (int j = 0; j
< FRAME_SIZE; j++) { if (j > 0) printf(", ");
printf("%d", frames[j]); } printf("]\n"); }
else {
for (int j = 0; j
< FRAME_SIZE; j++) { if (frames[j] == pages[i]) {
time[j] = i; break; } } printf("(No Page Fault)\n"); } }
printf("\nTotal Page Faults: %d\n",
pageFaults); } int main() {
int
pages[PAGE_COUNT] = {0, 1, 2, 1, 3, 0, 4, 0, 1, 2};
lruPageReplacement(pages, PAGE_COUNT);
return 0; }
Comments
Post a Comment