-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFCFS.cpp
More file actions
80 lines (67 loc) · 2.1 KB
/
FCFS.cpp
File metadata and controls
80 lines (67 loc) · 2.1 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
#include "FCFS.h"
void startTime(process *p, process *prev_p)
{
// calculating start time
if (prev_p == nullptr)
p->start_time = p->arrival_time;
else
p->start_time = max(prev_p->completion_time, p->arrival_time);
}
void fcfs(vector<process *> *processes)
{
vector<process *> p_arr;
queue<process *> p;
//first process
p.push(processes->at(0));
process *temp = p.front();
p.pop();
startTime(temp, nullptr);
completionTime(temp);
turnAround(temp);
waitingTime(temp);
responseTime(temp);
p_arr.push_back(temp);
unsigned int clock_time = processes->at(0)->burst_time, i = 1, counter = i;
for (i = 1; i < clock_time; i++)
{
// push to queue newly arrived process
if (counter < processes->size() && processes->at(counter)->arrival_time == i)
{
p.push(processes->at(counter));
clock_time += processes->at(counter)->burst_time;
++counter;
// push other process arive on same time
while (counter < processes->size() - 1 && processes->at(counter + 1)->arrival_time == i)
{
p.push(processes->at(counter));
clock_time += processes->at(counter)->burst_time;
++counter;
}
}
// process ended
if (i == p_arr.back()->completion_time)
{
// pop front
process *temp = p.front();
p.pop();
// do caculation
startTime(temp, p_arr.back());
completionTime(temp);
turnAround(temp);
waitingTime(temp);
responseTime(temp);
p_arr.push_back(temp);
}
}
/*
printing all neccessery information
*/
cout << "PID "
<< " Waiting time "
<< " Turn around time"
<< endl;
for (i = 0; i < processes->size(); i++)
cout << " " << processes->at(i)->pid << "\t" << processes->at(i)->waiting_time << "\t\t" << processes->at(i)->turnaround_time << endl;
cout << "\nCPU clock time = "
<< clock_time << endl;
}