SPOS - Shortest Job First [SJF] Program
Shortest Job First Program
Code :
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class SJFScheduling {
public static int[] waitingTimeSJF(int[] burstTimes) {
int[] waitingTimes = new int[burstTimes.length];
for (int i = 0; i < burstTimes.length; i++) {
if (i == 0) {
waitingTimes[i] = 0;
continue;
}
waitingTimes[i] = waitingTimes[i-1] + burstTimes[i-1];
}
return waitingTimes;
}
public static int[] turnAroundTimeSJF(int[] burstTimes, int[] waitingTimes) {
int[] turnAroundTimes = new int[burstTimes.length];
for (int i = 0; i < burstTimes.length; i++) {
turnAroundTimes[i] = waitingTimes[i] + burstTimes[i];
}
return turnAroundTimes;
}
public static float averageWaitingTime(int[] waitingTimes) {
int totalSum = 0;
for (int waitingTime : waitingTimes) {
totalSum += waitingTime;
}
return (float) totalSum/waitingTimes.length;
}
public static int[][] sortProcesses(int[] processIDs, int[] burstTimes) {
int [][]arr = new int[burstTimes.length][2];
for (int i = 0; i < burstTimes.length; i++) {
arr[i][0] = processIDs[i];
arr[i][1] = burstTimes[i];
}
Arrays.sort(arr, Comparator.comparingInt(o -> o[1]));
return arr;
}
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.print("Enter total number of processes: ");
int totalNumProcesses = myScanner.nextInt();
int[] processIds = new int[totalNumProcesses];
int[] burstTimes = new int[totalNumProcesses];
for (int i = 0; i < totalNumProcesses; i++) {
System.out.print("Enter Process id: ");
processIds[i] = myScanner.nextInt();
System.out.print("Enter Burst Time: ");
burstTimes[i] = myScanner.nextInt();
}
int[][] arrays = sortProcesses(processIds, burstTimes);
for (int i = 0; i < burstTimes.length; i++) {
processIds[i] = arrays[i][0];
burstTimes[i] = arrays[i][1];
}
int[] waitingTimes = waitingTimeSJF(burstTimes);
int[] turnAroundTimes = turnAroundTimeSJF(burstTimes, waitingTimes);
float avgWaitingTime = averageWaitingTime(waitingTimes);
System.out.format("%4s%4s%4s%4s\n", "pid", "bt", "wt", "tat");
for (int i = 0; i < totalNumProcesses; i++) {
System.out.format("%4d%4d%4d%4d\n", processIds[i], burstTimes[i], waitingTimes[i],
turnAroundTimes[i]);
}
System.out.println("The average waiting time is: " + avgWaitingTime);
}
}
Post a Comment