Program for Shortest Job First ( SJF ) scheduling | Set 2 ( Preemptive ) | Javascript program to implement Shortest Remaining Time First Shortest Remaining Time First ( SRTF ) ; this . pid = pid ; Process ID this . bt = bt ; Burst Time this . art = art ; Arrival Time ; Method to find the waiting time for all processes ; Copy the burst time into rt [ ] ; Process until all processes gets completed ; Find process with minimum remaining time among the processes that arrives till the current time ` ; Reduce remaining time by one ; Update minimum ; If a process gets completely executed ; Increment complete ; Find finish time of current process ; Calculate waiting time ; Increment time ; Method to calculate turn around time ; calculating turnaround time by adding bt [ i ] + wt [ i ] ; Method to calculate average time ; Function to find waiting time of all processes ; Function to find turn around time for all processes ; Display processes along with all details ; Calculate total waiting time and total turnaround time ; Driver Method
class Process { constructor ( pid , bt , art ) { } } function findWaitingTime ( proc , n , wt ) { let rt = new Array ( n ) ; for ( let i = 0 ; i < n ; i ++ ) rt [ i ] = proc [ i ] . bt ; let complete = 0 , t = 0 , minm = Number . MAX_VALUE ; let shortest = 0 , finish_time ; let check = false ; while ( complete != n ) { for ( let 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 = Number . 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 ++ ; } } function findTurnAroundTime ( proc , n , wt , tat ) { for ( let i = 0 ; i < n ; i ++ ) tat [ i ] = proc [ i ] . bt + wt [ i ] ; } function findavgTime ( proc , n ) { let wt = new Array ( n ) , tat = new Array ( n ) ; let total_wt = 0 , total_tat = 0 ; findWaitingTime ( proc , n , wt ) ; findTurnAroundTime ( proc , n , wt , tat ) ; document . write ( " " + " " + " " + " " ) ; for ( let i = 0 ; i < n ; i ++ ) { total_wt = total_wt + wt [ i ] ; total_tat = total_tat + tat [ i ] ; document . write ( " " + proc [ i ] . pid + " " + proc [ i ] . bt + " " + wt [ i ] + " " + tat [ i ] + " " ) ; } document . write ( " " + total_wt / n + " " ) ; document . write ( " " + total_tat / n + " " ) ; } let 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 ) ;