Advertisement
JavierGumin

Page Replacement Algorithm

Jun 4th, 2025
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.98 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void LRU() {
  5.     int hit = 0, miss = 0, i, j, noPages, noFrames, min;
  6.     int frames[10], pages[20];
  7.     int flagFound, flag;
  8.     int count = 0;
  9.     int frameAge[10];
  10.  
  11.     printf("\n--- LRU Page Replacement ---\n");
  12.     printf("Enter number of frames: ");
  13.     scanf("%d", &noFrames);
  14.     printf("Enter number of pages: ");
  15.     scanf("%d", &noPages);
  16.     printf("Enter page reference string: ");
  17.     for(i = 0; i < noPages; i++) {
  18.         scanf("%d", &pages[i]);
  19.     }
  20.  
  21.     for(i = 0; i < noFrames; i++) {
  22.         frames[i] = -1;
  23.         frameAge[i] = -1;
  24.     }
  25.  
  26.     printf("\nPage\tStatus\t\tFrames");
  27.     printf("\n------------------------------------\n");
  28.     for(j = 0; j < noPages; j++) {
  29.         printf("%d\t", pages[j]);
  30.         flagFound = 0;
  31.         flag = 0;
  32.  
  33.         // Check for page hit
  34.         for(i = 0; i < noFrames; i++) {
  35.             if(frames[i] == pages[j]) {
  36.                 flagFound = 1;
  37.                 flag = 1;
  38.                 count++;
  39.                 frameAge[i] = count;
  40.                 hit++;
  41.                 printf("Hit\t");
  42.                 break;
  43.             }
  44.         }
  45.  
  46.         // Handle page fault
  47.         if(!flagFound) {
  48.             // Find empty frame
  49.             for(i = 0; i < noFrames; i++) {
  50.                 if(frames[i] == -1) {
  51.                     frames[i] = pages[j];
  52.                     flag = 1;
  53.                     count++;
  54.                     frameAge[i] = count;
  55.                     miss++;
  56.                     printf("Miss\t");
  57.                     break;
  58.                 }
  59.             }
  60.         }
  61.  
  62.         // Page replacement needed
  63.         if(!flag) {
  64.             min = 0;
  65.             for(i = 1; i < noFrames; i++) {
  66.                 if(frameAge[i] < frameAge[min]) {
  67.                     min = i;
  68.                 }
  69.             }
  70.             frames[min] = pages[j];
  71.             count++;
  72.             frameAge[min] = count;
  73.             miss++;
  74.             printf("Miss\t");
  75.         }
  76.  
  77.         // Display current frames
  78.         for(i = 0; i < noFrames; i++) {
  79.             if(frames[i] == -1) printf("  - ");
  80.             else printf("%3d ", frames[i]);
  81.         }
  82.         printf("\n");
  83.     }
  84.  
  85.     printf("\nTotal Hits: %d\n", hit);
  86.     printf("Total Misses: %d\n\n", miss);
  87. }
  88.  
  89. void MFU() {
  90.     int hit = 0, miss = 0, i, j, noPages, noFrames;
  91.     int frames[10], pages[20];
  92.     int flagFound, flag;
  93.     int frameFREQ[50] = {0};
  94.  
  95.     printf("\n--- MFU Page Replacement ---\n");
  96.     printf("Enter number of frames: ");
  97.     scanf("%d", &noFrames);
  98.     printf("Enter number of pages: ");
  99.     scanf("%d", &noPages);
  100.     printf("Enter page reference string: ");
  101.     for(i = 0; i < noPages; i++) {
  102.         scanf("%d", &pages[i]);
  103.     }
  104.  
  105.     for(i = 0; i < noFrames; i++) {
  106.         frames[i] = -1;
  107.     }
  108.  
  109.     printf("\nPage\tStatus\t\tFrames");
  110.     printf("\n------------------------------------\n");
  111.     for(j = 0; j < noPages; j++) {
  112.         printf("%d\t", pages[j]);
  113.         flagFound = 0;
  114.         flag = 0;
  115.  
  116.         // Check for page hit
  117.         for(i = 0; i < noFrames; i++) {
  118.             if(frames[i] == pages[j]) {
  119.                 flagFound = 1;
  120.                 flag = 1;
  121.                 frameFREQ[i]++;
  122.                 hit++;
  123.                 printf("Hit\t");
  124.                 break;
  125.             }
  126.         }
  127.  
  128.         // Handle page fault
  129.         if(!flagFound) {
  130.             // Find empty frame
  131.             for(i = 0; i < noFrames; i++) {
  132.                 if(frames[i] == -1) {
  133.                     frames[i] = pages[j];
  134.                     flag = 1;
  135.                     frameFREQ[i] = 1;
  136.                     miss++;
  137.                     printf("Miss\t");
  138.                     break;
  139.                 }
  140.             }
  141.  
  142.             // Page replacement needed
  143.             if(!flag) {
  144.                 int bestmfu = 0;
  145.                 for(i = 1; i < noFrames; i++) {
  146.                     if(frameFREQ[i] > frameFREQ[bestmfu]) {
  147.                         bestmfu = i;
  148.                     }
  149.                 }
  150.                 frames[bestmfu] = pages[j];
  151.                 frameFREQ[bestmfu] = 1;
  152.                 miss++;
  153.                 printf("Miss\t");
  154.             }
  155.         }
  156.  
  157.         // Display current frames
  158.         for(i = 0; i < noFrames; i++) {
  159.             if(frames[i] == -1) printf("  - ");
  160.             else printf("%3d ", frames[i]);
  161.         }
  162.         printf("\n");
  163.     }
  164.  
  165.     printf("\nTotal Hits: %d\n", hit);
  166.     printf("Total Misses: %d\n\n", miss);
  167. }
  168.  
  169. void MRU() {
  170.     int hit = 0, miss = 0, i, j, noPages, noFrames, max;
  171.     int frames[10], pages[20];
  172.     int flagFound, flag;
  173.     int count = 0;
  174.     int frameAge[10];
  175.  
  176.     printf("\n--- MRU Page Replacement ---\n");
  177.     printf("Enter number of frames: ");
  178.     scanf("%d", &noFrames);
  179.     printf("Enter number of pages: ");
  180.     scanf("%d", &noPages);
  181.     printf("Enter page reference string: ");
  182.     for(i = 0; i < noPages; i++) {
  183.         scanf("%d", &pages[i]);
  184.     }
  185.  
  186.     for(i = 0; i < noFrames; i++) {
  187.         frames[i] = -1;
  188.         frameAge[i] = -1;
  189.     }
  190.  
  191.     printf("\nPage\tStatus\t\tFrames");
  192.     printf("\n------------------------------------\n");
  193.     for(j = 0; j < noPages; j++) {
  194.         printf("%d\t", pages[j]);
  195.         flagFound = 0;
  196.         flag = 0;
  197.  
  198.         // Check for page hit
  199.         for(i = 0; i < noFrames; i++) {
  200.             if(frames[i] == pages[j]) {
  201.                 flagFound = 1;
  202.                 flag = 1;
  203.                 count++;
  204.                 frameAge[i] = count;
  205.                 hit++;
  206.                 printf("Hit\t");
  207.                 break;
  208.             }
  209.         }
  210.  
  211.         // Handle page fault
  212.         if(!flagFound) {
  213.             // Find empty frame
  214.             for(i = 0; i < noFrames; i++) {
  215.                 if(frames[i] == -1) {
  216.                     frames[i] = pages[j];
  217.                     flag = 1;
  218.                     count++;
  219.                     frameAge[i] = count;
  220.                     miss++;
  221.                     printf("Miss\t");
  222.                     break;
  223.                 }
  224.             }
  225.         }
  226.  
  227.         // Page replacement needed
  228.         if(!flag) {
  229.             max = 0;
  230.             for(i = 1; i < noFrames; i++) {
  231.                 if(frameAge[i] > frameAge[max]) {
  232.                     max = i;
  233.                 }
  234.             }
  235.             frames[max] = pages[j];
  236.             count++;
  237.             frameAge[max] = count;
  238.             miss++;
  239.             printf("Miss\t");
  240.         }
  241.  
  242.         // Display current frames
  243.         for(i = 0; i < noFrames; i++) {
  244.             if(frames[i] == -1) printf("  - ");
  245.             else printf("%3d ", frames[i]);
  246.         }
  247.         printf("\n");
  248.     }
  249.  
  250.     printf("\nTotal Hits: %d\n", hit);
  251.     printf("Total Misses: %d\n\n", miss);
  252. }
  253.  
  254. void Optimal() {
  255.     int hit = 0, miss = 0, i, j, k, noPages, noFrames, max, pos;
  256.     int frames[10], pages[20], temp[10];
  257.     int flagFound, flag, flag3;
  258.  
  259.     printf("\n--- Optimal Page Replacement ---\n");
  260.     printf("Enter number of frames: ");
  261.     scanf("%d", &noFrames);
  262.     printf("Enter number of pages: ");
  263.     scanf("%d", &noPages);
  264.     printf("Enter page reference string: ");
  265.     for(i = 0; i < noPages; i++) {
  266.         scanf("%d", &pages[i]);
  267.     }
  268.  
  269.     for(i = 0; i < noFrames; i++) {
  270.         frames[i] = -1;
  271.     }
  272.  
  273.     printf("\nPage\tStatus\t\tFrames");
  274.     printf("\n------------------------------------\n");
  275.     for(j = 0; j < noPages; j++) {
  276.         printf("%d\t", pages[j]);
  277.         flagFound = 0;
  278.         flag = 0;
  279.  
  280.         // Check for page hit
  281.         for(i = 0; i < noFrames; i++) {
  282.             if(frames[i] == pages[j]) {
  283.                 flagFound = 1;
  284.                 flag = 1;
  285.                 hit++;
  286.                 printf("Hit\t");
  287.                 break;
  288.             }
  289.         }
  290.  
  291.         // Handle page fault
  292.         if(!flagFound) {
  293.             // Find empty frame
  294.             for(i = 0; i < noFrames; i++) {
  295.                 if(frames[i] == -1) {
  296.                     frames[i] = pages[j];
  297.                     flag = 1;
  298.                     miss++;
  299.                     printf("Miss\t");
  300.                     break;
  301.                 }
  302.             }
  303.         }
  304.  
  305.         // Page replacement needed
  306.         if(!flag) {
  307.             flag3 = 0;
  308.             for(i = 0; i < noFrames; i++) {
  309.                 temp[i] = -1;
  310.                 for(k = j + 1; k < noPages; k++) {
  311.                     if(frames[i] == pages[k]) {
  312.                         temp[i] = k;
  313.                         break;
  314.                     }
  315.                 }
  316.             }
  317.            
  318.             for(i = 0; i < noFrames; i++) {
  319.                 if(temp[i] == -1) {
  320.                     pos = i;
  321.                     flag3 = 1;
  322.                     break;
  323.                 }
  324.             }
  325.            
  326.             if(!flag3) {
  327.                 max = temp[0];
  328.                 pos = 0;
  329.                 for(i = 1; i < noFrames; i++) {
  330.                     if(temp[i] > max) {
  331.                         max = temp[i];
  332.                         pos = i;
  333.                     }
  334.                 }
  335.             }
  336.              
  337.             frames[pos] = pages[j];
  338.             miss++;
  339.             printf("Miss\t");
  340.         }
  341.  
  342.         // Display current frames
  343.         for(i = 0; i < noFrames; i++) {
  344.             if(frames[i] == -1) printf("  - ");
  345.             else printf("%3d ", frames[i]);
  346.         }
  347.         printf("\n");
  348.     }
  349.  
  350.     printf("\nTotal Hits: %d\n", hit);
  351.     printf("Total Misses: %d\n\n", miss);
  352. }
  353.  
  354. int main() {
  355.     int choice;
  356.    
  357.     while(1) {
  358.         printf("Page Replacement Algorithms\n");
  359.         printf("1. LRU\n2. MFU\n3. MRU\n4. Optimal\n5. Exit\n");
  360.         printf("Enter your choice: ");
  361.         scanf("%d", &choice);
  362.        
  363.         switch(choice) {
  364.             case 1: LRU(); break;
  365.             case 2: MFU(); break;
  366.             case 3: MRU(); break;
  367.             case 4: Optimal(); break;
  368.             case 5: exit(0);
  369.             default: printf("Invalid choice!\n");
  370.         }
  371.     }
  372.     return 0;
  373. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement