1// Aim: Program to perform Memory Management operations (Memory Management).
2#include<stdio.h>
3#include<stdlib.h>
4
5void display(int psize, int bsize, int blank){
6 if(bsize != -1){
7 printf("%d allocated block %d.....wastage is %d\n", psize, bsize, blank);
8 }
9 else{
10 printf("%d not allocated\n", psize);
11 }
12
13}
14
15void first_fit(int memory[], int process[], int msize, int prsize){
16 int allocated[100]= {0};
17 printf("First Fit\n");
18 for(int i = 0; i < prsize; i++){
19 int bindex = -1;
20 for(int j = 0; j < msize; j++){
21 if(memory[j] >= process[i] && allocated[j] == 0){
22 bindex = j;
23 break;
24 }
25 }
26 if(bindex != -1){
27 display(process[i], memory[bindex], memory[bindex] - process[i]);
28 }
29 else{
30 display(process[i], -1, -1);
31 }
32 }
33}
34
35void best_fit(int memory[], int process[], int msize, int prsize){
36 int allocated[100]= {0};
37 printf("Best Fit\n");
38 for(int i = 0; i < prsize; i++){
39 int be_index = -1;
40 int bwaste = __INT_MAX__;
41 for(int j = 0; j < msize; j++){
42 if(memory[j] >= process[i] && allocated[j] == 0){
43 if(bwaste > memory[j] - process[i]){
44 bwaste = memory[j] - process[i];
45 be_index = j;
46 }
47 }
48 }
49 if(be_index != -1){
50 display(process[i], memory[be_index], memory[be_index] - process[i]);
51 }
52 else{
53 display(process[i], -1, -1);
54 }
55 }
56}
57
58void worst_fit(int memory[], int process[], int msize, int prsize){
59 int allocated[100]= {0};
60 printf("Worst Fit\n");
61 for(int i = 0; i < prsize; i++){
62 int bw_index = -1;
63 int bwaste = -1;
64 for(int j = 0; j < msize; j++){
65 if(memory[j] >= process[i] && allocated[j] == 0){
66 if(bwaste < memory[j] - process[i]){
67 bwaste = memory[j] - process[i];
68 bw_index = j;
69 }
70 }
71 }
72 if(bw_index != -1){
73 display(process[i], memory[bw_index], memory[bw_index] - process[i]);
74 }
75 else{
76 display(process[i], -1, -1);
77 }
78 }
79}
80
81int main(){
82 int msize, prsize;
83 printf("Enter the number of memory blocks: ");
84 scanf("%d", &msize);
85 int memory[msize];
86 printf("Enter the size of memory blocks:\n");
87 for(int i = 0; i < msize; i++){
88 scanf("%d", &memory[i]);
89 }
90 printf("Enter the number of processes: ");
91 scanf("%d", &prsize);
92 int process[prsize];
93 printf("Enter the size of processes:\n");
94 for(int i = 0; i < prsize; i++){
95 scanf("%d", &process[i]);
96 }
97 first_fit(memory, process, msize, prsize);
98 best_fit(memory, process, msize, prsize);
99 worst_fit(memory, process, msize, prsize);
100}