Skip to content

Commit 26210ba

Browse files
committed
doc: add documentation so the code more understandable
1 parent e48f29a commit 26210ba

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

cpu_scheduling_algorithms/round_robin_scheduling.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ struct ProcessResult : public Process {
6464
}
6565
};
6666

67+
/**
68+
* Represent remaining burst time of a process.
69+
*/
70+
using BTLeft = uint32_t;
71+
6772
/**
6873
* @brief Execute processes based on Round-robin algorithm.
6974
*
@@ -115,7 +120,7 @@ bool CompareAT(const Process& p1, const Process& p2) {
115120
*/
116121
void CheckArriveProcess(const std::vector<Process>& processes,
117122
std::set<uint32_t>& arrived_process,
118-
std::queue<std::pair<Process, uint32_t>>& schedule,
123+
std::queue<std::pair<Process, BTLeft>>& schedule,
119124
uint32_t time_elapsed);
120125

121126
/**
@@ -134,12 +139,14 @@ void Test() {
134139
const uint32_t kTimeSlice{3};
135140
std::vector<ProcessResult> results = RRExecute(processes, kTimeSlice);
136141

137-
std::vector<uint32_t> completion_times({80, 14, 100, 82, 166});
142+
std::vector<uint32_t> correct_completion_times({80, 14, 100, 82, 166});
138143
std::vector<ProcessResult> correct_results;
144+
// Generate correct process results based on correct completion times
139145
for (size_t i = 0; i < processes.size(); i++) {
140-
correct_results.emplace_back(processes[i], completion_times[i]);
146+
correct_results.emplace_back(processes[i], correct_completion_times[i]);
141147
}
142148

149+
// Sort the results and correct results so they're exactly the same
143150
std::sort(results.begin(), results.end(), CompareAT);
144151
std::sort(correct_results.begin(), correct_results.end(), CompareAT);
145152

@@ -150,22 +157,26 @@ void Test() {
150157

151158
std::vector<ProcessResult> RRExecute(const std::vector<Process>& processes,
152159
uint32_t time_slice) {
153-
std::queue<std::pair<Process, uint32_t>> schedule;
160+
std::queue<std::pair<Process, BTLeft>> schedule;
154161
std::set<uint32_t> arrived_processes;
155162

156163
std::vector<ProcessResult> results;
157164
results.reserve(processes.size());
158165

166+
// The time of the first process execution will be the lowest process AT
159167
uint32_t time_elapsed =
160168
std::min_element(processes.begin(), processes.end(), CompareAT)->arrival_time;
161169

162170
CheckArriveProcess(processes, arrived_processes, schedule,
163171
time_elapsed);
164172

165173
while (!schedule.empty()) {
166-
std::pair<Process, uint32_t> current = schedule.front();
174+
std::pair<Process, BTLeft> current = schedule.front();
167175
schedule.pop();
168176

177+
// If process burst time < time slice, then the process will be
178+
// executed for the burst time amount of time, not the time
179+
// quantum/slice
169180
uint32_t elapsed =
170181
(current.second > time_slice) ? time_slice : current.second;
171182
current.second -= elapsed;
@@ -178,6 +189,8 @@ std::vector<ProcessResult> RRExecute(const std::vector<Process>& processes,
178189
schedule.push(current);
179190
continue;
180191
}
192+
// Generate process result based on the completion time (time
193+
// that has elapsed)
181194
results.emplace_back(current.first, time_elapsed);
182195
}
183196

@@ -216,7 +229,7 @@ std::ostream& operator<<(std::ostream& ostream,
216229

217230
void CheckArriveProcess(const std::vector<Process> &processes,
218231
std::set<uint32_t>& arrived_process,
219-
std::queue<std::pair<Process, uint32_t>>& schedule,
232+
std::queue<std::pair<Process, BTLeft>>& schedule,
220233
uint32_t time_elapsed) {
221234
for (auto& p : processes) {
222235
if (p.arrival_time > time_elapsed ||

0 commit comments

Comments
 (0)