# Longest Remaining Time First (LRTF) or Preemptive Longest Job First CPU Scheduling Algorithm

**Longest Remaining Time First (LRTF)** is a preemptive version of Longest Job First (LJF) scheduling algorithm. In this scheduling algorithm, we find the process with the maximum remaining time and then process it, i.e. check for the maximum remaining time after some interval of time(say 1 unit each) to check if another process having more Burst Time arrived up to that time.

**Characteristics of Longest Remaining Time First (LRTF) **

- Among all the processes waiting in a waiting queue, CPU is always assigned to the process having largest burst time.
- If two processes have the same burst time then the tie is broken using FCFS i.e. the process that arrived first is processed first.
- LJF CPU Scheduling can be of both preemptive and non-preemptive type.

**Advantages of Longest Remaining Time First (LRTF) **

- No other process can execute until the longest job or process executes completely.
- All the jobs or processes finishes at the same time approximately.

**Disadvantages of Longest Remaining Time First (LRTF) **

- This algorithm gives very high average waiting time and average turn-around time for a given set of processes.
- This may lead to convoy effect.
- It may happen that a short process may never get executed and the system keeps on executing the longer processes.
- It reduces the processing speed and thus reduces the efficiency and utilization of the system.

**Longest Remaining Time First (LRTF) CPU Scheduling Algorithm**

**Step-1:**First, sort the processes in increasing order of their Arrival Time.**Step-2:**Choose the process having least arrival time but with most Burst Time.**Step-3**: Then process it for 1 unit. Check if any other process arrives upto that time of execution or not.**Step-4:**Repeat the above both steps until execute all the processes.

## Examples to show working of Preemptive Longest Job First CPU Scheduling Algorithm:

**Example-1:** Consider the following table of arrival time and burst time for four processes P1, P2, P3 and P4.

Processes | Arrival time | Burst Time |
---|---|---|

P1 | 1 ms | 2 ms |

P2 | 2 ms | 4 ms |

P3 | 3 ms | 6 ms |

P4 | 4 ms | 8 ms |

**The Longest Remaining Time First CPU Scheduling Algorithm will work on the basis of steps as mentioned below:**

**At time = 1, **

- Available Process : P1. So, select P1 and execute 1 ms.

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

1-2ms | P1 | 1ms | 1ms | 2ms | 1ms |

**At time = 2, **

- Available Process : P1, P2.
- So, select P2 and execute 1 ms (since B.T(P1) = 1 which is less than B.T(P2) = 4)

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

2-3ms | P1 | 1ms | P1 | 0ms | 1ms | 1ms |

P2 | 2ms | 1ms | 4ms | 3ms |

**At time = 3,**

- Available Process : P1, P2, P3.
- So, select P3 and execute 1 ms (since, B.T(P1) = 1 , B.T(P2) = 3 , B.T(P3) = 6).

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

3-4ms | P1 | 1ms | P1, P2 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 1ms | 6ms | 5ms |

**At time = 4,**

- Available processes: P1, P2, P3, P4.
- So, select P4 (as burst time of P4 is largest) and execute 1 ms (since, B.T(P1) = 1 , B.T(P2) = 3 , B.T(P3) = 6, B.T(P4) = 8).

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

4-5ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 0ms | 5ms | 5ms | ||

P4 | 4ms | 1ms | 8ms | 7ms |

**At time = 5,**

- Available processes: P1, P2, P3, P4,
- Process P4 will continue its execution as no other process has burst time larger than the Process P4

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

5-7ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 0ms | 5ms | 5ms | ||

P4 | 4ms | 2ms | 7ms | 5ms |

**At time = 7,**

- The processes P3 and P4 have same remaining burst time,
- hence If two processes have the same burst time then the tie is broken using FCFS i.e. the process that arrived first is processed first.
- Therefore P3 will get executed for 1ms

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

7-8ms | P1 | 1ms | P1, P2, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 1ms | 5ms | 4ms | ||

P4 | 4ms | 0ms | 7ms | 5ms |

**At time = 8,**

- Available processes: P1, P2, P3, P4,
- Process P4 will again continue its execution as no other process has burst time larger than the Process P4

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

8-9ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 0ms | 4ms | 4ms | ||

P4 | 4ms | 1ms | 5ms | 4ms |

**At time = 9,**

- Available processes: P1, P2, P3, P4,
- Process P3 continue its execution on the basis of FCFS rule.

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

