操作系统 - 8 调度算法:多级反馈队列
在这个章节中,我们将讨论最有名的调度算法中的其中一个,其被称为多级反馈队列(MLFQ)。多年来,MLFQ 调度算法已被改进为你在某些现代操作系统中遇到的实现。
MLFQ 调度尝试解决的基本问题有两个。首先,它想要优化周转时间,即我们之前所看到的,该优化可以通过先运行更短的作业来实现;不幸地是,操作系统通常不知道一个作业将运行多久,而这种信息恰恰是像 SJF 或 STCF 算法所需要的。第二,MLFQ 算法想要使系统对用户交互灵敏,因此需要最小化响应时间;不幸地是,像时间片轮转算法虽然能减少响应时间,但却在周转时间上表现糟糕。我们如何构建调度程序来实现这些目标? 调度器如何在系统运行时了解它正在运行的作业的特征,从而做出更好的调度决策?
MLFQ:基本规则
为了建立一个调度器,这一章我们会介绍多级反馈队列背后的基本算法。尽管许多实现的 MLFQ 的具体细节有所不同,大多数的方法仍是类似的。
在我们的实现中,MLFQ 有许多的不同的队列,每一个都被分配一个不同的优先级。在任何时候,准备运行的队列都在一个单个队列中。MLFQ 用优先级来决定在一个给定时间点哪一个作业应该被运行。一个拥有更高优先级的队列将被系统选择执行。
当然,可能不止一个作业在一个给定队列中,因此它们有同样的优先级。在这种情况下,我们在那些作业之间仅用时间片轮转调度。
因此,我们得出了 MLFQ 的前两个规则:
-
规则 1:若 A 的优先级大于 B 的优先级,则 A 运行(B 不运行)。
-
规则 2:若 A 的优先级大于 B 的优先级,则 A 和 B 按 RR 运行。
因此 MLFQ 调度算法的关键在于调度程序怎样设置优先级。MLFQ 没有给每个作业一个固定的优先级,相反,它基于观察到的行为改变一个作业的优先级。比如,如果一个作业在等待键盘的输入时反复放弃 CPU,MLFQ 将会保持它的高优先级,因为这正是一个交互式进程可能的行为。相反,如果一个作业长时间频繁使用 CPU,MLFQ 可能会降低它的优先级啊。用这种方式,MLFQ 在进程运行时会尝试了解它们,从而用这个作业的历史来预测它将来的行为。
浙公网安备 33010602011771号