Skip to content

Commit f2ca0cf

Browse files
committed
implemented parse_processes()
1 parent f6eeacb commit f2ca0cf

File tree

3 files changed

+140
-71
lines changed

3 files changed

+140
-71
lines changed

CPU-Scheduling-Algorithms.depend

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# depslib dependency file v1.0
2-
1667920358 source:c:\users\drogo\desktop\onedrive - alexandria university\term 7\operating systems\labs\cpu-scheduling-algorithms\main.cpp
2+
1668503039 source:c:\users\drogo\desktop\onedrive - alexandria university\term 7\operating systems\labs\cpu-scheduling-algorithms\main.cpp
33
<bits/stdc++.h>
44
"parser.h"
55

66
1667920277 source:c:\users\drogo\desktop\onedrive - alexandria university\term 7\operating systems\labs\cpu-scheduling-algorithms\parser.cpp
77
<bits/stdc++.h>
88

9-
1667920346 c:\users\drogo\desktop\onedrive - alexandria university\term 7\operating systems\labs\cpu-scheduling-algorithms\parser.h
9+
1668502597 c:\users\drogo\desktop\onedrive - alexandria university\term 7\operating systems\labs\cpu-scheduling-algorithms\parser.h
1010
<bits/stdc++.h>
1111

1212
1668359983 source:c:\users\yousef\desktop\cpu-scheduling-algorithms\main.cpp

main.cpp

Lines changed: 107 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,41 @@ using namespace std;
66
/** Global Constants **/
77
const string TRACE = "trace";
88
const string SHOW_STATISTICS = "stats";
9-
const string ALGORITHMS[8] = {"","FCFS","RR","SPN","SRT","HRRN","FB-1","FB-2i"};
9+
const string ALGORITHMS[9] = {"","FCFS","RR","SPN","SRT","HRRN","FB-1","FB-2i", "AGING"};
1010

