I can't figure out how to show the correct diagram for this earliest deadline first algorithm. So far here is my code:
import java.util.*; class deadlineprototype { public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("enter no. of processes : "); int n=sc.nextInt(); int job[]=new int[n+1]; int burst[]=new int[n+1]; int newburst[]=new int[n+1]; int arrival[]=new int[n+1]; int deadline[]=new int[n+1]; int wt[]=new int[n+1]; int turn[]=new int[n+1]; int tot_turn=0; int tot_wait=0; float avg_turn=0; float avg_wait=0; int j; for(int m=1;m<=n;m++) { arrival[m]=m; } for(int m=1;m<=n;m++) { job[m]=m; } for(int m=1;m<=n;m++) { System.out.println("enter arrival time, burst time and deadline of process "+(m)+"(0 for none):"); arrival[m]=sc.nextInt(); burst[m]=sc.nextInt(); deadline[m]=sc.nextInt(); if (deadline[m]==0){ deadline[m]=1000; } } int temp; for(int i=1;i<n;i++) { for(j=1;j<n;j++) { if(deadline[i+1]<deadline[j]) { temp=deadline[j+1]; deadline[j+1]=deadline[j]; deadline[j]=temp; temp=job[j+1]; job[j+1]=job[j]; job[j]=temp; temp=burst[j+1]; burst[j+1]=burst[j]; burst[j]=temp; } } } turn[1]=burst[1]; for(int i=2;i<=n;i++) { turn[i]=burst[i]+turn[i-1]; wt[i]=turn[i]-burst[i]; } for(int i=1;i<=n;i++) { tot_turn+=(wt[i]+burst[i])-arrival[i]; avg_turn=(float)tot_turn/n; tot_wait+=wt[i]-arrival[i]; avg_wait=(float)tot_wait/n; } System.out.println("----------Earliest Deadline Scheduling Diagram----------"); for(int m=1;m<=n;m++) { if(deadline[m]==1000){ deadline[m]=0; } if(wt[m]==0){ System.out.println("0"+wt[m]+" _____"); } else{ System.out.println(wt[m]+" _____"); } System.out.println(" | |"); System.out.println(" |job "+job[m]+"|"); System.out.println(" |_____|"); try { //newburst[m]=(burst[m]*1000); Thread.sleep(1000); }catch (InterruptedException ie) { System.out.println(ie.getMessage()); } } System.out.println((wt[wt.length-1]+burst[burst.length-1]));
If I input 2 processes this will be the output:
enter no. of processes : 2 enter arrival time, burst time and deadline of process 1(0 for none): 0 17 0 enter arrival time, burst time and deadline of process 2(0 for none): 0 13 10 ----------Earliest Deadline Scheduling Diagram---------- 00 _____ | | |job 2| |_____| 13 _____ | | |job 1| |_____| 30
It shows the correct intended output. But for 3 processes like this then it will output:
It shows an incorrect output, that job 1 should come after job 2 and instead of job 3. But then again if I input 5 process it will show correct output again:enter no. of processes : 3 enter arrival time, burst time and deadline of process 1(0 for none): 0 17 0 enter arrival time, burst time and deadline of process 2(0 for none): 0 13 10 enter arrival time, burst time and deadline of process 3(0 for none): 25 14 20 ----------Earliest Deadline Scheduling Diagram---------- 00 _____ | | |job 2| |_____| 13 _____ | | |job 3| |_____| 27 _____ | | |job 1| |_____| 44
And now I wonder what codes is causing the program to show incorrect input. Please help with this problem thanks in advance!enter no. of processes : 5 enter arrival time, burst time and deadline of process 1(0 for none): 0 17 0 enter arrival time, burst time and deadline of process 2(0 for none): 0 13 10 enter arrival time, burst time and deadline of process 3(0 for none): 25 14 20 enter arrival time, burst time and deadline of process 4(0 for none): 25 10 15 enter arrival time, burst time and deadline of process 5(0 for none): 30 5 0 ----------Earliest Deadline Scheduling Diagram---------- 00 _____ | | |job 2| |_____| 13 _____ | | |job 1| |_____| 30 _____ | | |job 4| |_____| 40 _____ | | |job 3| |_____| 54 _____ | | |job 5| |_____| 59