操作系统中的任务调度算法
一、引言
在操作系统中,任务调度算法是核心组件之一,它负责合理分配有限的 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 的利用率。不同的任务调…...
Linux 虚拟服务器(LVS)技术详解
一、LVS 概述 Linux 虚拟服务器(Linux Virtual Server,简称 LVS)是由章文嵩博士开发的一种开源的服务器集群技术,它工作在 Linux 内核空间,为构建高可用、可扩展的网络服务提供了一种高效的解决方案。LVS 可以将多个真…...
AIoT时代来临,物联网技术如何颠覆未来生活?
在这个万物互联的时代,“物联网”(IoT)正以前所未有的速度改变我们的生活,而“AIoT”则是在物联网基础上融入人工智能技术,赋予设备更高的智能和自主决策能力。随着5G、边缘计算和云技术的不断发展,物联网正…...
C++17 新特性解析
C++17 是 C++ 标准的一个重要更新,它在 C++11/14 的基础上引入了许多新特性,进一步简化了代码编写、提升了性能和类型安全性。以下是 C++17 的主要特性分类介绍: 一、语言核心改进 1. 结构化绑定(Structured Bindings) 允许将元组、结构体或数组的成员直接解包到变量中。…...
嵌入式软件C语言面试常见问题及答案解析(四)
嵌入式软件C语言面试常见问题及答案解析(四) 原本打算将链表相关的面试题整合到一个文档中,奈何写着写着就发现题目比较多,题型也比较丰富,所以导致上一篇已经足够长了,再长也就有点不礼貌了。 所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者…...
在 C# 中,处理 Excel 和 PDF 文件的库有很多。以下是一些比较常用的选择
读取 Excel 文件的库 NPOI 用途:可以读取和写入 .xls 和 .xlsx 文件。特点:无需安装 Microsoft Office,支持简单的 Excel 操作,如格式化、公式、图表等。 EPPlus 用途:主要用于 .xlsx 格式(Excel 2007 及以…...
绩效归因概述
绩效归因概述 1. 分类2. 基于净值的归因方法2.1 发展背景2.2 择时选股模型 T-M模型2.3 择时选股模型 H-M模型2.4 择时选股模型 C-L模型2.5 风格配置模型-Sharpe2.6 多因子模型 Fama-French32.7 多因子模型 Carhart42.8 多因子模型 Fama-French5 3. 基于持仓的归因方法3.1 发展背…...
Spring Boot 中加载多个 YAML 配置文件
在 Spring Boot 中加载多个 YAML 配置文件是一个常见的需求,通常用于将配置信息分离到多个文件中以便于管理和维护。Spring Boot 提供了灵活的方式来加载多个 YAML 配置文件。 以下是一些方法和步骤,用于在 Spring Boot 应用中加载多个 YAML 配置文件&a…...
厚植创新实力、聚焦生物科技:柏强制药的责任与机遇
在当今快速发展的医药行业中,创新已成为企业竞争的核心动力。贵州柏强制药作为医药领域的佼佼者,正以科技创新为引领,聚焦生物科技领域,不断突破,不仅为人民的健康事业贡献力量,更在激烈的市场竞争中抓住了…...
Linux中getifaddrs函数
文章目录 **函数原型****参数****返回值****释放资源****`struct ifaddrs` 结构****示例代码****输出示例****相关函数****总结**getifaddrs 是 Linux(以及其他 Unix-like 系统)中用于获取本机网络接口信息的系统调用。它提供了一种简单的方法来获取所有网络接口的地址信息,…...
【HarmonyOS Next 自定义可拖拽image】
效果图: 代码: import display from "ohos.display" import { AppUtil } from "pura/harmony-utils"/*** 自定义可拖拽图标组件*/ Component export default struct DraggableImage {imageResource?: ResourceimageHeight: numbe…...
解决No module named ‘llama_index.llms.huggingface‘
执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报…...
SearchBar组件的功能与用法
文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"Material3中的IconButton"相关的内容,本章回中将介绍SearchBar组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…...
13.推荐系统的性能优化
接下来我们将学习推荐系统的性能优化。推荐系统的性能优化对于提升推荐结果的生成速度和系统的可扩展性至关重要,尤其是在处理大规模数据和高并发请求时。在这一课中,我们将介绍以下内容: 性能优化的重要性常见的性能优化方法实践示例 1. 性…...
Grafana-使用Button修改MySQL数据库
背景 众所周知,Grafana是一个用来展示数据的平台,但是有时候还是会有需求说能不能有一个按钮,点击的时候再对数据库进行修改,从而达到更新数据的效果 经过多方查证,终于实现了一个简单的,点击button执行sq…...
飞科FH6218电吹风异响维修
前言 本文仅记录一次普通的维修经历,解决方案也都是从网上查找资料得来,仅供参考,如有不对请指出,谢谢! 现象 使用时出现异响,风速越大越响 参考视频 https://www.bilibili.com/video/BV1dD4y1x7hH/?…...
分治下的快速排序(典型算法思想)—— OJ例题算法解析思路
目录 一、75. 颜色分类 - 力扣(LeetCode) 运行代码: 一、算法核心思想 二、指针语义与分区逻辑 三、操作流程详解 四、数学正确性证明 五、实例推演(数组[2,0,2,1,1,0]) 六、工程实践优势 七、对比传统实现 八、潜在问题与解决方案 九、性能测试数据 十、扩展…...
Unity3D实现显示模型线框(shader)
系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉二、第一种方式👉二、第二种方式👉壁纸分享👉总结👉前言 在 Unity 中显示物体线框主要基于图形渲染管线和特定的渲染模式。 要显示物体的线框,通常有两种常见的方法:一种是利用内置的渲染…...
深度剖析责任链模式
一、责任链模式的本质:灵活可扩展的流水线处理 责任链模式(Chain of Responsibility Pattern)是行为型设计模式的代表,其核心思想是将请求的发送者与接收者解耦,允许多个对象都有机会处理请求。这种模式完美解决了以下…...
基于 openEuler 构建 LVS-DR 群集
一、 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。 二、 基于 openEuler 构建 LVS-DR 群集。 一 NAT 模式 部署简单:NAT 模式下,所有的服务器节点只需要连接到同一个局域网内,通过负载均衡器进行网络地址转…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
