最短作业优先:
最短作业优先 (SJF) 算法是一种 CPU 调度算法,旨在对作业重新排序,以便选择具有最小突发时间的进程进行下一次执行。它用于减少等待执行的其他进程的平均等待时间。这可以是抢占式或非抢占式。它的抢占式版本称为最短剩余时间优先(SRTF)。
当一个作业进入时,它会根据它的突发时间插入到就绪队列中。 SJF 最小化平均等待时间,因为它在为具有较大突发时间的进程提供服务之前,先为较少突发时间的进程提供服务。
使用该算法的主要优点是,它增加了平均周转时间和平均等待时间,从而提高了系统的有效性。
虽然它最大限度地减少了平均等待时间,但它可能会惩罚具有更高突发时间的进程。如果较短的执行时间进程在就绪列表中,那么具有大突发时间的进程往往会留在就绪列表中,而小进程则接收服务。在极端情况下可能会发生总是短执行时间的进程将被服务而大执行时间的进程将无限期等待。这种较长执行时间进程的饥饿是该算法的局限性。
最长的工作第一:
另一方面,最长作业优先 (LJF) 与 SJF 正好相反。它旨在对作业重新排序,以便为下一次执行选择具有最大突发时间的进程。它是一种非抢占式调度算法,一旦一个进程开始执行,它就不能在其处理之间被中断,任何其他进程只有在分配的进程完成其处理并被终止后才能执行。当一个作业进入时,它会根据它的突发时间插入到就绪队列中。这也可以是抢占式或非抢占式。
它的抢占式版本称为最长剩余时间优先(LRTF)。
该算法的主要缺点是它可能导致进程饥饿。护航效应是另一个问题,会导致吞吐量降低。因此这种算法很少使用。
Shortest Job First (SJF) | Longest Job First (LJF) |
---|---|
Short processes are executed first and then followed by longer processes. | Longer processes are executed first and then followed by shorter processes. |
The throughput is increased because more processes can be executed in less amount of time. | The throughput is decreased because less processes can be executed in a certain amount of time. |
It does not lead to convoy effect. | It might lead to the convoy effect. |
It has a smaller average turn-around time and average waiting time thus increasing the effectiveness of the system. | It has very larger average turn-around time and average waiting time. This results in slow processing and decreases the effectiveness of the system. |
考虑以下示例:
Process | Arrival Time | Burst Time |
---|---|---|
P1 | 0 | 10 |
P2 | 1 | 5 |
P3 | 2 | 8 |
P4 | 2 | 15 |
让我们尝试使用 SJF 和 LJF 进行比较研究来解决这个问题。
1. 最长的作业优先:
甘特图将如下所示:
Average waiting time (AWT),
= ((0-0) + (33-1) + (25-2) + (10-2)) / 4
= 63/4
= 15.75
Average turnaround time (ATAT),
= ((10-0) + (38-1) + (33-2) + (25-2))/4
= 101/4
= 25.25
2.(一)。最短作业优先(非抢占式):
甘特图将如下所示:
Average waiting time (AWT),
= ((0-0) + (10-1) + (15-2) + (23-2)) / 4
= 43 / 4
= 10.75
Average turnaround time (ATAT),
= ((10-0) + (15-1) + (23-2) + (38-2)) / 4
= 81 / 4
= 20.25
2.(b)。最短作业优先(抢占式):
甘特图将如下所示:
Average waiting time (AWT),
= ((0-0) + (1-1) + (6-2) + (23-2)) / 4
= 25 / 4
= 6.25
Average turnaround time (ATAT),
= ((23-0) + (6-1) + (14-2) + (38-2)) / 4
= 76 / 4
= 19
从上面的例子可以看出,SJF 算法比 LJF 算法更有效。