-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrr.cpp
More file actions
127 lines (107 loc) · 3.29 KB
/
Copy pathrr.cpp
File metadata and controls
127 lines (107 loc) · 3.29 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
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct Process
{
string name;
int arrivalTime;
int burstTime;
int remainingTime;
int completionTime;
int waitingTime;
int responseTime;
int startTime = -1;
bool isCompleted = false;
};
vector<Process> sortByArrival(vector<Process> &processes)
{
for (int i = 0; i < processes.size(); i++)
{
for (int j = i + 1; j < processes.size(); j++)
{
if (processes[j].arrivalTime < processes[i].arrivalTime)
{
Process temp = processes[j];
processes[j] = processes[i];
processes[i] = temp;
}
}
}
return processes;
}
void roundRobin(vector<Process> &processes, int quantum)
{
int currentTime = 0, completed = 0;
int remainingProcesses = processes.size();
float totalWaitingTime = 0, totalResponseTime = 0;
for (int i = 0; i < processes.size(); i = (i + 1) % processes.size()) // circular loop
{
if (processes[i].remainingTime > 0 && processes[i].arrivalTime <= currentTime)
{
if (processes[i].remainingTime == processes[i].burstTime)
{
processes[i].startTime = currentTime;
}
if (processes[i].remainingTime <= quantum)
{
currentTime += processes[i].remainingTime;
processes[i].completionTime = currentTime;
processes[i].remainingTime = 0;
remainingProcesses--;
}
else
{
currentTime += quantum;
processes[i].remainingTime -= quantum;
}
}
if (remainingProcesses == 0)
{
break;
}
}
for (auto &p : processes)
{
p.waitingTime = p.completionTime - p.arrivalTime - p.burstTime;
p.responseTime = p.completionTime - p.arrivalTime;
totalResponseTime += p.responseTime;
totalWaitingTime += p.waitingTime;
}
cout << "\n------ Round Robin Scheduling ------\n";
cout << "Process\t\tArrival\t\tBurst\t\tWaiting\t\tResponse\t\n";
for (const auto &p : processes)
{
cout << p.name << "\t\t" << p.arrivalTime << "\t\t" << p.burstTime << "\t\t" << p.waitingTime << "\t\t" << p.responseTime << "\t\t\n";
}
cout << "Average Waiting Time: " << totalWaitingTime / processes.size() << "\n";
cout << "Average Response Time: " << totalResponseTime / processes.size() << "\n";
}
int main()
{
int n, quantum;
vector<Process> processes;
cout << "Enter quantum time (ms): ";
cin >> quantum;
cout << "Enter number of processes: ";
cin >> n;
// vector<Process> processes = {
// {"P1", 0, 8, 0, 0},
// {"P2", 0, 4, 0, 0},
// {"P3", 0, 9, 0, 0},
// {"P4", 0, 5, 0, 0}};
for (int i = 0; i < n; ++i)
{
Process p;
cout << "Enter name of process " << i + 1 << ": ";
cin >> p.name;
cout << "Enter arrival time of " << p.name << ": ";
cin >> p.arrivalTime;
cout << "Enter burst time of " << p.name << ": ";
cin >> p.burstTime;
p.remainingTime = p.burstTime;
processes.push_back(p);
}
roundRobin(processes, quantum);
return 0;
}