create a round robin (TQ: 3) using linked list in C++ compute the overall wait t
ID: 3603653 • Letter: C
Question
create a round robin (TQ: 3) using linked list in C++ compute the overall wait time, response time, and turnaround time of EACH process P1 {4,24,5,73,3,31,5,27,4,33,6,43,4,64,5,19,2} P2 {18,31,19,35,11,42,18,43,19,47,18,43,17,51,19,32,10} P3 {6,18,4,21,7,19,4,16,5,29,7,21,8,22,6,24,5} P4 {17,42,19,55,20,54,17,52,15,67,12,72,15,66,14} P5 {5,81,4,82,5,71,3,61,5,62,4,51,3,77,4,61,3,42,5} P6 {10,35,12,41,14,33,11,32,15,41,13,29,11} P7
create a round robin (TQ: 3) using linked list in C++
compute the overall wait time, response time, and turnaround time of each process
P1 {4,24,5,73,3,31,5,27,4,33,6,43,4,64,5,19,2}
P2 {18,31,19,35,11,42,18,43,19,47,18,43,17,51,19,32,10}
P3 {6,18,4,21,7,19,4,16,5,29,7,21,8,22,6,24,5}
P4 {17,42,19,55,20,54,17,52,15,67,12,72,15,66,14}
P5 {5,81,4,82,5,71,3,61,5,62,4,51,3,77,4,61,3,42,5}
P6 {10,35,12,41,14,33,11,32,15,41,13,29,11}
P7 {21,51,23,53,24,61,22,31,21,43,20}
P8 {11,52,14,42,15,31,17,21,16,43,12,31,13,32,15}
the processes follow {CPU, IO, CPU, IO, ...}
output should look like this
Now Running: P1
Ready Queue: Process Burst
P2. 18
P3. 6
P4. 17
P5. 5
P6. 10
P7. 21
P8. 11
Now In I/O: Process Remaining time
[empty]
Current Time: 4
Now running: P2
Ready queue: Process Burst
P3. 6
P4. 17
P5. 5
P6 10
P7 21
P8 11
Now in I/O:
Process Remaining time
P1. 24
{21,51,23,53,24,61,22,31,21,43,20} P8 {11,52,14,42,15,31,17,21,16,43,12,31,13,32,15} the processes follow {CPU, IO, CPU, IO, ...} output should look like this Now Running: P1 Ready Queue: Process Burst P2. 18 P3. 6 P4. 17 P5. 5 P6. 10 P7. 21 P8. 11 Now In I/O: Process Remaining time [empty] Current Time: 4 Now running: P2 Ready queue: Process Burst P3. 6 P4. 17 P5. 5 P6 10 P7 21 P8 11 Now in I/O: Process Remaining time P1. 24
Explanation / Answer
#include<iostream>
using namespace std;
// Function to find the waiting time for all
// processes
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;
}
}
// Function to calculate turn around time
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];
}
// Function to calculate average time
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 ";
// 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 << " " << bt[i] <<" "
<< wt[i] <<" " << tat[i] <<endl;
}
cout << "Average waiting time = "
<< (float)total_wt / (float)n;
cout << " Average turn around time = "
<< (float)total_tat / (float)n;
}
// Driver code
int main()
{
// process id's
int processes[] = { 1, 2, 3};
int n = sizeof processes / sizeof processes[0];
// Burst time of all processes
int burst_time[] = {10, 5, 8};
// Time quantum
int quantum = 2;
findavgTime(processes, n, burst_time, quantum);
return 0;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.