-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpartitioning.c
98 lines (93 loc) · 3.27 KB
/
partitioning.c
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
#include <stdio.h>
#include <stdlib.h>
void printProcesses(int processes, int allocated[], int processSizes[]) {
printf("\nProcess\tSize\tBlock number");
for (int i = 0; i < processes; i++) {
printf("\n%d\t%d\t", i+1, processSizes[i]);
if (allocated[i] != -1)
printf("%d", allocated[i]+1);
else
printf("Not allocated");
}
}
void firstFit(int blocks, int blockSizes[], int processes, int processSizes[]) {
int allocated[processes], occupied[blocks];
for (int i=0; i<processes; i++)
allocated[i] = -1;
for (int i=0; i<blocks; i++)
occupied[i] = 0;
for (int i=0; i<processes; i++) {
for (int j=0; j<blocks; j++) {
if (processSizes[i] <= blockSizes[j] && !occupied[j]) {
allocated[i] = j;
occupied[j] = 1;
break;
}
}
}
printProcesses(processes, allocated, processSizes);
}
void bestFit(int blocks, int blockSizes[], int processes, int processSizes[]) {
int allocated[processes], occupied[blocks], difference, min, index;
for (int i=0; i<processes; i++)
allocated[i] = -1;
for (int i=0; i<blocks; i++)
occupied[i] = 0;
for (int i=0; i<processes; i++) {
index = -1;
for (int j=0; j<blocks; j++) {
if (!occupied[j] && blockSizes[j] >= processSizes[i]) {
if (index == -1 || blockSizes[j] < blockSizes[index])
index = j;
}
}
if (index != -1) {
allocated[i] = index;
occupied[index] = 1;
}
}
printProcesses(processes, allocated, processSizes);
}
void worstFit(int blocks, int blockSizes[], int processes, int processSizes[]) {
int allocated[processes], occupied[blocks], difference, min, index;
for (int i=0; i<processes; i++)
allocated[i] = -1;
for (int i=0; i<blocks; i++)
occupied[i] = 0;
for (int i=0; i<processes; i++) {
index = -1;
for (int j=0; j<blocks; j++) {
if (!occupied[j] && blockSizes[j] >= processSizes[i]) {
if (index == -1 || blockSizes[j] > blockSizes[index])
index = j;
}
}
if (index != -1) {
allocated[i] = index;
occupied[index] = 1;
}
}
printProcesses(processes, allocated, processSizes);
}
void main() {
int bNo, pNo, choice;
printf("Enter the number of blocks: ");
scanf("%d", &bNo);
printf("Enter the number of processes: ");
scanf("%d", &pNo);
int processes[pNo], blocks[bNo];
printf("\nEnter the block sizes one by one: ");
for (int i=0; i<bNo; i++) scanf("%d", &blocks[i]);
printf("Enter the process sizes one by one: ");
for (int i=0; i<pNo; i++) scanf("%d", &processes[i]);
printf("\nChoose allocation policy:\n1. First fit\n2. Best fit\n3. Worst fit\n\nEnter your choice: ");
scanf("%d", &choice);
if (choice == 1)
firstFit(bNo, blocks, pNo, processes);
else if (choice == 2)
bestFit(bNo, blocks, pNo, processes);
else if (choice == 3)
worstFit(bNo, blocks, pNo, processes);
else
printf("\nInvalid choice!");
}