9-10ms | P1 | 1ms | P1, P2, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 1ms | 4ms | 3ms | ||

P4 | 4ms | 0ms | 4ms | 4ms |

**At time = 10,**

- Available processes: P1, P2, P3, P4,
- Now again the burst time of P4 is largest, thus it will execute further.

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

10-11ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 0ms | 3ms | 3ms | ||

P4 | 4ms | 1ms | 4ms | 3ms |

**At time = 11,**

- Available processes: P1, P2, P3, P4,
- Process P2 will continue its execution as the burst time of P2, P3, P4 is same
- Thus, in this case the further execution will be decided on the basis of FCFS i.e. the process that arrived first is processed first.

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

11-12ms | P1 | 1ms | P1, P3, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 1ms | 3ms | 2ms | ||

P3 | 3ms | 0ms | 3ms | 3ms | ||

P4 | 4ms | 0ms | 3ms | 3ms |

**At time = 12, **

- Available processes: P1, P2, P3, P4,
- Process P3 continue its execution on the basis of above explanation.

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

12-13ms | P1 | 1ms | P1, P2, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 2ms | 2ms | ||

P3 | 3ms | 1ms | 3ms | 2ms | ||

P4 | 4ms | 0ms | 3ms | 3ms |

**At time = 13,**

- Available processes: P1, P2, P3, P4,
- Now again the burst time of P4 is largest, thus it will execute further.

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

13-14ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 2ms | 2ms | ||

P3 | 3ms | 0ms | 2ms | 2ms | ||

P4 | 4ms | 1ms | 3ms | 2ms |

**At time = 14,**

- Available processes: P1, P2, P3, P4
- Now, the process P2 will again begin to execute first among all

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

14-15ms | P1 | 1ms | P1, P3, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 1ms | 2ms | 1ms | ||

P3 | 3ms | 0ms | 2ms | 2ms | ||

P4 | 4ms | 0ms | 2ms | 2ms |

**At time = 15,**

- Available processes: P1, P2, P3, P4, now P3 will execute

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

15-16ms | P1 | 1ms | P1, P2, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 1ms | 1ms | ||

P3 | 3ms | 1ms | 2ms | 1ms | ||

P4 | 4ms | 0ms | 2ms | 2ms |

**At time = 16,**

- Available processes: P1, P2, P3, P4,
- here, P4 will execute as it has the largest Burst time among all

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

16-17ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 1ms | 1ms | ||

P3 | 3ms | 0ms | 1ms | 1ms | ||

P4 | 4ms | 1ms | 2ms | 1ms |

**At time = 17,**

- Available processes: P1, P2, P3, P4,
- Process P1 will execute here on the basis of above explanation

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

17-18ms | P1 | 1ms | P2, P3, P4 | 1ms | 1ms | 0ms |

P2 | 2ms | 0ms | 1ms | 1ms | ||

P3 | 3ms | 0ms | 1ms | 1ms | ||

P4 | 4ms | 0ms | 1ms | 1ms |

**At time = 18,**

- Available processes: P2, P3, P4,
- Process P2 will execute.

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

18-19ms | P2 | 2ms | P3, P4 | 1ms | 1ms | 0ms |

P3 | 3ms | 0ms | 1ms | 1ms | ||

P4 | 4ms | 0ms | 1ms | 1ms |

**At time = 19,**

- Available processes: P3, P4,
- Process P3 will execute.

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

19-20ms | P3 | 3ms | P4 | 1ms | 1ms | 0ms |

P4 | 4ms | 0ms | 1ms | 1ms |

**At time = 20,**

- Process P4 will execute at the end.

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

20-21ms | P4 | 4ms | 1ms | 1ms | 0ms |

**At time = 22,**

- Process P4 will finish its execution.

The **overall execution of the processes** will be as shown below

Time Instance | Process | Arrival Time | Waiting Table | Execution Time | Initial Burst Time | Remaining Burst Time |
---|---|---|---|---|---|---|

1-2ms | P1 | 1ms | 1ms | 2ms | 1ms | |

2-3ms | P1 | 1ms | P1 | 0ms | 1ms | 1ms |

P2 | 2ms | 1ms | 4ms | 3ms | ||

3-4ms | P1 | 1ms | P1, P2 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 1ms | 6ms | 5ms | ||

4-5ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 0ms | 5ms | 5ms | ||

P4 | 4ms | 1ms | 8ms | 7ms | ||

