【操作系统导论】进程调度介绍

周转时间

讨论到调度策略,先认识一个能让我们比较不同调度策略的东西:调度指标

先来认识一个常用的指标:周转时间。任务的周转时间定义为任务完成时间减去任务到达系统的时间。

T 周转时间 = T 完成时间 − T 到达时间 T_{周转时间} = T_{完成时间} − T_{到达时间} T周转时间=T完成时间T到达时间

FIFO 调度

一个最基本的算法:先进先出(FIFO)调度

我们假设当三个任务 A、B、C 同时到达系统,A 比 B 早一点点,然后 B 比 C 早到达一点点;假设每个工作运行 10s。那么,这些工作的平均周转时间是多少?

答:A 在 10s 时完成,B 在 20s 时完成,C 在 30s 时完成,则平均周转时间就是(10 + 20 + 30)/ 3 = 20。

在这里插入图片描述

现在假设每个任务的运行时间不相同,3 个任务 A 运行 100s,而 B 和 C 运行 10s,FIFO 的表现如何?。

答:平均周转时间:(100 + 110 + 120)/ 3 = 110,这个问题通常被称为 护航效应

在这里插入图片描述

这就好比在杂货店只有一个排队队伍的时候,看到前面的人装满 3 辆购物车食品并且掏出了支票本。。。

SJF 调度

我们可以想到的另一个简单算法:最短任务优先(SJF)

假设当三个任务 A、B、C 同时到达系统,且 A 运行 100s,而 B 和 C 运行 10s,则 B 和 C 会优先执行。

在这里插入图片描述

但是,如果任务不是同时到达系统的,假设 A 在 t = 0 时到达,且需要运行 100s;而 B 和 C 在 t = 10 到达,且各需要运行 10s;则仍然会遭遇“护航效应”。

在这里插入图片描述

STCF 调度

FIFO 和 SJF 都是 “非抢占式(non-preemptive)调度程序”;即在每项工作做完后,再考虑是否运行新工作。
然而,现代化的调度程序都是 “抢占式的(preemptive)”;即可以通过上下文切换,临时停止一个运行进程,并恢复(或启动)另一个进程。

我们可以向 SJF 添加“抢占”,称为 **抢占式最短作业优先(PSJF)**或 最短完成时间优先(STCF)

每当新工作进入系统时,它就会确定剩余工作和新工作中, 谁的剩余时间最少,然后调度该工作。

在这里插入图片描述

响应时间

对于许多早期批处理系统,上述的调度算法有一定的意义。

然而,引入分时系统改变了这一切。现在,用户们坐在终端前面,同时也要求系统的交互性好。因此,一个新的度量标准诞生了:响应时间(response time)。响应时间定义为从任务到达系统到首次运行的时间。

T 响应时间 = T 首次运行 − T 到达时间 T_{响应时间}= T_{首次运行}−T_{到达时间} T响应时间=T首次运行T到达时间

轮转调度(RR)

RR 在一个时间片(time slice,有时称为调度量子)内运行一个工作,时间片用完后切换到运行队列中的下一个任务,而不是运行一个任务直到结束。它反复执行,直到所有任务完成。

注意,时间片长度必须是时钟中断周期的倍数。

假设任务 A、B 和 C 在系统中同时到达, 且它们都希望运行 5s。SJF 调度程序必须运行完当前任务才可运行下一个任务;相比之下,1s 时间片的 RR 可以快要地循环工作。

在这里插入图片描述

RR 的响应时间非常好,但是周转时间呢?

A、B 和 C,每个运行时间为 5s, 同时到达,RR 是具有(长)1s 时间片的调度程序。最终,A 在 13 完成,B 在 14,C 在 15,平均 14。相当可怕!

如果你愿意不公平,你可以运行较短的工作直到完成,但是要以响应时间为代价。如果你重视公平性,则响应时间会较短,但会以周转时间为代价。这种权衡在系统中很常见。你不能既保留你的蛋糕,又吃它。

结合 I/O

调度程序显然要 在工作发起 I/O 请求时做出决定,因为当前正在运行的作业在 I/O 期间不会使用 CPU,它被阻塞等待 I/O 完成;这时调度程序应该在 CPU 上安排另一项工作,并且,调度程序也必须 在 I/O 完成时做出决定

现在假设有两项工作 A 和 B,每项工作需要 50ms 的 CPU 时间。并且,A 每运行 10ms,就会发出一次 I/O 请求(假设 I/O 每个都需要 10ms),而 B 只是使用 CPU 50ms,不执行 I/O。调度程序先运行 A,然后运行 B。

在这里插入图片描述

总结

我们介绍了调度的基本思想,包括两种调度指标以及结合 I/O 的场景。

  • 通过运行最短的工作,从而优化周转时间;

  • 通过交替运行所有工作,从而优化响应时间;

  • 在 I/O 期间,通过“重叠”来更好地利用资源。

但是,我们很难做到“鱼与熊掌兼得”,这是系统中常见的、固有的折中。

并且,操作系统通常对每个作业的长度和知之甚少,SJF / STCF 调度程序好似难以实现?

后面,我们将看到如何通过构建一个调度程序,利用最近的历史预测未来,从而解决这个问题。

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Skylar Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值