Write the simulation program to implement demand paging and show the page scheduling and total number of page faults for the following given page reference string. Give input n as the number of memory frames. Reference String: 2,5,2,8,5,4,1,2,3,2,6,1,2,5,9,8 (LFU) Least Frequently Used
#include <stdio.h>
#include <stdlib.h>
// Function to find the index of the page with the least frequency
int findLFUPage(int freq[], int n) {
int minFreq = freq[0];
int minIndex = 0;
for (int i = 1; i < n; i++) {
if (freq[i] < minFreq) {
minFreq = freq[i];
minIndex = i;
}
}
return minIndex;
}
// Function to simulate demand paging with LFU page replacement
void demandPagingLFU(int referenceString[], int n, int numFrames) {
int frames[numFrames];
int pageFaults = 0;
int freq[numFrames]; // Frequency of each page in the frames
for (int i = 0; i < numFrames; i++) {
frames[i] = -1; // Initialize frames to empty
freq[i] = 0; // Initialize frequency to 0
}
printf("Page Schedule:\n");
for (int i = 0; i < n; i++) {
int page = referenceString[i];
int found = 0;
for (int j = 0; j < numFrames; j++) {
if (frames[j] == page) {
freq[j]++;
found = 1;
break;
}
}
if (!found) {
int lfuIndex = findLFUPage(freq, numFrames);
frames[lfuIndex] = page;
freq[lfuIndex] = 1;
pageFaults++;
printf("Page %d -> ", page);
for (int j = 0; j < numFrames; j++) {
if (frames[j] == -1) {
printf("M ");
} else {
printf("%d ", frames[j]);
}
}
printf(" (Page Fault)\n");
} else {
printf("Page %d -> ", page);
for (int j = 0; j < numFrames; j++) {
if (frames[j] == -1) {
printf("M ");
} else {
printf("%d ", frames[j]);
}
}
printf("\n");
}
}
printf("\nTotal Page Faults: %d\n", pageFaults);
}
int main() {
int numFrames;
int n;
printf("Enter the number of memory frames: ");
scanf("%d", &numFrames);
printf("Enter the number of pages in the reference string: ");
scanf("%d", &n);
int referenceString[n];
printf("Enter the reference string (separated by spaces): ");
for (int i = 0; i < n; i++) {
scanf("%d", &referenceString[i]);
}
demandPagingLFU(referenceString, n, numFrames);
return 0;
}
Comments
Post a Comment