5-7ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 0ms | 5ms | 5ms | ||

P4 | 4ms | 2ms | 7ms | 5ms | ||

7-8ms | P1 | 1ms | P1, P2, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 1ms | 5ms | 4ms | ||

P4 | 4ms | 0ms | 7ms | 5ms | ||

8-9ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 0ms | 4ms | 4ms | ||

P4 | 4ms | 1ms | 5ms | 4ms | ||

9-10ms | P1 | 1ms | P1, P2, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 1ms | 4ms | 3ms | ||

P4 | 4ms | 0ms | 4ms | 4ms | ||

10-11ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 3ms | 3ms | ||

P3 | 3ms | 0ms | 3ms | 3ms | ||

P4 | 4ms | 1ms | 4ms | 3ms | ||

11-12ms | P1 | 1ms | P1, P3, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 1ms | 3ms | 2ms | ||

P3 | 3ms | 0ms | 3ms | 3ms | ||

P4 | 4ms | 0ms | 3ms | 3ms | ||

12-13ms | P1 | 1ms | P1, P2, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 2ms | 2ms | ||

P3 | 3ms | 1ms | 3ms | 2ms | ||

P4 | 4ms | 0ms | 3ms | 3ms | ||

13-14ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 2ms | 2ms | ||

P3 | 3ms | 0ms | 2ms | 2ms | ||

P4 | 4ms | 1ms | 3ms | 2ms | ||

14-15ms | P1 | 1ms | P1, P3, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 1ms | 2ms | 1ms | ||

P3 | 3ms | 0ms | 2ms | 2ms | ||

P4 | 4ms | 0ms | 2ms | 2ms | ||

15-16ms | P1 | 1ms | P1, P2, P4 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 1ms | 1ms | ||

P3 | 3ms | 1ms | 2ms | 1ms | ||

P4 | 4ms | 0ms | 2ms | 2ms | ||

16-17ms | P1 | 1ms | P1, P2, P3 | 0ms | 1ms | 1ms |

P2 | 2ms | 0ms | 1ms | 1ms | ||

P3 | 3ms | 0ms | 1ms | 1ms | ||

P4 | 4ms | 1ms | 2ms | 1ms | ||

17-18ms | P1 | 1ms | P2, P3, P4 | 1ms | 1ms | 0ms |

P2 | 2ms | 0ms | 1ms | 1ms | ||

P3 | 3ms | 0ms | 1ms | 1ms | ||

P4 | 4ms | 0ms | 1ms | 1ms | ||

18-19ms | P2 | 2ms | P3, P4 | 1ms | 1ms | 0ms |

P3 | 3ms | 0ms | 1ms | 1ms | ||

P4 | 4ms | 0ms | 1ms | 1ms | ||

19-20ms | P3 | 3ms | P4 | 1ms | 1ms | 0ms |

P4 | 4ms | 0ms | 1ms | 1ms | ||

20-21ms | P4 | 4ms | 1ms | 1ms | 0ms |

**Note:** CPU will be idle for 0 to 1 unit time since there is no process available in the given interval.

**Gantt chart** will be as following below:

Since, completion time (C.T) can be directly determined by Gantt chart, and

Turn Around Time (TAT)

= (Complition Time) – (Arrival Time)Also,

Waiting Time (WT)

= (Turn Around Time) – (Burst Time)

Therefore, final table look like,

Total Turn Around Time = 68 ms

So,Average Turn Around Time= 68/4 = 17.00 msAnd, Total Waiting Time = 48 ms

SoAverage Waiting Time= 48/4 = 12.00 ms

**Example-2:** Consider the following table of arrival time and burst time for four processes P1, P2, P3,P4 and P5.

Processes | Arrival Time | Burst Time |
---|---|---|

P1 | 0ms | 2ms |

P2 | 0ms | 3ms |

P3 | 2ms | 2ms |

P4 | 3ms | 5ms |

P5 | 4ms | 4ms |

Similarly example-1, Gantt chart for this example,

Since, complietion time (CT) can be directly determined by Gantt chart, and

Turn Around Time (TAT)

= (Complition Time) – (Arrival Time)Also,

Waiting Time (WT)

= (Turn Around Time) – (Burst Time)

Therefore, final table look like,

Total Turn Around Time = 61 ms

So,Average Turn Around Time= 61/5 = 12.20 msAnd, Total Waiting Time = 45 ms

So,Average Waiting Time= 45/5 = 9.00 ms