两个简单调度算法的最优性
进程调度是操作系统里面比较关注的问题。这里主要是记一下 SRTF 调度算法的一些东西。
为了简单起见,本文假设只有一个处理器,因此每时每刻只能有一个进程在运行。并且操作系统的中的进程可以随时按照需求中断,然后切换到其它进程(上下文切换);或者是什么也不做,使处理器处于空闲状态。我们默认上下文切换的时间可以忽略不计。此外,对于进程中运行的程序,我们假设:
- 程序只会进行运算,不会有其它请求(例如读写文件)。因此每个程序在执行过程中除了退出程序外不会由其它的中断。
- 每个程序的提交时刻和所需的运行时间是已知的。
这里提交时刻是指提交给操作系统的时刻。进程提交后,操作系统要安排所有已经提交的进程的运行,完成每个进程的任务。如果一个进程在
显然如果不让处理器处于空闲状态(除非当前没有进程可以运行),那么在前面的假设下,运行完所有进程的时间是固定的。但是由于只有一个处理器,势必会让一些进程不得不等待其它进程完成运行后,自己才能被运行。因此调度算法的一个任务是要尽可能减少这种等待时间。前面提到的轮转时间就是每个进程的运行时间和等待时间之和,所以上述目标也就是要最小化所有进程的轮转时间之和。
SJF 算法
首先来考虑一个特殊情况:有
考虑将
(假设
因为
另外一种想法是考虑每个
根据排序不等式2,上式在
在上面我们其实没有考虑上下文切换这种操作,就默认每个进程一启动就一直运行到结束。实际上,在进程运行中途切换到其它进程并不能优化总轮转时间。下面一节介绍的 SRTF 将解释这个事情。
SRTF 算法
上一节的 SJF 算法假设了所有进程都在时刻
在 (a) 中,由于灰色的进程运行时间长,导致另外两个进程长时间等待,因此总轮转时间非常大。而如果采取上下文切换的机制,我们可以随时切换进程的运行,让一些运行时间短的进程优先,如上图中 (b) 的情况,这样可以减少总轮转时间。
SRTF 算法(Shortest Remaining Time First)3就是利用这一思想,在任意时刻优先运行剩余运行时间最少的进程,以期望减少总轮转时间。我们可以证明,SRTF 给出的调度方案是所有利用上下文切换的调度方案中总轮转时间最少的。在证明这个结论之前,我们首先要用尽可能简单的方法来描述调度方案。我们可以用一个二值函数
- 进程
$i$ 在时刻$t$ 已经运行的时间$f(t, i) = \int_{c_i}^t S(x, i)\mathrm{d}x$ 。 - 剩余时间
$r(t, i) = \max\{0, t_i - f(t, i)\}$ 。 - 终止时刻
$e_i = \min\left\{t\colon r(t,i) = 0 \right\}$ 。 - 时刻
$t$ 时还未完成的所有进程集合$A(t)=\{i\colon r(t,i)>0\}$ 。 - 进程
$i$ 在运行的所有时段$R(i) = \{t\colon S(t, i)=1\}$ 。
形式化地说,对于 SRTF 算法,其给出的调度方案
[^tie]:因为可能有两个进程的
上述证明最初由 Linus Schrage5 给出。后来 Donald R. Smith6 给了一个不用反证法的证明。他的证明相当于考察了整个调度过程,并且验证 SRTF 算法的每一步都是最优的。在之前的证明中,我们实际上是用一个 0/1 向量来表示某个时刻
接下来我们需要明确什么是“更优”。现在我们需要对比两个序列
现在的问题在于加入新的进程。而实际上加入新的进程后,上述两个不等式可能会不成立。例如:
这个例子满足
实际上 Smith 采用的是更加强的判据:当
时,才认为
(1)
(2)
(3)
(4)
因此加入一个新的进程后,所有不等式依然满足。
有了这一点后,后面的事情就简单了。考虑在一段
(1)
(2)
(3)
(4)
因此 SRTF 算法每次选择剩余时间最少的进程来运行确实是更优的。综合以上内容,从初始全
-
“Shortest job next,” Wikipedia, https://en.wikipedia.org/wiki/Shortest_job_next. ↩
-
“Rearrangement inequality,” Wikipedia, https://en.wikipedia.org/wiki/Rearrangement_inequality. ↩
-
“Shortest remaining time,” Wikipedia, https://en.wikipedia.org/wiki/Shortest_remaining_time. ↩
-
主要是为了避免讨论序列长度。 ↩
-
L. Schrage, “A Proof of the Optimality of the Shortest Remaining Service Time Discipline,” Opns. Res. 16, 687-690 (1968). ↩
-
Donald R. Smith, “A New Proof of the Optimality of the Shortest Remaining Processing Time Discipline,” Oper. Res, 197–199 (1978). ↩