11-
bool sortByServiceTime(const tuple<string, int, int>& a,const tuple<string, int, int>& b){
11+
bool sortByServiceTime(const tuple<string, int, int>& a,const tuple<string, int, int>& b)
12+
{
1213
return (get<2>(a) < get<2>(b));
1314
}
14-
bool sortByArrivalTime(const tuple<string, int, int>& a,const tuple<string, int, int>& b){
15+
bool sortByArrivalTime(const tuple<string, int, int>& a,const tuple<string, int, int>& b)
16+
{
1517
return (get<1>(a) < get<1>(b));
1618
}
1719

18-
string getProcessName(tuple<string, int, int>& a){
20+
string getProcessName(tuple<string, int, int>& a)
21+
{
1922
return get<0>(a);
2023
}
2124

22-
int getArrivalTime(tuple<string, int, int>& a){
25+
int getArrivalTime(tuple<string, int, int>& a)
26+
{
2327
return get<1>(a);
2428
}
2529

26-
int getServiceTime(tuple<string, int, int>& a){
30+
int getServiceTime(tuple<string, int, int>& a)
31+
{
2732
return get<2>(a);
2833
}
29-
void decrementServiceTime(tuple<string, int, int>& a){
34+
void decrementServiceTime(tuple<string, int, int>& a)
35+
{
3036
get<2>(a) = get<2>(a)-1;
3137
}
3238

33-
void firstComeFirstServe(){
39+
void firstComeFirstServe()
40+
{
3441
int time=getArrivalTime(processes[0]);
35-
for(int i=0;i<processes.size();i++){
42+
for(int i=0; i<process_count; i++)
43+
{
3644
string processName = getProcessName(processes[i]);
3745
int processIndex = processToIndex[processName];
3846
int arrivalTime = getArrivalTime(processes[i]);
@@ -42,41 +50,48 @@ void firstComeFirstServe(){
4250
turnAroundTime[processIndex]= (finishTime[processIndex]-arrivalTime);
4351
normTurn[processIndex]= (turnAroundTime[processIndex]*1.0/serviceTime);
4452

45-
for(int j = time;j<finishTime[processIndex];j++)
53+
for(int j = time; j<finishTime[processIndex]; j++)
4654
timeline[j][processIndex]='*';
47-
for(int j=arrivalTime;j<time;j++)
55+
for(int j=arrivalTime; j<time; j++)
4856
timeline[j][processIndex]='.';
4957
time+=serviceTime;
5058
}
5159
}
5260

53-
void roundRobin(){
61+
void roundRobin()
62+
{
5463

5564
}
5665

57-
void shortestProcessNext(){
66+
void shortestProcessNext()
67+
{
5868
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq; //pair of service time and index
5969
int j=0;
60-
for(int i=0;i<last_instant;i++){
61-
for(;j<process_count;){
62-
if(getArrivalTime(processes[j])<=i){
70+
for(int i=0; i<last_instant; i++)
71+
{
72+
for(; j<process_count;)
73+
{
74+
if(getArrivalTime(processes[j])<=i)
75+
{
6376
pq.push(make_pair(getServiceTime(processes[j]),j));
6477
j++;
65-
}else
78+
}
79+
else
6680
break;
6781
}
68-
if(!pq.empty()){
82+
if(!pq.empty())
83+
{
6984
int processIndex = pq.top().second;
7085
int arrivalTime = getArrivalTime(processes[processIndex]);
7186
int serviceTime = getServiceTime(processes[processIndex]);
7287
pq.pop();
7388

7489
int temp = arrivalTime;
75-
for(;temp<i;temp++)
90+
for(; temp<i; temp++)
7691
timeline[temp][processIndex]='.';
7792

7893
temp = i;
79-
for(;temp<i+serviceTime;temp++)
94+
for(; temp<i+serviceTime; temp++)
8095
timeline[temp][processIndex]='*';
8196

8297
finishTime[processIndex]= (i+serviceTime);
@@ -87,108 +102,132 @@ void shortestProcessNext(){
87102
}
88103
}
89104

90-
void shortestRemainingTime(){
105+
void shortestRemainingTime()
106+
{
91107
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
92108
int j=0;
93-
for(int i=0;i<last_instant;i++){
94-
for(;j<process_count;){
95-
if(getArrivalTime(processes[j])==i){
109+
for(int i=0; i<last_instant; i++)
110+
{
111+
for(; j<process_count;)
112+
{
113+
if(getArrivalTime(processes[j])==i)
114+
{
96115
pq.push(make_pair(getServiceTime(processes[j]),j));
97116
j++;
98-
}else
117+
}
118+
else
99119
break;
100120
}
101-
if(!pq.empty()){
121+
if(!pq.empty())
122+
{
102123
int processIndex = pq.top().second;
103124
int remainingTime = pq.top().first;
104125
pq.pop();
105126
int serviceTime = getServiceTime(processes[processIndex]);
106127
int arrivalTime= getArrivalTime(processes[processIndex]);
107128
timeline[i][processIndex]= '*';
108129

109-
if(remainingTime==1){// process finished
130+
if(remainingTime==1) // process finished
131+
{
110132
finishTime[processIndex]= i+1;
111133
turnAroundTime[processIndex]= (finishTime[processIndex]-arrivalTime);
112134
normTurn[processIndex]= (turnAroundTime[processIndex]*1.0/serviceTime);
113-
}else{
135+
}
136+
else
137+
{
114138
pq.push(make_pair(remainingTime-1,processIndex));
115139
}
116140
}
117141
}
118142

119-
for(int i=0;i<process_count;i++){
143+
for(int i=0; i<process_count; i++)
144+
{
120145
int arrivalTime = getArrivalTime(processes[i]);
121-
for(int k=arrivalTime;k<finishTime[i];k++){
146+
for(int k=arrivalTime; k<finishTime[i]; k++)
147+
{
122148
if(timeline[k][i]!='*')
123149
timeline[k][i]='.';
124150
}
125151
}
126152
}
127153

128-
void highestResponseRatioNext(){
154+
void highestResponseRatioNext()
155+
{
129156

130157
}
131158

132-
void feedbackQ1(){
159+
void feedbackQ1()
160+
{
133161

134162
}
135163

136-
void feedbackQ2i(){
164+
void feedbackQ2i()
165+
{
137166

138167
}
139168

140-
void printAlgorithm(){
169+
void printAlgorithm()
170+
{
141171
cout<<ALGORITHMS[stoi(algorithms[0])]<<endl;
142172
}
143173

144-
void printProcesses(){
174+
void printProcesses()
175+
{
145176
cout<<"Process ";
146-
for(int i=0;i<process_count;i++)
177+
for(int i=0; i<process_count; i++)
147178
cout<<"| "<<getProcessName(processes[i])<<" ";
148179
cout<<"|"<<endl;
149180
}
150-
void printArrivalTime(){
181+
void printArrivalTime()
182+
{
151183
cout<<"Arrival ";
152-
for(int i=0;i<process_count;i++)
184+
for(int i=0; i<process_count; i++)
153185
cout<<"| "<<getArrivalTime(processes[i])<<" ";
154186

155187
cout<<"|"<<endl;
156188
}
157-
void printServiceTime(){
189+
void printServiceTime()
190+
{
158191
cout<<"Service ";
159-
for(int i=0;i<process_count;i++)
192+
for(int i=0; i<process_count; i++)
160193
cout<<"| "<<getServiceTime(processes[i])<<" ";
161194
cout<<"| Mean|"<<endl;
162195
}
163-
void printFinishTime(){
196+
void printFinishTime()
197+
{
164198
cout<<"Finish ";
165-
for(int i=0;i<process_count;i++)
199+
for(int i=0; i<process_count; i++)
166200
cout<<"| "<<finishTime[i]<<" ";
167201
cout<<"|-----|"<<endl;
168202
}
169-
void printTurnAroundTime(){
203+
void printTurnAroundTime()
204+
{
170205
cout<<"Turnaround ";
171206
int sum =0;
172-
for(int i=0;i<process_count;i++){
207+
for(int i=0; i<process_count; i++)
208+
{
173209
cout<<"| "<<turnAroundTime[i]<<" ";
174210
sum+=turnAroundTime[i];
175211
}
176212
cout<<fixed<<setprecision(2);
177213
cout<<"| "<<(1.0*sum/turnAroundTime.size())<<"|"<<endl;
178214
}
179215

180-
void printNormTurn(){
216+
void printNormTurn()
217+
{
181218
cout<<"NormTurn ";
182219
cout<<fixed<<setprecision(2);
183220
float sum =0;
184-
for(int i=0;i<process_count;i++){
221+
for(int i=0; i<process_count; i++)
222+
{
185223
cout<<"| "<<normTurn[i]<<" ";
186224
sum+=normTurn[i];
187225
}
188226

189227
cout<<"| "<<(1.0*sum/normTurn.size())<<"|"<<endl;
190228
}
191-
void printStats(){
229+
void printStats()
230+
{
192231
printAlgorithm();
193232
printProcesses();
194233
printArrivalTime();
@@ -198,15 +237,18 @@ void printStats(){
198237
printNormTurn();
199238
}
200239

201-
void printTimeline(){
240+
void printTimeline()
241+
{
202242
cout<<ALGORITHMS[stoi(algorithms[0])]<<" ";
203-
for(int i=0;i<=last_instant;i++)
243+
for(int i=0; i<=last_instant; i++)
204244
cout<<" "<<i%10<<" ";
205245
cout<<endl;
206246
cout<<"------------------------------------------------"<<endl;
207-
for(int i=0;i<process_count;i++){
247+
for(int i=0; i<process_count; i++)
248+
{
208249
cout<<getProcessName(processes[i])<<"\t";
209-
for(int j=0;j<last_instant;j++){
250+
for(int j=0; j<last_instant; j++)
251+
{
210252
cout<<"|"<<timeline[j][i];
211253
}
212254
cout<<"|"<<endl;
@@ -217,9 +259,21 @@ void printTimeline(){
217259

218260
int main()
219261
{
220-
freopen("input.txt","r",stdin);
262+
// freopen("input.txt","r",stdin);
221263
parse();
222-
shortestProcessNext();
264+
265+
/*
266+
cout << endl;
267+
printAlgorithm();
268+
printProcesses();
269+
printArrivalTime();
270+
printServiceTime();
271+
cout << endl;
272+
*/
273+
274+
// shortestProcessNext();
275+
firstComeFirstServe();
276+
223277
printTimeline();
224278
return 0;
225279
}

0 commit comments

Comments
 (0)