☛ Write C programs to simulate Page replacement policies a) FCFS b) LRU c) Optimal
Aim:
☛ Write C programs to simulate Page replacement policies
a) FCFS
b) LRU
c) Optimal
Solution :
a) FCFS
PROGRAM: ( fcfs_page.c )
#include
int main() {
int pages[50], frames[10], n, f;
int index = 0, faults = 0;
printf("Enter number of pages: ");
scanf("%d", &n);
printf("Enter page reference string:\n");
for (int i = 0; i < n; i++)
scanf("%d", &pages[i]);
printf("Enter number of frames: ");
scanf("%d", &f);
for (int i = 0; i < f; i++)
frames[i] = -1;
for (int i = 0; i < n; i++) {
int found = 0;
for (int j = 0; j < f; j++) {
if (frames[j] == pages[i]) {
found = 1;
break;
}
}
if (!found) {
frames[index] = pages[i];
index = (index + 1) % f;
faults++;
}
}
printf("Total Page Faults (FIFO) = %d\n", faults);
return 0;
}
OUTPUT:
$ gcc fcfs_page.c
$ ./a.out
Enter number of pages: 12
Enter page reference string:
7 0 1 2 0 3 0 4 2 3 0 3
Enter number of frames: 3
Total Page Faults (FIFO) = 10
b) LRU
PROGRAM: ( lru_page.c )
#include
int main() {
int pages[50], frames[10], recent[10];
int n, f, faults = 0;
printf("Enter number of pages: ");
scanf("%d", &n);
printf("Enter page reference string:\n");
for (int i = 0; i < n; i++)
scanf("%d", &pages[i]);
printf("Enter number of frames: ");
scanf("%d", &f);
for (int i = 0; i < f; i++) {
frames[i] = -1;
recent[i] = 0;
}
for (int i = 0; i < n; i++) {
int found = 0;
for (int j = 0; j < f; j++) {
if (frames[j] == pages[i]) {
recent[j] = i;
found = 1;
break;
}
}
if (!found) {
int lru = 0;
for (int j = 1; j < f; j++)
if (recent[j] < recent[lru])
lru = j;
frames[lru] = pages[i];
recent[lru] = i;
faults++;
}
}
printf("Total Page Faults (LRU) = %d\n", faults);
return 0;
}
OUTPUT:
$ gcc lru_page.c
$ ./a.out
Enter number of pages: 12
Enter page reference string:
7 0 1 2 0 3 0 4 2 3 0 3
Enter number of frames: 3
Total Page Faults (LRU) = 9
c) Optimal
PROGRAM: ( optimal_page.c )
#include
int main() {
int pages[50], frames[10];
int n, f, faults = 0;
printf("Enter number of pages: ");
scanf("%d", &n);
printf("Enter page reference string:\n");
for (int i = 0; i < n; i++)
scanf("%d", &pages[i]);
printf("Enter number of frames: ");
scanf("%d", &f);
for (int i = 0; i < f; i++)
frames[i] = -1;
for (int i = 0; i < n; i++) {
int found = 0;
for (int j = 0; j < f; j++) {
if (frames[j] == pages[i]) {
found = 1;
break;
}
}
if (!found) {
int index = -1, farthest = i + 1;
for (int j = 0; j < f; j++) {
int k;
for (k = i + 1; k < n; k++) {
if (frames[j] == pages[k]) {
if (k > farthest) {
farthest = k;
index = j;
}
break;
}
}
if (k == n) {
index = j;
break;
}
}
if (index == -1)
index = 0;
frames[index] = pages[i];
faults++;
}
}
printf("Total Page Faults (Optimal) = %d\n", faults);
return 0;
}
OUTPUT:
$ gcc optimal_page.c
$ ./a.out
Enter number of pages: 12
Enter page reference string:
7 0 1 2 0 3 0 4 2 3 0 3
Enter number of frames: 3
Total Page Faults (Optimal) = 7
💻 Run This C Program
☛ Write C programs to simulate Page replacement policies
a) FCFS
b) LRU
c) Optimal
The selected C program is loaded
automatically into the editor.
Edit the program, provide input if required
and click Run.
The compiler is embedded using OneCompiler.
Your C program is compiled and run in the embedded
Linux environment; Study Glance does not execute C code
directly on your web server.
Some Operating Systems programs (fork, pipes, FIFOs,
message queues, shared memory and semaphores) may be
restricted in an online sandbox. If a program does not
run here, compile it on a Linux system with
gcc.