In: Computer Science
can you please do this question? i need the result asap. show the output as well
Write a program that will simulate non - preemptive process scheduling algorithm:
First Come – First Serve
Your program should input the information necessary for the calculation of average turnaround time including:
The output of the program should include: starting and terminating time for each job, turnaround time for each job, average turnaround time.
Step 1: generate the input data (totally 10 jobs) and save it in the array of structure composing the arrival time, service time, termination time, turnaround time. The service time follows the uniform distribution in the range of [5, 25], and the arrival time is generated by uniform distribution in the range of [0,10] accumulated based on the previous arrival time.
Step 2: program FCFS algorithm.
Note: be careful about the situation that one job is finished while the next job is not arrived yet, so you have the idle time between them.
Step 3: output
print out one line for each job with arrival time, start time, service, termination time, turnaround time, finally average turnaround time in the last line.
// C++ program for implementation of FCFS
// scheduling with different arrival time
#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 at[])
{
int service_time[n];
service_time[0] = 0;
wt[0] = 0;
// calculating waiting time
for (int i = 1; i < n ; i++)
{
// Add burst time of previous
processes
service_time[i] = service_time[i-1]
+ bt[i-1];
// Find waiting time for current
process =
// sum - at[i]
wt[i] = service_time[i] -
at[i];
// If waiting time for a process
is in negative
// that means it is already in the
ready queue
// before CPU becomes idle so its
waiting time is 0
if (wt[i] < 0)
wt[i] = 0;
}
}
// 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 waiting and turn-around
// times.
void findavgTime(int processes[], int n, int bt[], int at[])
{
int wt[n], tat[n];
// Function to find waiting time of all
processes
findWaitingTime(processes, n, bt, wt, at);
// 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 "
<< " Arrival Time "
<< " Waiting Time " <<
" Turn-Around Time "
<< " Completion Time
\n";
int total_wt = 0, total_tat = 0;
for (int i = 0 ; i < n ; i++)
{
total_wt = total_wt + wt[i];
total_tat = total_tat +
tat[i];
int compl_time = tat[i] +
at[i];
cout << " " << i+1
<< "\t\t" << bt[i] << "\t\t"
<< at[i]
<< "\t\t" << wt[i] << "\t\t "
<< tat[i]
<< "\t\t " << compl_time << endl;
}
cout << "Average waiting time = "
<< (float)total_wt /
(float)n;
cout << "\nAverage 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[] = {5, 9, 6};
// Arrival time of all processes
int arrival_time[] = {0, 3, 6};
findavgTime(processes, n, burst_time, arrival_time);
return 0;
}
output:
Processes Burst Time Arrival Time Waiting Time Turn-Around Time Completion Time 1 5 0 0 5 5 2 9 3 2 11 14 3 6 6 8 14 20 Average waiting time = 3.33333 Average turn around time = 10