Scheduling Algorithms Implementation Lab Assignment # 2: Operating Systems
Scheduling Algorithms Implementation Lab Assignment # 2: Operating Systems
Lab Assignment # 2
Operating Systems
#include <iostream>
#include <string>
float avgWaitingTime;
float avgTurnAroundTime;
int INT_MAX = 2147483647;
struct Process{
int pid;
int burstTime;
int arrivalTime;
int priority;
int waitingTime = 0;
int turnAroundTime = 0;
int remainingTime = burstTime;
};
//Waiting time and turn around time are calculated inside the funtion.
void shortestJobFirstPreemptive(Process* processes, int totalProcesses){
cout << "Shortest Job First Preemptive Running" << endl;
//Waiting time
for(int i = 0 ; i < totalProcesses ; i++){
if(processes[i].arrivalTime <= time && i > shortestIncompleteProcessIndex){
processes[i].waitingTime++;
}
}
time++;
if(processes[shortestIncompleteProcessIndex].remainingTime > 0){
processes[shortestIncompleteProcessIndex].remainingTime--;
}else{
processesCompleted++;
shortestIncompleteProcessIndex++;
}
//Waiting and turn around time are calculated inside the function
void priorityBasedSchedulingPreemptive(Process* processes, int totalProcesses){
cout << "Priority Based Scheduling Preemptive Running" << endl;
//Waiting time
for(int i = 0 ; i < totalProcesses ; i++){
if(processes[i].arrivalTime <= time && i > highestPriorityIncompleteProcessIndex){
processes[i].waitingTime++;
}
}
//Increment Time
time++;
if(processes[highestPriorityIncompleteProcessIndex].remainingTime > 0){
processes[highestPriorityIncompleteProcessIndex].remainingTime--;
}else{
processesCompleted++;
highestPriorityIncompleteProcessIndex++;
}
int main() {
cout << "Enter number of processes: ";
int totalProcesses;
cin >> totalProcesses;
Process* processes = takeProcesses(totalProcesses);
firstComeFirstServe(processes, totalProcesses);
cout << "********** First Come First Serve **********" << endl;
calculateAvgWaitingTimeAndAvgTurnArounTime(processes, totalProcesses);
showTable(processes, totalProcesses);
cout << "Average Waiting Time: " << avgWaitingTime << endl;
cout << "Average Turn Around Time: " << avgTurnAroundTime << endl << endl;
setWaitingTurnAroundAndRemainingTimeToOfAllProcesseToZero(processes, totalProcesses);
shortestJobFirstNonPreemptive(processes, totalProcesses);
cout << "********** Shortest Job First Non Preemptive **********" << endl;
calculateAvgWaitingTimeAndAvgTurnArounTime(processes, totalProcesses);
showTable(processes, totalProcesses);
cout << "Average Waiting Time: " << avgWaitingTime << endl;
cout << "Average Turn Around Time: " << avgTurnAroundTime << endl << endl;
setWaitingTurnAroundAndRemainingTimeToOfAllProcesseToZero(processes, totalProcesses);
setWaitingTurnAroundAndRemainingTimeToOfAllProcesseToZero(processes, totalProcesses);
//
priorityBasedSchedulingNonPreemptive(processes, totalProcesses);
cout << "********** Priority Based Scheduling Non Preemptive **********" << endl;
calculateAvgWaitingTimeAndAvgTurnArounTime(processes, totalProcesses);
showTable(processes, totalProcesses);
cout << "Average Waiting Time: " << avgWaitingTime << endl;
cout << "Average Turn Around Time: " << avgTurnAroundTime << endl << endl;
setWaitingTurnAroundAndRemainingTimeToOfAllProcesseToZero(processes, totalProcesses);
setWaitingTurnAroundAndRemainingTimeToOfAllProcesseToZero(processes, totalProcesses);
return 0;
}