-
Notifications
You must be signed in to change notification settings - Fork 0
/
roundrobin.cpp
59 lines (50 loc) · 1.32 KB
/
roundrobin.cpp
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
#include "roundrobin.h"
RoundRobin::RoundRobin(int Q)
{
quantum=Q;
}
void RoundRobin::addNewProcess(Process p)
{
ReadyQueue.push_back(p);
}
Process RoundRobin::getNextProcess()
{
while(!FutureQueue.empty() && FutureQueue.first().getArrivalTime()<=currentTime)
{
ReadyQueue.push_back(FutureQueue.first());
FutureQueue.pop_front();
}
if(ReadyQueue.empty())
{
//Return NULL PROCESS
return Process();
}
return ReadyQueue.front();
}
int RoundRobin::executeCurrentProcess()
{
if(ReadyQueue.empty())
{
int tempCurrentTime=currentTime;
currentTime=FutureQueue.first().getArrivalTime();
return FutureQueue.first().getArrivalTime()-tempCurrentTime;
}
Process currentProcess = ReadyQueue.front();
ReadyQueue.pop_front();
int executionTime=std::min(quantum ,currentProcess.getRemainingTime());
currentProcess.setRemainingTime(currentProcess.getRemainingTime()-executionTime);
currentTime+=executionTime;
if(currentProcess.getRemainingTime()>0)
{
ReadyQueue.push_back(currentProcess);
}
else
{
totalWaitingTime+=currentTime-currentProcess.getArrivalTime()-currentProcess.getBurstTime();
}
return executionTime;
}
QList<Process> RoundRobin::getReadyQueue()
{
return ReadyQueue;
}