In: Computer Science
IN JAVA
Implement SJF scheduling algorithms based on following actions:
The simulation maintains the current time, t, which is initialized to 0 and is incremented after each simulation step. Each simulation step then consists of the following actions:
repeat until Rᵢ == 0 for all n processes /* repeat until all
processes have terminated */
while no process is active, increment t /* if no process is ready
to run, just advance t */
choose active processes pᵢ to run next
according to scheduling algorithm /* Ex: FIFO, SJF, SRT */
decrement Rᵢ /* pᵢ has accumulated 1 CPU time unit */
if Rᵢ == 0 /* process i has terminated */
set active flag of pᵢ = 0 /* process i is excluded from further
consideration */
TTᵢ = t - Aᵢ /* the turnaround time of process i is the time
since arrival, TTᵢ, until the current time t */
compute the average turnaround time,
ATT, by averaging all values TTᵢ
class Process
{
int
pid;
int
bt;
int
art;
public
Process(int pid,
int bt, int
art)
{
this.pid
= pid;
this.bt
= bt;
this.art
= art;
}
}
public class GFG
{
static
void findWaitingTime(Process proc[],
int n,
int
wt[])
{
int
rt[] = new
int[n];
for
(int i =
0; i < n; i++)
rt[i]
= proc[i].bt;
int
complete = 0, t =
0, minm = Integer.MAX_VALUE;
int
shortest = 0,
finish_time;
boolean
check = false;
while
(complete != n)
for
(int j =
0; j < n; j++)
{
if
((proc[j].art <= t) &&
(rt[j]
< minm) && rt[j] > 0)
{
minm
= rt[j];
shortest
= j;
check
= true;
}
}
if
(check == false) {
t++;
continue;
}
rt[shortest]--;
minm
= rt[shortest];
if
(minm == 0)
minm
= Integer.MAX_VALUE;
if
(rt[shortest] == 0) {
complete++;
check
= false;
finish_time
= t + 1;
wt[shortest]
= finish_time -
proc[shortest].bt
-
proc[shortest].art;
if
(wt[shortest] < 0)
wt[shortest]
= 0;
}
t++;
}
}
static
void findTurnAroundTime(Process proc[],
int n,
int
wt[], int tat[])
{
for
(int i =
0; i < n; i++)
tat[i]
= proc[i].bt + wt[i];
}
static
void findavgTime(Process proc[],
int n)
{
int
wt[] = new int[n],
tat[] = new
int[n];
int
total_wt = 0, total_tat =
0;
findWaitingTime(proc,
n, wt);
findTurnAroundTime(proc,
n, wt, tat);
System.out.println("Processes
" +
"
Burst time " +
"
Waiting time " +
"
Turn around time");
for
(int i =
0; i < n; i++) {
total_wt
= total_wt + wt[i];
total_tat
= total_tat + tat[i];
System.out.println("
" + proc[i].pid + "\t\t"
+
proc[i].bt + "\t\t " + wt[i]
+
"\t\t" + tat[i]);
}
System.out.println("Average
waiting time = " +
(float)total_wt
/ (float)n);
System.out.println("Average
turn around time = " +
(float)total_tat
/ (float)n);
}
public
static void main(String[]
args)
{
Process
proc[] = { new
Process(1,
6, 1),
new
Process(2,
8, 1),
new
Process(3,
7, 2),
new
Process(4,
3, 3)};
findavgTime(proc,
proc.length);
}
}