Advertisement
CHU2

Memory Management

Jan 19th, 2025 (edited)
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.54 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <iomanip>  // header to control printing output
  3.  
  4. using namespace std;
  5.  
  6. struct block {  // memory block
  7.     int size;
  8.     bool is_allocated;
  9. };
  10.  
  11. struct process {    // processess block
  12.     int size;
  13.     int allocated_in;
  14. };
  15.  
  16. void first_fit(block[], int, process[], int);
  17. void best_fit(block[], int, process[], int);
  18. void worst_fit(block[], int, process[], int);
  19. void print(block[], process[], int);
  20.  
  21. int main() {
  22.     const int max_blocks = 10;  // max blocks  and processes
  23.     const int max_processes = 10;
  24.  
  25.     block blocks[max_blocks] = {{100, false}, {500, false}, {200, false}, {300, false}, {600, false}};  // values to be processed
  26.     process processes[max_processes] = {{212, -1}, {417, -1}, {112, -1}, {426, -1}};
  27.     int block_count = 5, process_count = 4; // size of chuchu
  28.  
  29.     cout << "Blocks: ";
  30.     for (int h = 0; h < block_count; h++) {
  31.         cout << setw(9) << blocks[h].size;
  32.     }
  33.     cout << "\nProcessess: ";
  34.     cout << setw(5);
  35.     for (int h = 0; h < block_count; h++) {
  36.         cout << processes[h].size << setw(9);
  37.     }
  38.    
  39.     cout << "\nFirst Fit Allocation:\n";
  40.     first_fit(blocks, block_count, processes, process_count);
  41.     print(blocks, processes, process_count);
  42.    
  43.     for (int h = 0; h < block_count; h++) { // restarts the memory block usage allocation before continuing to another allocation
  44.         blocks[h].is_allocated = false;
  45.     }
  46.    
  47.     cout << "\nBest Fit Allocation:\n";
  48.     best_fit(blocks, block_count, processes, process_count);
  49.     print(blocks, processes, process_count);
  50.    
  51.     for (int h = 0; h < block_count; h++) {
  52.         blocks[h].is_allocated = false;
  53.     }
  54.    
  55.     cout << "\nWorst Fit Allocation:\n";
  56.     worst_fit(blocks, block_count, processes, process_count);
  57.     print(blocks, processes, process_count);
  58.    
  59.     return 0;
  60. }
  61.  
  62. void first_fit(block blocks[], int block_count, process processes[], int process_count) {
  63.     for (int h = 0; h < process_count; h++) {
  64.         processes[h].allocated_in = -1;
  65.         for (int i = 0; i < block_count; i++) {
  66.             if (!blocks[i].is_allocated && blocks[i].size >= processes[h].size) {   // is like linear search
  67.                 processes[h].allocated_in = i;
  68.                 blocks[i].is_allocated = true;
  69.                 break;
  70.             }
  71.         }
  72.     }
  73. }
  74.  
  75. void best_fit(block blocks[], int block_count, process processes[], int process_count) {
  76.     for (int h = 0; h < process_count; h++) {
  77.         int best_index = -1;
  78.         for (int i = 0; i < block_count; i++) {
  79.             if (!blocks[i].is_allocated && blocks[i].size >= processes[h].size) {
  80.                 if (best_index == -1 || blocks[i].size < blocks[best_index].size) { // finds the best index first before allocating value
  81.                     best_index = i;
  82.                 }
  83.             }
  84.         }
  85.         if (best_index != -1) {
  86.             processes[h].allocated_in = best_index;
  87.             blocks[best_index].is_allocated = true;
  88.         } else {
  89.             processes[h].allocated_in = -1;
  90.         }
  91.     }
  92. }
  93.  
  94. void worst_fit(block blocks[], int block_count, process processes[], int process_count) {
  95.     for (int h = 0; h < process_count; h++) {
  96.         int worst_index = -1;
  97.         for (int i = 0; i < block_count; i++) {
  98.             if (!blocks[i].is_allocated && blocks[i].size >= processes[h].size) {
  99.                 if (worst_index == -1 || blocks[i].size > blocks[worst_index].size) {   // same as best_fit but this use > condition in finding the n_fit to ensure it is the highest value available
  100.                     worst_index = i;
  101.                 }
  102.             }
  103.         }
  104.         if (worst_index != -1) {
  105.             processes[h].allocated_in = worst_index;
  106.             blocks[worst_index].is_allocated = true;
  107.         } else {
  108.             processes[h].allocated_in = -1;
  109.         }
  110.     }
  111. }
  112.  
  113. void print(block blocks[], process processes[], int process_count) {
  114.     cout << "Process No." << setw(15) << "Process Size" << setw(15) << "Block No." << setw(15) << "Block Size\n";   // setw() is for setting width size
  115.     for (int h = 0; h < process_count; h++) {                                                                       // I use this instead of \t
  116.         cout << h + 1 << setw(16) << processes[h].size << setw(24);
  117.         if (processes[h].allocated_in != -1) {
  118.             cout << processes[h].allocated_in + 1;
  119.         }
  120.         else {
  121.             cout << "Not Allocated";
  122.         }
  123.         cout << setw(14) << blocks[processes[h].allocated_in].size << "\n";
  124.     }
  125. }
  126.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement