操作系统中的任务调度算法
一、引言
在操作系统中,任务调度算法是核心组件之一,它负责合理分配有限的 CPU 资源,以确保系统的高效运行和良好的用户体验。任务调度的目标是实现公平性、最小化等待时间、提高系统吞吐量,并最大化 CPU 的利用率。不同的任务调度算法适用于不同的应用场景,操作系统根据系统负载和任务的特性选择最合适的调度策略。
本文将介绍几种常见的任务调度算法,分析其优缺点,并通过具体示例展示各算法的调度效果。
二、常见任务调度算法
2.1 先来先服务(FCFS,First Come, First Served)
原理
先来先服务(FCFS)是最简单的任务调度算法,按照任务进入就绪队列的顺序进行调度。先到的任务先执行,直到任务完成或者因为 I/O 操作阻塞时,才会调度下一个任务。
优点
- 算法实现简单,易于理解。
- 对于长任务来说,不会发生饥饿现象。
缺点
- 对于短任务不够友好,长任务可能会导致短任务等待时间过长,导致系统的平均周转时间增加。
- 系统整体吞吐量较低,尤其在任务长度差异较大的情况下。
示例
假设系统有三个任务 T1、T2、T3,它们的到达时间和执行时间分别为:T1(到达时间 0,执行时间 15)、T2(到达时间 3,执行时间 5)、T3(到达时间 6,执行时间 7)。按照 FCFS 算法进行调度:
- T1 先到达,开始执行,执行完毕时间为 15。
- 然后 T2 执行,执行完毕时间为 20。
- 最后 T3 执行,执行完毕时间为 27。
| 任务 | 到达时间 | 执行时间 | 完成时间 | 周转时间(完成时间 - 到达时间) | 等待时间(周转时间 - 执行时间) |
|---|---|---|---|---|---|
| T1 | 0 | 15 | 15 | 15 | 0 |
| T2 | 3 | 5 | 20 | 17 | 12 |
| T3 | 6 | 7 | 27 | 21 | 14 |
- 平均周转时间 = (15 + 17 + 21) / 3 = 17.67
- 平均等待时间 = (0 + 12 + 14) / 3 = 8.67
2.2 短作业优先(SJF,Shortest Job First)
原理
短作业优先(SJF)算法会选择预计执行时间最短的任务优先执行。若多个任务预计执行时间相同,则按照到达时间顺序执行。
优点
- 有效减少了平均周转时间,特别适用于短任务较多的系统。
- 提高了系统的吞吐量。
缺点
- 难以准确预测每个任务的执行时间,因此在实际应用中存在一定的不确定性。
- 可能导致长任务饥饿,因为短任务会不断占用 CPU,长任务可能长时间得不到执行机会。
示例
假设系统有三个任务 T1、T2、T3,它们的到达时间和执行时间分别为:T1(到达时间 0,执行时间 10)、T2(到达时间 1,执行时间 2)、T3(到达时间 4,执行时间 5)。按照 SJF 算法调度,执行顺序如下:
- T2 执行(执行时间最短),执行完时间为 3。
- 然后 T3 执行,执行完时间为 8。
- 最后 T1 执行,执行完时间为 18。
| 任务 | 到达时间 | 执行时间 | 完成时间 | 周转时间(完成时间 - 到达时间) | 等待时间(周转时间 - 执行时间) |
|---|---|---|---|---|---|
| T2 | 1 | 2 | 3 | 2 | 0 |
| T3 | 4 | 5 | 8 | 4 | -1 |
| T1 | 0 | 10 | 18 | 18 | 8 |
- 平均周转时间 = (2 + 4 + 18) / 3 = 8
- 平均等待时间 = (0 + -1 + 8) / 3 = 2.33
2.3 时间片轮转(RR,Round Robin)
原理
时间片轮转(RR)将 CPU 时间划分为固定大小的时间片,每个任务轮流执行一个时间片。当一个任务的时间片用完时,即使任务未完成,也会被暂停,重新排到队列的末尾,等待下一轮调度。
优点
- 每个任务都能得到及时的响应,适用于交互式系统。
- 保证系统中的每个任务都有公平的机会获得 CPU 时间。
缺点
- 如果时间片过长,可能退化为 FCFS 算法,失去轮转的优势。
- 如果时间片过短,会增加上下文切换的开销,导致系统效率降低。
示例
假设时间片为 4 个时间单位,三个任务的到达时间和执行时间分别为:T1(到达时间 0,执行时间 6)、T2(到达时间 2,执行时间 4)、T3(到达时间 4,执行时间 8)。根据 RR 算法调度,执行顺序如下:
- T1 执行 4 个时间单位,剩余执行时间为 2,排队等候。
- T2 执行 4 个时间单位,执行完毕。
- T3 执行 4 个时间单位,剩余执行时间为 4,排队等候。
- T1 执行剩余 2 个时间单位,执行完毕。
- T3 执行剩余 4 个时间单位,执行完毕。
| 任务 | 到达时间 | 执行时间 | 完成时间 | 周转时间(完成时间 - 到达时间) | 等待时间(周转时间 - 执行时间) |
|---|---|---|---|---|---|
| T1 | 0 | 6 | 12 | 12 | 6 |
| T2 | 2 | 4 | 6 | 4 | 0 |
| T3 | 4 | 8 | 20 | 16 | 8 |
- 平均周转时间 = (12 + 4 + 16) / 3 = 10.67
- 平均等待时间 = (6 + 0 + 8) / 3 = 4.67
2.4 优先级调度(Priority Scheduling)
原理
优先级调度根据任务的优先级来决定调度顺序,优先级高的任务优先获得 CPU 资源。优先级可以是静态的(在任务创建时设定)或动态的(根据任务执行的情况调整)。
优点
- 可以根据任务的重要程度或紧急程度进行调度,提高响应能力。
- 对于重要任务,能够优先处理,提高系统的整体性能。
缺点
- 如果不加以控制,低优先级任务可能会长时间得不到执行,导致饥饿现象。
示例
假设有任务 T1(优先级 2,执行时间 5)、T2(优先级 1,执行时间 3)、T3(优先级 3,执行时间 4)。根据优先级调度,执行顺序如下:
- T3 优先级最高,先执行,执行完时间为 4。
- 然后 T1 执行,执行完时间为 9。
- 最后 T2 执行,执行完时间为 12。
-
任务 到达时间 执行时间 完成时间 周转时间(完成时间 - 到达时间) 等待时间(周转时间 - 执行时间) T3 0 4 4 4 0 T1 1 5 9 8 3 T2 2 3 12 10 7 - 平均周转时间 = (4 + 8 + 10) / 3 = 7.33
- 平均等待时间 = (0 + 3 + 7) / 3 = 3.33
2.5 多级反馈队列(Multilevel Feedback Queue)
原理
多级反馈队列使用多个优先级队列,每个队列有不同的时间片,通常优先级越高,时间片越短。任务根据执行情况从一个队列移动到另一个队列。新任务进入最高优先级队列,并按照时间片轮转执行。如果未完成,任务会移动到较低优先级队列,直到最终完成。
优点
- 兼顾了多种调度策略的优点,既保证了短任务的快速执行,又能合理调度长任务。
- 高优先级队列能快速响应交互式任务,低优先级队列能够照顾到批处理任务。
缺点
- 算法相对复杂,需要管理多个队列及任务之间的迁移。
示例
假设有三个优先级队列 Q1(时间片 2)、Q2(时间片 4)、Q3(时间片 6),任务 T1(执行时间 5)、T2(执行时间 3)、T3(执行时间 10)进入系统。执行顺序如下:
- T1 执行 2 个时间单位,剩余 3 个时间单位,移至 Q2。
- T2 执行 2 个时间单位,剩余 1 个时间单位,移至 Q3。
- T3 执行 4 个时间单位,剩余 6 个时间单位,移至 Q3。
然后,依次按队列顺序继续执行,直到所有任务完成。
三、总结
不同的任务调度算法各有优缺点,根据系统类型和任务特性选择合适的算法至关重要。随着应用场景的复杂化,新的调度算法不断出现,以适应日益复杂的性能需求。在实际系统中,综合考虑任务的响应时间、执行效率和资源利用率,合理调度任务,以实现最佳的操作系统性能。
这样的一篇博客对任务调度算法的介绍更加详细,且示例、分析更加清晰。
相关文章:
操作系统中的任务调度算法
一、引言 在操作系统中,任务调度算法是核心组件之一,它负责合理分配有限的 CPU 资源,以确保系统的高效运行和良好的用户体验。任务调度的目标是实现公平性、最小化等待时间、提高系统吞吐量,并最大化 CPU 的利用率。不同的任务调…...
GitCode 助力 Easy-Es,革新 Elasticsearch 开发体验
项目仓库(点击阅读原文链接可直达) https://gitcode.com/dromara/easy-es 项目背景:填补 Elasticsearch ORM 框架空白 在 Java 开发领域,Excel 和 Elasticsearch 的代码编写难度一直名列前茅,尤其是 Elasticsearch&a…...
线程同步(互斥锁与条件变量)
文章目录 1、为什么要用互斥锁2、互斥锁怎么用3、为什么要用条件变量4、互斥锁和条件变量如何配合使用5、互斥锁和条件变量的常见用法 参考资料:https://blog.csdn.net/m0_53539646/article/details/115509348 1、为什么要用互斥锁 为了使各线程能够有序地访问公共…...
EF Core中实现值对象
目录 值对象优点 值对象的需求 值类型的实现 值类型GEO的实现 值类型MultilingualString的实现 案例:构建表达式树,简化值对象的比较 值对象优点 把有紧密关系的属性打包为一个类型把领域知识放到类的定义中 class shangjia {long id;string nam…...
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十一)-回文日期、移动距离、日期问题
前言 在这篇博客中,我们将通过模拟的方法来解决三道经典的算法题:回文日期、移动距离和日期问题。这些题目不仅考察了我们的基础编程能力,还挑战了我们对日期处理和数学推理的理解。通过模拟算法,我们能够深入探索每个问题的核心…...
Kubernetes 最佳实践:Top 10 常见 DevOps/SRE 面试问题及答案
1. 如何在 Kubernetes 中设置资源请求和限制? 资源请求确保容器有最小资源量(CPU/内存),而限制则强制容器消耗的最大资源量。这有助于高效资源分配并防止资源争用。 示例: resources:requests:memory: "256Mi&…...
Docker Compose介绍及安装使用MongoDB数据库详解
在现代容器化应用部署中,Docker Compose是一种非常实用的工具,它允许我们通过一个docker-compose.yml文件来定义和运行多容器应用程序。然而,除了Docker之外,Podman也提供了类似的工具——Podman Compose,它允许我们在…...
科普:数据仓库中的“指标”和“维度”
在数据仓库中,指标和维度是两个核心概念,它们对于数据分析和业务决策至关重要。以下是对这两个概念的分析及举例说明: 一、指标 定义: 指标是用于衡量业务绩效的关键数据点,通常用于监控、分析和优化企业的运营状况。…...
11.swagger使用
菜单位置 未登录接口会返回401 登录的token存储的位置 配置文件swagger配置中将/dev-api修改/...
java高级知识之集合
前言 集合是java开发中的重点内容,需要掌握的东西很多,面试中可问的东西很多,无论是深度还是广度。集合框架中Collection对应的实现类如下所示,这些都是要完全掌握,一个可以分为三大类List集合、Set‘集合以及Map集合…...
deepseek + kimi 高效生成PPT
1.在deepseek中生成ppt大纲 2.将大纲复制到kimi中生成PPT kimi:https://kimi.moonshot.cn/...
hadoop之MapReduce:片和块
假如我现在500M这样的数据,如何存储? 500M 128M 128M 128M 116M 分为四个块进行存储。 计算的时候,是按照片儿计算的,而不是块儿。 块是物理概念,一个块就是128M ,妥妥的,毋庸置疑。 片是逻辑概念&…...
好好说话:深度学习扫盲
大创项目是和目标检测算法YOLO相关的,浅浅了解了一些有关深度学习的知识。在这里根据本人的理解做一些梳理。 深度学习是什么? 之前经常听到AI,机器学习,深度学习这三个概念,但是对于三者的区别一直很模糊。 AI&…...
ASP.NET Core的贫血模型与充血模型
目录 概念 需求 贫血模型 充血模型 总结 概念 贫血模型:一个类中只有属性或者成员变量,没有方法。充血模型:一个类中既有属性、成员变量,也有方法。 需求 定义一个类保存用户的用户名、密码、积分;用户必须具有…...
【愚公系列】《Python网络爬虫从入门到精通》001-初识网络爬虫
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主&…...
Kubernetes控制平面组件:etcd(一)
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)kubectl 和 …...
2100年芜湖人的一天:张明的生活剪影
2100年芜湖人的一天:张明的生活剪影 破晓 6:30 "沙沙"的微风声轻轻掠过耳畔,杨柳的沙沙声混合着若有若无的鸟鸣,张明的意识从深邃的梦境中缓缓浮现。这并非真实的自然声响,而是他的脑机接口精心编织的唤醒交响曲。量子…...
外贸网站源码 助力企业抢占蛇年市场先机!
在竞争激烈的外贸市场中,蛇年无疑是企业寻求突破与增长的关键一年。外贸网站源码为企业提供了快速搭建专业外贸网站的解决方案,助力企业在新的一年抢占市场先机。 快速上线 时间就是商机,尤其是在蛇年这样充满变数和机遇的年份。外贸网站源码…...
verilog练习:i2c slave 模块设计
文章目录 前言1.结构2.代码2.1 iic_slave.v2.2 sync.v2.3 wr_fsm.v2.3.1 状态机状态解释 2.4 ram.v 3. 波形展示4. 建议5. 资料总结 前言 首先就不啰嗦iic协议了,网上有不少资料都是叙述此协议的。 下面将是我本次设计的一些局部设计汇总,如果对读者有…...
项目6:基于大数据校园一卡通数据分析和可视化
1、项目简介 本项目是基于大数据的清华校园卡数据分析系统,通过Hadoop,spark等技术处理校园卡交易、卡号和商户信息数据。系统实现消费类别、男女消费差异、学院消费排行和年级对比等分析,并通过Web后端和可视化前端展示结果。项目运行便捷&…...
Linux常见系统日志类型
目录 系统日志(/var/log/syslog 或 /var/log/messages) 认证日志(/var/log/auth.log 或 /var/log/secure) Web服务器日志(/var/log/apache2/ 或 /var/log/nginx/) MySQL日志(/var/log/mysql/…...
npm 常用命令大全
npm 常用命令大全 下载包 npm install清理缓存 npm cache clean --force查看当前配置 npm config get registry设置淘宝镜像 npm config set registry https://registry.npmmirror.com查看 npm 版本 npm -vnpm 设置超时时间 npm config set fetch-timeout 600更新依赖 …...
java.io.InvalidClassException
类实现序列问题 如果实现了序列,最好生成序列号,因为类结构发生改变时,会报错 java.io.InvalidClassException 所以实现序列,需要生成序列号 private static final long serialVersionUID 1L;...
Datawhale 组队学习 Ollama教程 task1
一、Ollama 简介 比喻:Ollama 就像是一个“魔法箱子”,里面装满了各种大型语言模型(LLM)。你不需要懂复杂的魔法咒语(配置),只需要轻轻一按(一条命令),就能让…...
大模型基本原理(二)——ChatGPT的工作原理
如何得到一个ChatGPT? 1、无监督预训练:通过大量的文本数据集进行无监督训练,得到一个基座模型(只会续写文本) 2、监督微调:通过一些人类撰写的高质量对话数据对基座模型进行监督微调,得到一个…...
成为高能量体质:从身体神庙到精神圣殿的修炼之路
清晨五点,当城市还在沉睡,瑜伽垫上的汗水已经折射出第一缕阳光。这不是苦行僧的自虐,而是高能量体质者的日常仪式。在这个能量稀缺的时代,如何把自己修炼成一座小型核电站?答案就藏在身体的每个细胞里。 一、能量管理…...
51c自动驾驶~合集50
我自己的原文哦~ https://blog.51cto.com/whaosoft/13280022 #VLA 主流方案全解析 旨在让智能体在物理世界中通过感知、决策和行动来实现目标,而视觉 - 语言 - 动作(VLA)模型作为其中的关键技术,近年来备受关注。VLA 模型能够…...
测试自动化落地方向
一、视觉回归自动化测试(低成本高回报) 痛点: UI 频繁迭代导致视觉问题难覆盖 方案: 引入Applitools或SikuliX做视觉比对(无需维护元素定位) 关键路径截图比对,自动检测 UI 错位/样式问题 亮点…...
论文阅读:MGMAE : Motion Guided Masking for Video Masked Autoencoding
MGMAE:Motion Guided Masking for Video Masked Autoencoding Abstract 掩蔽自编码(Masked Autoencoding)在自监督视频表示学习中展现了出色的表现。时间冗余导致了VideoMAE中高掩蔽比率和定制的掩蔽策略。本文旨在通过引入运动引导掩蔽策略࿰…...
【嵌入式Linux应用开发基础】文件I/O基础编程
目录 一、文件I/O简介 二、文件描述符 2.1. 唯一性 2.2. 抽象性 2.3. 有限性 三、文件操作函数 四、标准文件I/O函数 五、文件执行权限 5.1. 权限类型 5.2. 权限分配对象 5.3. 权限表示方法 5.4. 权限设置命令 5.5. 权限设置的重要性 5.6. 实例说明 六、设备文件…...
