操作系统导论 | 第 7 章笔记

97 阅读3分钟

第7章 进程调度:介绍

接下来会介绍一系列的调度策略。

7.1 工作负载假设

确定工作负载是构建调度策略的关键部分。

一些不现实的假设:

  1. 每一个工作运行相同的时间。
  2. 所有的工作同时到达。
  3. 一旦开始,每个工作保持运行直到完成。
  4. 所有的工作只是用 CPU(即它们不执行 IO 操作)。
  5. 每个工作的运行时间是已知的。

这些思路会引导调度算法的改进。

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在响应时间上表现越好,但太短的话上下文切换的成本将影响整体性能。

因此系统设计者需要权衡时间片的长度,使其足够长,以便摊销上下文切换成本,而又不会使系统不及时响应。

image.png

显然,RR的周转时间很长,因为周转时间只关心作业何时完成,RR几乎是最差的。

到目前为止,我们开发了两种调度程序。第一种类型(SJF、STCF)优化周转时间,但对响应时间不利。第二种类型(RR)优化响应时间,但对周转时间不利。

7.8 结合 I / O

再来放宽假设4:所有程序都执行 I / O

image.png

应对I / O:重叠可以提高利用率。

7.9 无法预知

事实上,再一个通用的操作系统中,操作系统通常对每个作业的长度知之甚少。

因此,我们如何建立一个 没有这种先验知识的 SJF/STCF?更进一步,我们如何能够将已经看到的一些想法与 RR 调 度程序结合起来,以便响应时间也变得相当不没?(第8章介绍)

7.10 小结

我们介绍了调度的基本思想,并开发了两类方法。第一类是运行最短的工作,从而优化周转时间。第二类是交替运行所有工作,从而优化响应时间。但很难做到“鱼与熊掌兼得”,这是系统中常见的、固有的折中。

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情