操作系统 - 8 调度算法:多级反馈队列

在这个章节中,我们将讨论最有名的调度算法中的其中一个,其被称为多级反馈队列MLFQ)。多年来,MLFQ 调度算法已被改进为你在某些现代操作系统中遇到的实现。

MLFQ 调度尝试解决的基本问题有两个。首先,它想要优化周转时间,即我们之前所看到的,该优化可以通过先运行更短的作业来实现;不幸地是,操作系统通常不知道一个作业将运行多久,而这种信息恰恰是像 SJFSTCF 算法所需要的。第二,MLFQ 算法想要使系统对用户交互灵敏,因此需要最小化响应时间;不幸地是,像时间片轮转算法虽然能减少响应时间,但却在周转时间上表现糟糕。我们如何构建调度程序来实现这些目标? 调度器如何在系统运行时了解它正在运行的作业的特征,从而做出更好的调度决策?

MLFQ:基本规则

为了建立一个调度器,这一章我们会介绍多级反馈队列背后的基本算法。尽管许多实现的 MLFQ 的具体细节有所不同,大多数的方法仍是类似的。

在我们的实现中,MLFQ 有许多的不同的队列,每一个都被分配一个不同的优先级。在任何时候,准备运行的队列都在一个单个队列中。MLFQ 用优先级来决定在一个给定时间点哪一个作业应该被运行。一个拥有更高优先级的队列将被系统选择执行。

当然,可能不止一个作业在一个给定队列中,因此它们有同样的优先级。在这种情况下,我们在那些作业之间仅用时间片轮转调度。

因此,我们得出了 MLFQ 的前两个规则:

  • 规则 1:若 A 的优先级大于 B 的优先级,则 A 运行(B 不运行)。

  • 规则 2:若 A 的优先级大于 B 的优先级,则 A 和 B 按 RR 运行。

因此 MLFQ 调度算法的关键在于调度程序怎样设置优先级。MLFQ 没有给每个作业一个固定的优先级,相反,它基于观察到的行为改变一个作业的优先级。比如,如果一个作业在等待键盘的输入时反复放弃 CPUMLFQ 将会保持它的高优先级,因为这正是一个交互式进程可能的行为。相反,如果一个作业长时间频繁使用 CPUMLFQ 可能会降低它的优先级啊。用这种方式,MLFQ 在进程运行时会尝试了解它们,从而用这个作业的历史来预测它将来的行为。

posted on   Black_x  阅读(422)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2020-04-10 Python - 函数的五大参数
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示