EXPERIMENT-3
Simulate the following page replacement Alogorithm:-
A)FIFO
B)LRU
C)LFU
A)FIRST IN FIRST OUT(FIFO):-
AIM:To implement FIFO page replacement technique?
PROGRAM:
#include <stdio.h>
int main() {
int i, j, n, page[50], frame[10], no, k, avail, count = 0, top = 0;
printf("\n Enter the number of pages: "); scanf("%d", &n);
printf("\n Enter the page reference string: ");
for (i = 0; i < n; i++) scanf("%d",
&page[i]); printf("\n Enter the number of
frames: ");
scanf("%d", &no); for (i
= 0; i < no; i++) frame[i]
= -1; for (i = 0; i < n;
i++) { avail = 0; for (j =
0; j < no; j++) { if
(frame[j] == page[i]) {
avail = 1; break; } } if
(avail == 0) { frame[top]
= page[i]; top = (top +
1) % no; count++; }
printf("\n"); for (k = 0; k
< no; k++)
printf("%d\t", frame[k]);
}
printf("\n\n Total Page Faults: %d", count);
return 0;
}
B)LEAST RECENTLY USED(LRU)
AIM:To implement LRU page replacement technique
PROGRAM:
#include <stdio.h>
int main() { int frames[10], pages[30],
age[10]; int num_frames, num_pages,
page_faults = 0; int i, j, pos, min_age;
printf("Enter the number of frames: ");
scanf("%d", &num_frames);
printf("Enter the number of pages: ");
scanf("%d", &num_pages);
printf("Enter the reference string (page numbers): ");
for (i = 0; i < num_pages; i++) { scanf("%d",
&pages[i]);
}
for (i = 0; i < num_frames; i++) {
frames[i] = -1; age[i] = 0; }
for (i = 0; i < num_pages; i++) {
int found = 0; for (j = 0; j <
num_frames; j++) { if (frames[j]
== pages[i]) { found = 1; age[j]
= i + 1; break; } } if (found == 0)
{ pos = 0; min_age = age[0]; for
(j = 1; j < num_frames; j++) { if
(age[j] < min_age) { min_age =
age[j]; pos = j; } } frames[pos] =
pages[i]; age[pos] = i + 1;
page_faults++;
printf("Page %d caused a page fault: ", pages[i]);
for (j = 0; j < num_frames; j++) {
if (frames[j] != -1) printf("%d ",
frames[j]);
else printf("-
"); }
printf("\n");
}}
printf("\nTotal Page Faults = %d\n", page_faults);
return 0;
}
C)LEAST FREQUENTLY USED(LFU)
AIM:To implement LFU page replacement technique
PROGRAM:
#include <stdio.h>
#include <limits.h>
#define MAX_FRAMES 10
#define MAX_PAGES 50
int findLFU(int frames[], int freq[], int frame_count) {
int minFreq = INT_MAX; int
minIndex = 0; for (int i = 0; i <
frame_count; i++) { if
(freq[frames[i]] < minFreq) {
minFreq = freq[frames[i]]; minIndex
= i;
}}
return frames[minIndex];
}
int main() {
int pages[MAX_PAGES], frames[MAX_FRAMES];
int freq[MAX_PAGES] = {0}; int page_count,
frame_count, page_faults = 0;
printf("Enter the number of pages: ");
scanf("%d", &page_count);
printf("Enter the page sequence: "); for
(int i = 0; i < page_count; i++) {
scanf("%d", &pages[i]);
}
printf("Enter the number of frames: ");
scanf("%d", &frame_count);
for (int i = 0; i < frame_count; i++) { frames[i]
= -1;
}
for (int i = 0; i < page_count; i++) { int
page = pages[i];
int found = 0;
for (int j = 0; j < frame_count; j++) {
if (frames[j] == page) { found = 1;
freq[page]++; break; } } if (!found)
{ for (int j = 0; j < frame_count; j++)
{ if (frames[j] == -1) { frames[j] =
page; freq[page]++; page_faults++;
found = 1; break; }
} } if (!found) { int lfu_page = findLFU(frames,
freq, frame_count); for (int j = 0; j < frame_count;
j++) { if (frames[j] == lfu_page) { frames[j] =
page; freq[lfu_page] = 0; freq[page]++;
page_faults++; break; }
} } printf("Current frames: "); for
(int j = 0; j < frame_count; j++) { if
(frames[j] != -1) { printf("%d ",
frames[j]);
} else { printf("-
");
}}
printf("\n");
}
printf("Total Page Faults: %d\n", page_faults);
return 0; }