Advertisement
Sri27119

pageReplace_LRU

Nov 25th, 2024
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.45 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. void getRefString(int *ref_string, int n)
  4. {
  5.     printf("Enter reference string: ");
  6.     for (int i = 0; i < n; i++)
  7.     {
  8.         scanf("%d", &ref_string[i]);
  9.     }
  10. }
  11.  
  12. int findLRUPage(int *last_used, int frame_size)
  13. {
  14.     int min = last_used[0];
  15.     int pos = 0;
  16.  
  17.     for (int i = 1; i < frame_size; i++)
  18.     {
  19.         if (last_used[i] < min)
  20.         {
  21.             min = last_used[i];
  22.             pos = i;
  23.         }
  24.     }
  25.  
  26.     return pos;
  27. }
  28.  
  29. int main()
  30. {
  31.     int n;
  32.     printf("Enter size of reference String: ");
  33.     scanf("%d", &n);
  34.     int ref_string[n];
  35.     getRefString(ref_string, n);
  36.     int frame_size;
  37.     printf("Enter frame size: ");
  38.     scanf("%d", &frame_size);
  39.     int frame[frame_size];
  40.     int last_used[frame_size];
  41.     int hits = 0, page_faults = 0, time = 0;
  42.  
  43.    
  44.     for (int i = 0; i < frame_size; i++)
  45.     {
  46.         frame[i] = -1;
  47.         last_used[i] = -1;
  48.     }
  49.  
  50.     for (int i = 0; i < n; i++)
  51.     {
  52.         int found = 0;
  53.  
  54.         // Check if the page is already in the frame
  55.         for (int j = 0; j < frame_size; j++)
  56.         {
  57.             if (frame[j] == ref_string[i])
  58.             {
  59.                 hits++;
  60.                 found = 1;
  61.                 last_used[j] = time++;  
  62.                 break;
  63.             }
  64.         }
  65.  
  66.        
  67.         if (!found)
  68.         {
  69.             int empty_found = 0;
  70.            
  71.             for (int j = 0; j < frame_size; j++)
  72.             {
  73.                 if (frame[j] == -1)
  74.                 {
  75.                     frame[j] = ref_string[i];
  76.                     last_used[j] = time++;
  77.                     page_faults++;
  78.                     empty_found = 1;
  79.                     break;
  80.                 }
  81.             }
  82.  
  83.            
  84.             if (!empty_found)
  85.             {
  86.                 int pos = findLRUPage(last_used, frame_size);
  87.                 frame[pos] = ref_string[i];
  88.                 last_used[pos] = time++;
  89.                 page_faults++;
  90.             }
  91.         }
  92.     }
  93.  
  94.     double hit_ratio = (double)hits / n;
  95.     double page_fault_ratio = (double)page_faults / n;
  96.     printf("Hits: %d\n", hits);
  97.     printf("Page Faults: %d\n", page_faults);
  98.     printf("Hit Ratio: %f\n", hit_ratio);
  99.     printf("Page Fault Ratio: %f\n", page_fault_ratio);
  100.  
  101.     printf("Final frame state: ");
  102.     for (int i = 0; i < frame_size; i++)
  103.     {
  104.         printf("%d ", frame[i]);
  105.     }
  106.     printf("\n");
  107.  
  108.     return 0;
  109. }
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement