Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Q1. Write a program in C++ to simulate the Round Robin scheduling algorithm. The

ID: 3704810 • Letter: Q

Question

Q1. Write a program in C++ to simulate the Round Robin scheduling algorithm. The program should ask the user to input the number of processes (up to 10 processes), the execution time required by each process (also called Burst Time), and the time quantum or slice for RR scheduling. The program should then calculate the following: 1. 2. 3. 4. Waiting time for each process Average waiting time Turnaround time for each process Average turnaround time Sample input/output: Enter No of Processes: 5 PI11: 14 PC21: 9 P131: 11 PI41: 3 PI51:1 Enter Time Quantun:5 Process Burrst Time 14 2 3 4 5 Average Waiting Time:20.4 Average Turn Around Tine :28 Waiting Time 23 19 27 15 18 Turnaround Tine 37 28 38 18 19

Explanation / Answer

#include<iostream>

using namespace std;

// Function to find the waiting time for all

// processes

void fWT(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 fTAT(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 favgT(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

fWT(processes, n, bt, wt, quantum);

// Function to find turn around time for all processes

fTAT(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[10];

int n = sizeof processes / sizeof processes[0];

// Burst time of all processes

int burst_time[10];

std::cout << "Enter Number of process (below 10)" << std::endl;

cin>>n;

for(int i=0; i<n; i++ ){

std::cout << "burst_time of process ="<<i+1 << std::endl;

processes[i]=i;

cin>>burst_time[i];

}

// Time quantum

int quantum = 2;

std::cout << "Enter time quantum" << std::endl;

cin>>quantum;

favgT(processes, n, burst_time, quantum);

return 0;

}

Output: