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

Please answer CLEARLY and LEGIBLE. Also include a illustrated code. CS 444 Opera

ID: 3724510 • Letter: P

Question


Please answer CLEARLY and LEGIBLE. Also include a illustrated code. CS 444 Operating System 2/27/2018 Project The purpose of this project is familiarizing students with three different scheduling algorithms to run processes. The first algorithm is Round Robin by assigning time quantum to each process. At a certain point the priority algorithm takes place. In order to be fair to shortest job and prevent them from starvation, the shortest job algorithm takes place. At certain time quantum the priority algorithm task place again. Each process is given a time quantum. There will we several I/O request which would cause interrupt. Your task is to create a process. Once the process is created then it is moved to the ready queue and from ready queue moves to running phase for execution. If there is an interrupt then the process is moved to the waiting queue, in this case I/o queue, and once the I/O is handled then it is ready for execution depending on algorithm. Running Waiting Queue Process Create Process Ready Queue Terminate if process is complete /O Wait Queue VO Interrupt Each process execution begin with CPU burst followed by VO burst which is followed by another CPU burst 1. Each process can be in CPU cycle with maximum 100 time quantum or 100 time burst. If there is an I/O request then after 50 time quantum it is moved to the /O waiting queue and next process can enter to the CPU cycle based on the priority algorithm. 2. 3. A process with higher priority can't wait more than 350 time quantum at this phase. 4. Only one VO request can be completed at each time 5. If the wait time for process/processes exceeds 2500 time quantum then the remaining processes take turn to enter to the CPU cycle base on the shortest job first algorithm Once shortest job algorithm applied then each process can be in CPU cycle with maximum of s0 time quantum. If there is an l/O request then after 35 time quantum it is removed to the Vo 6.

Explanation / Answer

/ C++ program for implementation of RoundRobin scheduling
#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
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;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote