-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpriority_nonpreemptive.cpp
More file actions
99 lines (84 loc) · 3.58 KB
/
priority_nonpreemptive.cpp
File metadata and controls
99 lines (84 loc) · 3.58 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
#include <iostream>
#include <vector>
#include <algorithm>
int tbt=0;
struct Process {
int id;
int arrivalTime;
int burstTime;
int tempBT;
int priority;
int startTime;
int completionTime;
int waitingTime;
int turnaroundTime;
bool completed;
Process(int id, int arrivalTime, int burstTime, int priority)
: id(id), arrivalTime(arrivalTime), burstTime(burstTime),
tempBT(burstTime), priority(priority), startTime(0),
completionTime(0), waitingTime(0), turnaroundTime(0),
completed(false) {}
};
bool compareProcesses(const Process& p1, const Process& p2) {
if (p1.arrivalTime < p2.arrivalTime)
return true;
else if (p1.arrivalTime == p2.arrivalTime && p1.priority < p2.priority)
return true;
return false;
}
int main() {
std::vector<Process> processes;
int n;
std::cout << "Enter the number of processes: ";
std::cin >> n;
std::cout << "Enter Arrival, Burst, Priority:\n";
for (int i = 0; i < n; ++i) {
std::cout << "For process " << (i + 1) << ":\n";
int arrivalTime, burstTime, priority;
std::cin >> arrivalTime >> burstTime >> priority;
tbt+=burstTime;
// Process process(i + 1, arrivalTime, burstTime, priority);
processes.push_back( Process(i + 1, arrivalTime, burstTime, priority));
}
std::sort(processes.begin(), processes.end(), compareProcesses);
int currentTime = 0;
int completedProcesses = 0;
while (completedProcesses < n) {
Process* selectedProcess = nullptr;
int highestPriority = INT_MAX;
for (Process& process : processes) {
if (process.arrivalTime <= currentTime && !process.completed &&
process.priority < highestPriority) {
highestPriority = process.priority;
selectedProcess = &process;
}
}
if (selectedProcess == nullptr) {
currentTime++;
continue;
}
selectedProcess->startTime = currentTime;
selectedProcess->completionTime = selectedProcess->startTime +
selectedProcess->burstTime;
currentTime += selectedProcess->burstTime;
selectedProcess->turnaroundTime =
selectedProcess->completionTime - selectedProcess->arrivalTime;
selectedProcess->waitingTime =
selectedProcess->turnaroundTime - selectedProcess->burstTime;
selectedProcess->completed = true;
completedProcesses++;
}
int averageWaitingTime = 0, averageTurnaroundTime = 0;
std::cout << "\nProcess\t\tArrival\t\tBurst\t\tPriority\t\tStart\t\tCompletion\t\tWaiting\t\tTurnaround\n";
std::cout << "--------------------------------------------------------------------------------------------------------------------\n";
for (const Process& process : processes) {
averageTurnaroundTime += process.turnaroundTime;
averageWaitingTime += process.waitingTime;
std::cout << process.id << "\t\t" << process.arrivalTime << "\t\t" << process.tempBT << "\t\t" << process.priority << "\t\t"
<< process.startTime << "\t\t" << process.completionTime << "\t\t\t" << process.waitingTime << "\t\t\t" << process.turnaroundTime << "\n";
}
std::cout << "Average Waiting Time: " << (float)averageWaitingTime/n << "\n";
std::cout << "Average Turnaround Time: "<<(float)averageTurnaroundTime/n << "\n";
std::cout<<"Throughput:"<<(float)n/tbt;
return 0;
}