Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- void LRU() {
- int hit = 0, miss = 0, i, j, noPages, noFrames, min;
- int frames[10], pages[20];
- int flagFound, flag;
- int count = 0;
- int frameAge[10];
- printf("\n--- LRU Page Replacement ---\n");
- printf("Enter number of frames: ");
- scanf("%d", &noFrames);
- printf("Enter number of pages: ");
- scanf("%d", &noPages);
- printf("Enter page reference string: ");
- for(i = 0; i < noPages; i++) {
- scanf("%d", &pages[i]);
- }
- for(i = 0; i < noFrames; i++) {
- frames[i] = -1;
- frameAge[i] = -1;
- }
- printf("\nPage\tStatus\t\tFrames");
- printf("\n------------------------------------\n");
- for(j = 0; j < noPages; j++) {
- printf("%d\t", pages[j]);
- flagFound = 0;
- flag = 0;
- // Check for page hit
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == pages[j]) {
- flagFound = 1;
- flag = 1;
- count++;
- frameAge[i] = count;
- hit++;
- printf("Hit\t");
- break;
- }
- }
- // Handle page fault
- if(!flagFound) {
- // Find empty frame
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == -1) {
- frames[i] = pages[j];
- flag = 1;
- count++;
- frameAge[i] = count;
- miss++;
- printf("Miss\t");
- break;
- }
- }
- }
- // Page replacement needed
- if(!flag) {
- min = 0;
- for(i = 1; i < noFrames; i++) {
- if(frameAge[i] < frameAge[min]) {
- min = i;
- }
- }
- frames[min] = pages[j];
- count++;
- frameAge[min] = count;
- miss++;
- printf("Miss\t");
- }
- // Display current frames
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == -1) printf(" - ");
- else printf("%3d ", frames[i]);
- }
- printf("\n");
- }
- printf("\nTotal Hits: %d\n", hit);
- printf("Total Misses: %d\n\n", miss);
- }
- void MFU() {
- int hit = 0, miss = 0, i, j, noPages, noFrames;
- int frames[10], pages[20];
- int flagFound, flag;
- int frameFREQ[50] = {0};
- printf("\n--- MFU Page Replacement ---\n");
- printf("Enter number of frames: ");
- scanf("%d", &noFrames);
- printf("Enter number of pages: ");
- scanf("%d", &noPages);
- printf("Enter page reference string: ");
- for(i = 0; i < noPages; i++) {
- scanf("%d", &pages[i]);
- }
- for(i = 0; i < noFrames; i++) {
- frames[i] = -1;
- }
- printf("\nPage\tStatus\t\tFrames");
- printf("\n------------------------------------\n");
- for(j = 0; j < noPages; j++) {
- printf("%d\t", pages[j]);
- flagFound = 0;
- flag = 0;
- // Check for page hit
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == pages[j]) {
- flagFound = 1;
- flag = 1;
- frameFREQ[i]++;
- hit++;
- printf("Hit\t");
- break;
- }
- }
- // Handle page fault
- if(!flagFound) {
- // Find empty frame
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == -1) {
- frames[i] = pages[j];
- flag = 1;
- frameFREQ[i] = 1;
- miss++;
- printf("Miss\t");
- break;
- }
- }
- // Page replacement needed
- if(!flag) {
- int bestmfu = 0;
- for(i = 1; i < noFrames; i++) {
- if(frameFREQ[i] > frameFREQ[bestmfu]) {
- bestmfu = i;
- }
- }
- frames[bestmfu] = pages[j];
- frameFREQ[bestmfu] = 1;
- miss++;
- printf("Miss\t");
- }
- }
- // Display current frames
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == -1) printf(" - ");
- else printf("%3d ", frames[i]);
- }
- printf("\n");
- }
- printf("\nTotal Hits: %d\n", hit);
- printf("Total Misses: %d\n\n", miss);
- }
- void MRU() {
- int hit = 0, miss = 0, i, j, noPages, noFrames, max;
- int frames[10], pages[20];
- int flagFound, flag;
- int count = 0;
- int frameAge[10];
- printf("\n--- MRU Page Replacement ---\n");
- printf("Enter number of frames: ");
- scanf("%d", &noFrames);
- printf("Enter number of pages: ");
- scanf("%d", &noPages);
- printf("Enter page reference string: ");
- for(i = 0; i < noPages; i++) {
- scanf("%d", &pages[i]);
- }
- for(i = 0; i < noFrames; i++) {
- frames[i] = -1;
- frameAge[i] = -1;
- }
- printf("\nPage\tStatus\t\tFrames");
- printf("\n------------------------------------\n");
- for(j = 0; j < noPages; j++) {
- printf("%d\t", pages[j]);
- flagFound = 0;
- flag = 0;
- // Check for page hit
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == pages[j]) {
- flagFound = 1;
- flag = 1;
- count++;
- frameAge[i] = count;
- hit++;
- printf("Hit\t");
- break;
- }
- }
- // Handle page fault
- if(!flagFound) {
- // Find empty frame
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == -1) {
- frames[i] = pages[j];
- flag = 1;
- count++;
- frameAge[i] = count;
- miss++;
- printf("Miss\t");
- break;
- }
- }
- }
- // Page replacement needed
- if(!flag) {
- max = 0;
- for(i = 1; i < noFrames; i++) {
- if(frameAge[i] > frameAge[max]) {
- max = i;
- }
- }
- frames[max] = pages[j];
- count++;
- frameAge[max] = count;
- miss++;
- printf("Miss\t");
- }
- // Display current frames
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == -1) printf(" - ");
- else printf("%3d ", frames[i]);
- }
- printf("\n");
- }
- printf("\nTotal Hits: %d\n", hit);
- printf("Total Misses: %d\n\n", miss);
- }
- void Optimal() {
- int hit = 0, miss = 0, i, j, k, noPages, noFrames, max, pos;
- int frames[10], pages[20], temp[10];
- int flagFound, flag, flag3;
- printf("\n--- Optimal Page Replacement ---\n");
- printf("Enter number of frames: ");
- scanf("%d", &noFrames);
- printf("Enter number of pages: ");
- scanf("%d", &noPages);
- printf("Enter page reference string: ");
- for(i = 0; i < noPages; i++) {
- scanf("%d", &pages[i]);
- }
- for(i = 0; i < noFrames; i++) {
- frames[i] = -1;
- }
- printf("\nPage\tStatus\t\tFrames");
- printf("\n------------------------------------\n");
- for(j = 0; j < noPages; j++) {
- printf("%d\t", pages[j]);
- flagFound = 0;
- flag = 0;
- // Check for page hit
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == pages[j]) {
- flagFound = 1;
- flag = 1;
- hit++;
- printf("Hit\t");
- break;
- }
- }
- // Handle page fault
- if(!flagFound) {
- // Find empty frame
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == -1) {
- frames[i] = pages[j];
- flag = 1;
- miss++;
- printf("Miss\t");
- break;
- }
- }
- }
- // Page replacement needed
- if(!flag) {
- flag3 = 0;
- for(i = 0; i < noFrames; i++) {
- temp[i] = -1;
- for(k = j + 1; k < noPages; k++) {
- if(frames[i] == pages[k]) {
- temp[i] = k;
- break;
- }
- }
- }
- for(i = 0; i < noFrames; i++) {
- if(temp[i] == -1) {
- pos = i;
- flag3 = 1;
- break;
- }
- }
- if(!flag3) {
- max = temp[0];
- pos = 0;
- for(i = 1; i < noFrames; i++) {
- if(temp[i] > max) {
- max = temp[i];
- pos = i;
- }
- }
- }
- frames[pos] = pages[j];
- miss++;
- printf("Miss\t");
- }
- // Display current frames
- for(i = 0; i < noFrames; i++) {
- if(frames[i] == -1) printf(" - ");
- else printf("%3d ", frames[i]);
- }
- printf("\n");
- }
- printf("\nTotal Hits: %d\n", hit);
- printf("Total Misses: %d\n\n", miss);
- }
- int main() {
- int choice;
- while(1) {
- printf("Page Replacement Algorithms\n");
- printf("1. LRU\n2. MFU\n3. MRU\n4. Optimal\n5. Exit\n");
- printf("Enter your choice: ");
- scanf("%d", &choice);
- switch(choice) {
- case 1: LRU(); break;
- case 2: MFU(); break;
- case 3: MRU(); break;
- case 4: Optimal(); break;
- case 5: exit(0);
- default: printf("Invalid choice!\n");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement