Advertisement
ghorardim

Memory Allocation (First, Best, Worst)

Nov 12th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const long long mx=1e5;
  5.  
  6. int blocks;
  7. int processes;
  8. bool allocated[mx+5];
  9. int block_size[mx+5];
  10. int allocation[mx+5];
  11. int process_size[mx+5];
  12.  
  13. void first_fit(void)
  14. {
  15. int i,k;
  16.  
  17. for(i=1; i<=blocks; i++)
  18. {
  19. allocated[i] = false;
  20. }
  21. for(i=1; i<=processes; i++)
  22. {
  23. allocation[i] = 0;
  24. }
  25.  
  26. for(i=1; i<=processes; i++)
  27. {
  28. for(k=1; k<=blocks; k++)
  29. {
  30. if(block_size[k] >= process_size[i] && !allocated[k])
  31. {
  32. allocation[i] = k;
  33. allocated[k] = true;
  34. break;
  35. }
  36. }
  37. }
  38.  
  39. printf("First Fit Memory Allocation:\n");
  40. for(i=1; i<=processes; i++)
  41. {
  42. if(allocation[i] > 0) printf("Process %d is allocated block %d\n",i,allocation[i]);
  43. else printf("Process %d is not allocated any block\n",i);
  44. }
  45. printf("\n");
  46. return;
  47. }
  48.  
  49. void best_fit(void)
  50. {
  51. int i,k,index,best;
  52.  
  53. for(i=1; i<=blocks; i++)
  54. {
  55. allocated[i] = false;
  56. }
  57. for(i=1; i<=processes; i++)
  58. {
  59. allocation[i] = 0;
  60. }
  61.  
  62. for(i=1; i<=processes; i++)
  63. {
  64. index = 0;
  65. best = INT_MAX;
  66. for(k=1; k<=blocks; k++)
  67. {
  68. if(block_size[k] < best && block_size[k] >= process_size[i] && !allocated[k])
  69. {
  70. index = k;
  71. allocated[k] = true;
  72. best = block_size[k];
  73. }
  74. }
  75. allocation[i] = index;
  76. }
  77.  
  78. printf("Best Fit Memory Allocation:\n");
  79. for(i=1; i<=processes; i++)
  80. {
  81. if(allocation[i] > 0) printf("Process %d is allocated block %d\n",i,allocation[i]);
  82. else printf("Process %d is not allocated any block\n",i);
  83. }
  84. printf("\n");
  85. return;
  86. }
  87.  
  88. void worst_fit(void)
  89. {
  90. int i,k,index,worst;
  91.  
  92. for(i=1; i<=blocks; i++)
  93. {
  94. allocated[i] = false;
  95. }
  96. for(i=1; i<=processes; i++)
  97. {
  98. allocation[i] = 0;
  99. }
  100.  
  101. for(i=1; i<=processes; i++)
  102. {
  103. index = 0;
  104. worst = INT_MIN;
  105. for(k=1; k<=blocks; k++)
  106. {
  107. if(block_size[k] > worst && block_size[k] >= process_size[i] && !allocated[k])
  108. {
  109. index = k;
  110. allocated[k] = true;
  111. worst = block_size[k];
  112. }
  113. }
  114. allocation[i] = index;
  115. }
  116.  
  117. printf("Worst Fit Memory Allocation:\n");
  118. for(i=1; i<=processes; i++)
  119. {
  120. if(allocation[i] > 0) printf("Process %d is allocated block %d\n",i,allocation[i]);
  121. else printf("Process %d is not allocated any block\n",i);
  122. }
  123. printf("\n");
  124. return;
  125. }
  126.  
  127. int main()
  128. {
  129. int i;
  130.  
  131. printf("Number of Blocks: ");
  132. cin>>blocks;
  133.  
  134. printf("Block Sizes:\n");
  135. for(i=1; i<=blocks; i++) cin>>block_size[i];
  136.  
  137. printf("Number of Processes: ");
  138. cin>>processes;
  139.  
  140. printf("Process Sizes:\n");
  141. for(i=1; i<=processes; i++) cin>>process_size[i];
  142.  
  143. best_fit();
  144. first_fit();
  145. worst_fit();
  146.  
  147. return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement