-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFCFS.cpp
67 lines (57 loc) · 1.8 KB
/
FCFS.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
60
61
#include"FCFS.h"
void FCFS_Scheduler(const vector<Process>& v, ll insTime, ll ioTime)
{
map<ll, processMetaData>procData;
ll mx=0;
for (auto& i : v) {
procData[i.pId].arrival = i.readyTime;
mx=max(mx,i.readyTime);
procData[i.pId].firstTun=mx;
ll numberofioI=i.IOPercent * i.numberOfInstructions / 100;
ll z=ioTime*numberofioI+(i.numberOfInstructions-numberofioI)*insTime;
print(mx,mx+z,i.pId,1,0);
mx+=z;
procData[i.pId].completion=mx;
}
metaDataDisplay(procData,v.size());
}
void SJF(const vector<Process>& v, ll insTime, ll ioTime){
priority_queue<Process, vector<Process>, SRTFcompare>APP;
priority_queue<Process, vector<Process>, SJFcompare>q2;
map<ll, processMetaData>procData;
for (auto& i : v)
{
Process c=i;
c.executionTime=c.executionTime*insTime+(c.numberOfInstructions-c.executionTime)*ioTime;
APP.push(c);
procData[i.pId].arrival = i.readyTime;
}
while (APP.size()||q2.size())
{
if(q2.size())
{
proc=q2.top();
q2.pop();
print(time,time+proc.executionTime,proc.pId,1,0);
procData[proc.pId].firstTun=time;
time+=proc.executionTime;
procData[proc.pId].completion=time;
while(APP.size()&&time>=APP.top().readyTime)
{
proc=APP.top();
APP.pop();
q2.push(proc);
}
}
else if(APP.size())
{
proc=APP.top();
APP.pop();
print(time,proc.readyTime,-1,0,0);
time=proc.readyTime;
q2.push(proc);
}
// cout<<time<<" "<<v.size()<<APP.size()<<'\n';
}
metaDataDisplay(procData,v.size());
}