-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmemoryallocation.c
More file actions
159 lines (143 loc) · 4 KB
/
Copy pathmemoryallocation.c
File metadata and controls
159 lines (143 loc) · 4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include<stdio.h>
void firstFit(int blockSize[],int m,int processSize[],int n){
int allocation[n];
for(int i=0;i<n;i++){
allocation[i]=-1;
}
for(int i =0;i<n;i++){
for(int j=0;j<m;j++){
if(processSize[i]<=blockSize[j]){
allocation[i]=j;
blockSize[j]-=processSize[i];
break;
}
}
}
for(int i=0;i<n;i++){
if(allocation[i]!=-1){
printf("Process %d is allocated to block %d.\n",i+1,allocation[i]+1);
}
else{
printf("Process %d is not allocated.\n",i+1);
}
}
printf("Memory left in the blocks:\n");
for(int i=0;i<m;i++){
printf("Block %d : %d kB\n",i+1,blockSize[i]);
}
}
void worseFit(int blockSize[],int m , int processSize[] , int n){
int allocation[n];
for(int i=0;i<n;i++){
allocation[i]=-1;
}
for(int i=0;i<n;i++){
int lsb = -1;
for(int j=0;j<m;j++){
if(blockSize[j]>=processSize[i]){
if(lsb==-1||blockSize[lsb]<blockSize[j]){
lsb = j;
}
}
}
if(lsb!=-1){
allocation[i]=lsb;
blockSize[lsb]-=processSize[i];
}
}
for(int i=0;i<n;i++){
if(allocation[i]!=-1){
printf("Process %d is allocated to block %d.\n",i+1,allocation[i]+1);
}
else{
printf("Process %d is not allocated.\n",i+1);
}
}
printf("Memory left in the blocks:\n");
for(int i=0;i<m;i++){
printf("Block %d : %d kB\n",i+1,blockSize[i]);
}
}
void bestFit(int blockSize[],int m , int processSize[] , int n){
int allocation[n];
for(int i=0;i<n;i++){
allocation[i]=-1;
}
for(int i=0;i<n;i++){
int ssb = -1;
for(int j=0;j<m;j++){
if(blockSize[j]>=processSize[i]){
if(ssb==-1||blockSize[ssb]>blockSize[j]){
ssb = j;
}
}
}
if(ssb!=-1){
allocation[i]=ssb;
blockSize[ssb]-=processSize[i];
}
}
for(int i=0;i<n;i++){
if(allocation[i]!=-1){
printf("Process %d is allocated to block %d.\n",i+1,allocation[i]+1);
}
else{
printf("Process %d is not allocated.\n",i+1);
}
}
printf("Memory left in the blocks:\n");
for(int i=0;i<m;i++){
printf("Block %d : %d kB\n",i+1,blockSize[i]);
}
}
int main(){
//since the blocksize value changes after every allocation , we use different arrays for all the 3 kinds of allocations.
int blockSize1[]={100,500,200,300,600};
int blockSize2[]={100,500,200,300,600};
int blockSize3[]={100,500,200,300,600};
int processSize[]={212,417,112,426};
int m = sizeof(blockSize1)/sizeof(blockSize1[0]);
int n = sizeof(processSize)/sizeof(processSize[0]);
printf("FIRST FIT ALLOCATION\n");
firstFit(blockSize1,m,processSize,n);
printf("WORST FIT ALLOCATION:\n");
worseFit(blockSize2,m,processSize,n);
printf("BEST FIT ALLOCATION:\n");
bestFit(blockSize3,m,processSize,n);
return 0;
}
/*SAMPLE OUTPUT
FIRST FIT ALLOCATION
Process 1 is allocated to block 2.
Process 2 is allocated to block 5.
Process 3 is allocated to block 2.
Process 4 is not allocated.
Memory left in the blocks:
Block 1 : 100 kB
Block 2 : 176 kB
Block 3 : 200 kB
Block 4 : 300 kB
Block 5 : 183 kB
WORST FIT ALLOCATION:
Process 1 is allocated to block 5.
Process 2 is allocated to block 2.
Process 3 is allocated to block 5.
Process 4 is not allocated.
Memory left in the blocks:
Block 1 : 100 kB
Block 2 : 83 kB
Block 3 : 200 kB
Block 4 : 300 kB
Block 5 : 276 kB
BEST FIT ALLOCATION:
Process 1 is allocated to block 4.
Process 2 is allocated to block 2.
Process 3 is allocated to block 3.
Process 4 is allocated to block 5.
Memory left in the blocks:
Block 1 : 100 kB
Block 2 : 83 kB
Block 3 : 88 kB
Block 4 : 88 kB
Block 5 : 174 kB
*/