memory.c
100 linesc
DOWNLOAD
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}