本文概述
到目前为止, 我们正在根据进程的到达时间对其进行调度(在FCFS调度中)。但是, SJF调度算法根据进程的突发时间来调度进程。
在SJF调度中, 准备就绪队列中可用进程列表中突发时间最短的进程将接下来进行调度。
但是, 很难预测一个线程所需的突发时间, 因此该算法很难在系统中实现。
SJF的优势
- 最大产量
- 最小平均等待和周转时间
SJF的缺点
- 可能遭受饥饿的困扰
- 由于无法预先知道进程的确切突发时间, 因此无法实施。
有多种可用的技术可以用来确定进程的CPU突发时间。我们将在后面详细讨论它们。
例子
在以下示例中, 有五个作业分别命名为P1, P2, P3, P4和P5。下表列出了它们的到达时间和爆发时间。
PID | Arrival Time | 爆发时间 | Completion Time | 周转时间 | Waiting Time |
---|---|---|---|---|---|
1 | 1 | 7 | 8 | 7 | 0 |
2 | 3 | 3 | 13 | 10 | 7 |
3 | 6 | 2 | 10 | 4 | 2 |
4 | 7 | 10 | 31 | 24 | 14 |
5 | 9 | 8 | 21 | 12 | 4 |
由于没有进程在时间0到达;从时间0到1(第一个线程到达的时间), 甘特图中将有一个空槽。
根据该算法, OS调度就绪队列中可用进程中突发时间最短的进程。
到现在为止, 就绪队列中只有一个进程, 因此调度程序会将其调度到处理器, 无论其突发时间是多少。
这将执行到8个时间单位。到那时为止, 我们还有3个以上的进程到达了就绪队列, 因此调度程序将选择突发时间最短的进程。
在表中给出的进程中, 由于P3在所有可用进程中的突发时间最短, 因此将接下来执行。
这样便可以在最短作业优先(SJF)调度算法中执行该线程。
平均等待时间= 27/5
评论前必须登录!
注册