-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutilities.c
More file actions
87 lines (78 loc) · 2.45 KB
/
utilities.c
File metadata and controls
87 lines (78 loc) · 2.45 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
#include "utilities.h"
unsigned int minArrivalTime(Process *processes[], const unsigned int p_len)
{
unsigned int minimum = UINT_MAX;
for (int i = 0; i < p_len; i++) {
if (getArrivalTime(processes[i]) < minimum) {
minimum = getArrivalTime(processes[i]);
}
}
return minimum;
}
unsigned int findFirstProcessInQueue(Process *processes[], const unsigned int p_len,
const bool status_period_0[p_len], const bool status_period_1[p_len])
{
unsigned int minimum = UINT_MAX;
unsigned int index;
for (int i = 0; i < p_len; i++) {
if (getArrivalTime(processes[i]) < minimum && !(status_period_0[i] && status_period_1[i])) {
minimum = getArrivalTime(processes[i]);
index = i;
}
}
return index;
}
unsigned int findShortestProcess (Process *processes[], unsigned int p_len, unsigned int timeElapsed,
const bool status_period_0[p_len], const bool status_period_1[p_len])
{
unsigned int minimum = UINT_MAX;
unsigned int index;
bool flag = false;
for (int i = 0; i < p_len; i++) {
if (getArrivalTime(processes[i]) <= timeElapsed) {
if (getBurstTime(processes[i], 0) < minimum && !status_period_0[i] && !status_period_1[i]) {
minimum = getBurstTime(processes[i], 0);
index = i;
flag = true;
}
else if (getBurstTime(processes[i], 1) < minimum && status_period_0[i] && !status_period_1[i]) {
minimum = getBurstTime(processes[i], 1);
index = i;
flag = true;
}
}
}
if (flag) {
return index;
}
minimum = UINT_MAX;
for (int i = 0; i < p_len; i++) {
if (getArrivalTime(processes[i]) - timeElapsed < minimum && !(status_period_0[i] && status_period_1[i])) {
minimum = getArrivalTime(processes[i]) - timeElapsed;
index = i;
}
// else if (getArrivalTime(processes[i]) - timeElapsed < minimum && status_period_0[i] && !status_period_1[i]) {
// minimum = getArrivalTime(processes[i]) - timeElapsed;
// index = i;
// }
}
return index;
}
unsigned int findFirstProcessInLevel(Process *processes[], unsigned int p_len,
const bool isInLevel[2][p_len], unsigned int level,
const bool status_period_0[p_len], const bool status_period_1[p_len])
{
unsigned int minimum = UINT_MAX;
unsigned int index;
for (int l = 0; l < 3; l++) {
for (int i = 0; i < p_len; i++) {
if (l == level && isInLevel[level][i]) {
if (getArrivalTime(processes[i]) < minimum && !(status_period_0[i] && status_period_1[i])) {
minimum = getArrivalTime(processes[i]);
index = i;
}
}
}
}
return index;
}