Skip to content

Commit e92ed5d

Browse files
authored
Add files via upload
1 parent 427b039 commit e92ed5d

File tree

3 files changed

+147
-2
lines changed

3 files changed

+147
-2
lines changed

boohmeed.cpp

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#include "scheduler.h"
2+
3+
int calculateTickets(process p)
4+
{
5+
int time = 0;
6+
int execution_requests = 0;
7+
int io_requests = 0;
8+
for (int j = 0; j < p.n_phases; ++j)
9+
{
10+
time += p.phases[j].first;
11+
if (p.phases[j].second == 1)
12+
{
13+
execution_requests++;
14+
}
15+
else
16+
{
17+
io_requests++;
18+
}
19+
}
20+
return time + execution_requests * 20 + io_requests * 30;
21+
}
22+
23+
void strideScheduler(int size, process processes[])
24+
{
25+
int finished_processes = 0, processor[4], WillGoToTheQ[4], i = 0, pr;
26+
memset(processor, -1, sizeof processor);
27+
memset(WillGoToTheQ, -1, sizeof WillGoToTheQ);
28+
CompareProcessstride cmp(processes);
29+
priority_queue<int, vector<int>, CompareProcessstride> waiting(cmp);
30+
for (int t = 0;; t++)
31+
{
32+
int idx_p = 0;
33+
for (idx_p = 0; idx_p < 4 && i < size && processes[i].arrive_time <= t; ++idx_p) // if processor is ideal and processes
34+
{
35+
if (processor[idx_p] == -1)
36+
{
37+
processor[idx_p] = i;
38+
processes[i].current_brust_time = processes[i].phases[processes[i].phase_idx].first;
39+
processes[i].state = processes[i].phases[processes[i].phase_idx].second;
40+
processes[i].last_processor = idx_p;
41+
i++;
42+
}
43+
}
44+
while (i < size && processes[i].arrive_time <= t) // processes arrived but there is no place at cpu so it will go in waiting queue
45+
{
46+
processes[i].state = processes[i].phases[processes[i].phase_idx].second;
47+
processes[i].current_brust_time = processes[i].phases[processes[i].phase_idx].first;
48+
waiting.push(i);
49+
i++;
50+
}
51+
for (idx_p = 0; idx_p < 4; idx_p++)
52+
{
53+
if (processor[idx_p] == -1) // means that , that processor is ideal
54+
{
55+
output[t][idx_p] = "i";
56+
if (!waiting.empty())
57+
{
58+
WillGoToTheQ[idx_p] = waiting.top();
59+
waiting.pop();
60+
}
61+
continue;
62+
}
63+
pr = processor[idx_p]; // index of the process in the processor
64+
output[t][idx_p] = processes[pr].process_name;
65+
processes[pr].time_consumed++;
66+
processes[pr].pass_value += processes[pr].stride;
67+
if (processes[pr].time_consumed == processes[pr].current_brust_time) // proceses finished exec
68+
{
69+
processes[pr].phase_idx++;
70+
processes[pr].time_consumed = 0;
71+
if (processes[pr].phase_idx < processes[pr].n_phases) // still want more ?
72+
{
73+
processes[pr].state = processes[pr].phases[processes[pr].phase_idx].second;
74+
processes[pr].current_brust_time = processes[pr].phases[processes[pr].phase_idx].first;
75+
}
76+
else // process finished
77+
{
78+
finished_processes++;
79+
processes[pr].state = 2;
80+
processes[pr].complete_time = t;
81+
processes[pr].turn_around_time = t - processes[pr].arrive_time;
82+
}
83+
if (!waiting.empty())
84+
{
85+
WillGoToTheQ[idx_p] = waiting.top();
86+
waiting.pop();
87+
}
88+
processor[idx_p] = -1;
89+
}
90+
}
91+
match_prefrences(processor, WillGoToTheQ, processes);
92+
IO_handler_bypq_stride(size, processes, waiting, finished_processes, t);
93+
94+
if (finished_processes == size)
95+
{
96+
print(t, processes, size);
97+
return;
98+
}
99+
}
100+
}

