第7章 进程调度:介绍
接下来会介绍一系列的调度策略。
7.1 工作负载假设
确定工作负载是构建调度策略的关键部分。
一些不现实的假设:
- 每一个工作运行相同的时间。
- 所有的工作同时到达。
- 一旦开始,每个工作保持运行直到完成。
- 所有的工作只是用 CPU(即它们不执行 IO 操作)。
- 每个工作的运行时间是已知的。
这些思路会引导调度算法的改进。
7.2 调度指标
两个指标,性能指标(如周转时间)和公平指标。性能和公平在调度系统中往往是矛盾的。这也告诉我们生活并不总是完美的。
T 周转时间 = T 完成时间 − T 到达时间
7.3 先进先出 (FIFO)
优点:简单且易于实现。
缺点:护航效应,一些耗时较少的潜在资源消费者被排在重量级的资源消费者之后。
7.4 最短任务优先 (SJF)
即先运行最短的任务,然后是次短的任务。
如果所有工作同时到达,SJF确实是一个最优调度算法。实际上工作随时会到达
7.5 最短完成时间优先 (STCF)
向SJF添加抢占,称为最短完成时间优先 (STCF) 调度程序。
每当新工作进入系统时,他就会确定剩余工作和新工作中,谁的剩余时间最少,然后调度该工作。
STCF的最优性是符合直觉的。
7.6 新度量指标:响应时间
因此,如果我们知道任务长度,而且任务只使用 CPU,而我们唯一的衡量是周转时间, STCF 将是一个很好的策略。然而,引入分时系统改变了这一切。现在,用户将会坐在终端前面,同时也要求系统的交互性好。因此,一个新的度量标准诞生了:响应时间(response time)。
T 响应时间 = T 首次运行 − T 到达时间
STCF方法虽然有很好的周转时间,但可能对于响应时间和交互性是相当糟糕的。
7.7 轮转
解决:新的调度算法,轮转。
基本思想:RR在一个时间片 (time slice) 内运行一个工作,然后切换到运行队列的下一个任务。
时间片长度必须是时钟中断周期的倍数。
时间片越短,RR在响应时间上表现越好,但太短的话上下文切换的成本将影响整体性能。
因此系统设计者需要权衡时间片的长度,使其足够长,以便摊销上下文切换成本,而又不会使系统不及时响应。
显然,RR的周转时间很长,因为周转时间只关心作业何时完成,RR几乎是最差的。
到目前为止,我们开发了两种调度程序。第一种类型(SJF、STCF)优化周转时间,但对响应时间不利。第二种类型(RR)优化响应时间,但对周转时间不利。
7.8 结合 I / O
再来放宽假设4:所有程序都执行 I / O
应对I / O:重叠可以提高利用率。
7.9 无法预知
事实上,再一个通用的操作系统中,操作系统通常对每个作业的长度知之甚少。
因此,我们如何建立一个 没有这种先验知识的 SJF/STCF?更进一步,我们如何能够将已经看到的一些想法与 RR 调 度程序结合起来,以便响应时间也变得相当不没?(第8章介绍)
7.10 小结
我们介绍了调度的基本思想,并开发了两类方法。第一类是运行最短的工作,从而优化周转时间。第二类是交替运行所有工作,从而优化响应时间。但很难做到“鱼与熊掌兼得”,这是系统中常见的、固有的折中。
“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情”