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

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;

}