scheduler.cpp

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "scheduler.h"
22

3-
vector<vector<string>> output(N, vector<string>(4));// string V[N][4];
3+
vector<vector<string>> output(N, vector<string>(4)); // string V[N][4];
44

55
bool comparedByBurst(const process &p1, const process &p2)
66
{
@@ -24,7 +24,7 @@ void print(int endtime, process processes[], int n)
2424
cout << output[i][j] << " | ";
2525
cout << i << " ";
2626
cout << " ";
27-
this_thread::sleep_for(std::chrono::seconds(1));
27+
// this_thread::sleep_for(std::chrono::seconds(1));
2828
}
2929
cout << output[endtime][j] << "\n\n";
3030
}
@@ -175,6 +175,41 @@ void IO_handler_bypq_priority(int n, process processes[], priority_queue<int, ve
175175
}
176176
}
177177
}
178+
void IO_handler_bypq_stride(int n, process processes[], priority_queue<int, vector<int>, CompareProcessstride> &my_queue, int &finised_processes, int t)
179+
{
180+
for (int i = 0; i < n; i++)
181+
{
182+
if (processes[i].state == 0) // state IO
183+
{
184+
// cout << "IO handler " << i << "\n";
185+
processes[i].time_consumed++;
186+
if (processes[i].time_consumed == processes[i].current_brust_time) // IO Finished
187+
{
188+
processes[i].time_consumed = 0;
189+
processes[i].phase_idx++;
190+
if (processes[i].phase_idx < processes[i].n_phases)
191+
{
192+
processes[i].state = processes[i].phases[processes[i].phase_idx].second;
193+
processes[i].current_brust_time = processes[i].phases[processes[i].phase_idx].first;
194+
if (processes[i].state)
195+
{
196+
// cout << "PUSH\n";
197+
my_queue.push(i);
198+
}
199+
}
200+
else
201+
{
202+
// cout << "DONE\n";
203+
processes[i].state = 2;
204+
(finised_processes)++;
205+
processes[i].complete_time = t;
206+
processes[i].turn_around_time = t - processes[i].arrive_time;
207+
}
208+
}
209+
}
210+
}
211+
}
212+
178213
void match_prefrences(int processor[], int WillGoToTheQ[], process processes[])
179214
{
180215
// First loop: Assign processes to processors if the processor is available

scheduler.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,23 @@ struct CompareProcesspriority
4444
return data[a].priority > data[b].priority;
4545
}
4646
};
47+
struct CompareProcessstride
48+
{
49+
const process *data;
50+
CompareProcessstride(const process *d) : data(d) {}
51+
bool operator()(int a, int b) const
52+
{
53+
return data[a].pass_value > data[b].pass_value;
54+
}
55+
};
4756
bool comareByPriority(const process &p1, const process &p2); // ascending order
4857
bool comparedByBurst(const process &p1, const process &p2);
4958
void print(int endtime, process processes[], int n);
5059
void IO_handler(int n, process processes[], queue<int> &my_queue, int &finised_processes, int t);
5160
void IO_handler_MLFQ(int n, process processes[], queue<int> my_queue[], int &finised_processes, int t);
5261
void IO_handler_bypq(int n, process processes[], priority_queue<int, vector<int>, CompareProcess> &my_queue, int &finised_processes, int t);
5362
void IO_handler_bypq_priority(int n, process processes[], priority_queue<int, vector<int>, CompareProcesspriority> &my_queue, int &finised_processes, int t);
63+
void IO_handler_bypq_stride(int n, process processes[], priority_queue<int, vector<int>, CompareProcessstride> &my_queue, int &finised_processes, int t);
5464
void match_prefrences(int processor[], int WillGoToTheQ[], process processes[]);
5565

5666
void changeThePriorty(int n, process processes[]);

0 commit comments

Comments
 (0)