操作系统 - 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 在进程运行时会尝试了解它们,从而用这个作业的历史来预测它将来的行为。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2020-04-10 Python - 函数的五大参数