1
0
UAHCode/CPE435/Lab7/round_Robin.cpp

150 lines
4.1 KiB
C++
Raw Permalink Normal View History

2022-08-28 21:12:16 +00:00
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <stdbool.h>
#include <unistd.h>
using namespace std;
int numProcesses;
struct process{
int pid; //Process ID
int burst_time; //CPU Burst Time
int working_time; //Time this process executed, if working_time==burst_time, process is complete
int t_round; //turn around time, time needed for the process to complete
};
void findWaitingTime(int processes[], int n,
int bt[], int wt[], int quantum);
void findTurnAroundTime(int processes[], int n,
int bt[], int wt[], int tat[])
{
// calculating turnaround time by adding
// bt[i] + wt[i]
for (int i = 0; i < n ; i++)
tat[i] = bt[i] + wt[i];
}
void findavgTime(int processes[], int n, int bt[],
int quantum)
{
int wt[n], tat[n], total_wt = 0, total_tat = 0;
// Function to find waiting time of all processes
findWaitingTime(processes, n, bt, wt, quantum);
// Function to find turn around time for all processes
findTurnAroundTime(processes, n, bt, wt, tat);
// Display processes along with all details
cout << "Processes "<< " Burst time "
<< " Waiting time " << " Turn around time\n";
// Calculate total waiting time and total turn
// around time
for (int i=0; i<n; i++)
{
total_wt = total_wt + wt[i];
total_tat = total_tat + tat[i];
cout << " " << i+1 << "\t\t" << bt[i] <<"\t "
<< wt[i] <<"\t\t " << tat[i] <<endl;
}
cout << "Average waiting time = "
<< (int)total_wt / (int)n;
cout << "\nAverage turn around time = "
<< (int)total_tat / (int)n;
cout << endl;
}
int main()
{
struct process pr[numProcesses];
int quantumTime;
cout << "Enter the number of processes: ";
cin >> numProcesses;
cout << "\nEnter Quantum Time (ms): ";
cin >> quantumTime;
for(int i=0; i<numProcesses; i++)
{
cout << "\nEnter PID for process " << i+1 << " (ms): ";
cin >> pr[i].pid;
cout << "\nEnter Burst Time for process " << i+1 << " (ms): ";
cin >> pr[i].burst_time;
}
// int x = sizeof pr->pid / sizeof pr[0].pid;
findavgTime(&pr->pid, numProcesses, &pr->burst_time, quantumTime);
}
void findWaitingTime(int processes[], int n,
int bt[], int wt[], int quantum)
{
// Make a copy of burst times bt[] to store remaining
// burst times.
int rem_bt[n];
for (int i = 0 ; i < n ; i++)
rem_bt[i] = bt[i];
int t = 0; // Current time
// Keep traversing processes in round robin manner
// until all of them are not done.
while (1)
{
bool done = true;
// Traverse all processes one by one repeatedly
for (int i = 0 ; i < n; i++)
{
// If burst time of a process is greater than 0
// then only need to process further
if (rem_bt[i] > 0)
{
done = false; // There is a pending process
if (rem_bt[i] > quantum)
{
// Increase the value of t i.e. shows
// how much time a process has been processed
t += quantum;
// Decrease the burst_time of current process
// by quantum
rem_bt[i] -= quantum;
}
// If burst time is smaller than or equal to
// quantum. Last cycle for this process
else
{
// Increase the value of t i.e. shows
// how much time a process has been processed
t = t + rem_bt[i];
// Waiting time is current time minus time
// used by this process
wt[i] = t - bt[i];
// As the process gets fully executed
// make its remaining burst time = 0
rem_bt[i] = 0;
}
}
}
// If all processes are done
if (done == true)
break;
}
}