进程与线程:07 CPU调度策略

一、课程内容概述

本节课程主要讲解操作系统的CPU调度策略,聚焦于基本操作系统上的调度算法,探讨其大致实现方式、需折中考虑的问题。CPU调度在不同场景下复杂程度不同,如卫星、导弹等实时性要求高的系统,需采用实时调度,而本次课程主要围绕常见的基本调度策略展开,不求穷尽所有算法,旨在以点带面,帮助学习者触类旁通。

二、CPU调度的基本概念

  1. 调度与切换的关系:在多进程图像下,CPU调度和进程切换紧密相连。调度的目的是从就绪队列中选取下一个要执行的进程(获得next),并切换到该进程(switch to next),从而使操作系统能够实际运转。例如,当一个进程(如p1)在执行过程中因阻塞、时间片到期等原因无法继续执行时,操作系统需从就绪队列中选择另一个进程(如p2或p3)来执行,此时就涉及到调度策略的选择。在这里插入图片描述

  2. 调度的直观想法:其直观思路是从就绪队列的众多进程中选择执行对象。生活中的银行、食堂等场景也存在类似调度,最常见的方法是先来先服务(先入先出),这种方法简单公平,但存在局限性。比如在银行,对于简单询问业务的客户,若采用先来先服务,可能导致其等待时间过长,不太合理,因此可考虑短作业适当优先。然而,若短作业的处理时间不断延长,又需适当降低其优先级,这就引出了优先级调度的概念,且优先级在实际中会不断变化 。
    在这里插入图片描述

三、设计调度算法的指标

在这里插入图片描述

  1. 进程满意的关键因素:设计调度算法需要明确指标,而让进程满意的关键在于时间相关因素。对于进程而言,用户希望程序执行速度快,这涉及到多种时间指标,如周转时间和响应时间。
  2. 周转时间周转时间是指从任务进入系统到任务结束的时间,用户希望该时间越短越好。例如,在编译任务中,用户期望编译过程尽快完成。
  3. 响应时间响应时间是从操作发生到系统产生反应的时间,对于一些前台任务(如word操作),用户更关注响应时间。比如按下键盘后,希望字符能尽快显示在屏幕上。
  4. 其他指标:除了周转时间和响应时间,系统内耗时间也应尽量少,否则会减少实际用于处理任务的时间,导致用户不满。同时,系统完成任务的数量(吞吐量)应尽量大 。

四、CPU调度的关键——折中和综合

在这里插入图片描述

  1. 系统任务的多样性与矛盾:操作系统中存在多种任务,如前台任务(如ppt操作)和后台任务(如图像压缩),它们关注点不同,前台任务更关注响应时间,后台任务更关注周转时间。而且这些任务之间相互影响,例如,若要满足前台任务响应时间短的要求,就需要增加进程切换次数,但这会导致系统内耗增大,进而使后台任务的周转时间变长,因此CPU调度需要在这些相互矛盾的需求之间进行折中、平衡与综合 。
  2. I/O约束性任务和CPU约束性任务:I/O约束性任务的特点是I/O操作较多,CPU执行区间短且频率高,如银行出纳工作、word操作等;与之相对的是CPU约束性任务,这类任务长时间进行计算,几乎没有I/O操作,例如gcc编译、matlab矩阵计算等。由于两者特点不同,调度优先级也应有所区别,I/O约束性任务通常优先级更高,因为它优先执行可以使I/O和CPU并行工作,提高系统效率,且I/O约束性任务往往是前台任务,为了给用户及时反馈,也应赋予较高优先级 。

五、常见调度算法

  1. 先来先服务(FCFS):这是最简单的调度算法,按照进程到达就绪队列的先后顺序进行调度。例如,进程p1先到达,p5后到达,调度顺序就是p1执行完后p2,依次类推直到p5。但这种算法可能导致周转时间较长,通过调整进程执行顺序,将短作业提前执行,可降低周转时间,提高系统整体满意度,由此引出短作业优先(SJF)算法在这里插入图片描述

  2. 短作业优先(SJF):该算法将短作业优先执行,可证明这种方法能使周转时间最小。因为在计算周转时间的公式中,先执行的作业被重复计算的次数更多,所以将短作业放在前面执行,最终得到的周转时间总和更小。这种算法在实际中有重要价值,但也有局限性 。在这里插入图片描述

  3. 时间片轮转调度(RR):为保证响应时间,引入时间片轮转调度算法。它将CPU时间划分为固定大小的时间片,每个进程轮流执行一个时间片。例如,给进程p1、p2、p3各分配10个时间片,执行完后再为后续进程分配。通过这种方式,可保证最长响应时间在一定范围内(为进程数量乘以时间片大小),从而确保响应时间。为提高响应速度,时间片应尽量小,但同时要限制系统中进程的数量 。在这里插入图片描述

  4. 优先级调度:由于不同任务对响应时间和周转时间的需求不同,可采用优先级调度。直观做法是设置前台任务队列和后台任务队列,前台任务采用轮转调度以保证响应时间,后台任务采用短作业优先以减少周转时间,然后通过优先级来决定执行顺序,前台任务优先级高于后台任务在这里插入图片描述
    但如果采用绝对优先级调度,可能导致后台任务饥饿,如1967年提交的一个进程,因前台任务不断出现,直到1973年都未执行。因此,任务优先级应动态调整,但这又会引发新的矛盾,如后台长CPU任务执行时会影响前台任务响应时间。所以,调度算法需要综合考虑轮转调度、优先级和短作业优先等因素,且应具备学习机制,能根据任务特点和变化自适应调整,以实现对各种任务的折中与综合 。
    在这里插入图片描述
    在这里插入图片描述

六、课程总结与展望

本次课程介绍了CPU调度的含义,即从就绪队列选取进程执行,强调调度算法需考虑周转时间、响应时间、任务特点和优先级等因素,还讲解了先来先服务、短作业优先、时间片轮转调度三种基本算法。未来课程将在此基础上,展示如何综合这些基本算法,设计出简单且能有效折中多种任务需求的实际调度程序,以应对操作系统中多任务的复杂情况 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JPG与PDF格式转换器

该插件可实现JPG与PDF格式的互转。 MainForm.Designer.cs using System.Windows.Forms; namespace JpgToPdfConverter {partial class MainForm{private System.ComponentModel.IContainer components null;protected override void Dispose(bool disposing){if (disposing &…

LlamaIndex 第八篇 MilvusVectorStore

本指南演示了如何使用 LlamaIndex 和 Milvus 构建一个检索增强生成(RAG)系统。 RAG 系统将检索系统与生成模型相结合,根据给定的提示生成新的文本。该系统首先使用 Milvus 等向量相似性搜索引擎从语料库中检索相关文档,然后使用生…

浅聊一下数据库的索引优化

背景 这里的索引说的是关系数据库(MSSQL)中的索引。 本篇不是纯技术性的内容,只是聊一次性能调优的经历,包含到一些粗浅的实现和验证手段,所以,大神忽略即可。 额…对了,笔者对数据库的优化手段…

【android bluetooth 框架分析 02】【Module详解 7】【VendorSpecificEventManager 模块介绍】

1. 背景 我们在 gd_shim_module 介绍章节中&#xff0c;看到 我们将 VendorSpecificEventManager 模块加入到了 modules 中。 // system/main/shim/stack.cc modules.add<hci::VendorSpecificEventManager>();在 ModuleRegistry::Start 函数中我们对 加入的所有 module…

小刚说C语言刷题—1080质因子

1.题目描述 任意输入一正整数 N &#xff0c;求出它的所有质因子。如&#xff1a;10&#xff1d;25&#xff0c;20&#xff1d;225。 输入 输入只有一行&#xff0c;包括 11个整数 n (1≤n≤32768) 输出 输出若干行&#xff0c;按从小到大的顺序给出这个数的所有质因子&am…

C语言中的宏

1.防止头文件重复包含 1.#pragma once #pragma once 是一个编译器指令&#xff0c;用于防止头文件被重复包含。它的核心作用是通过简单语法替代传统的头文件保护宏&#xff08;#ifndef/#define/#endif&#xff09;&#xff0c;提升代码简洁性和可维护性。 作用详解 防止重复…

MapReduce 模型

‌引言‌ MapReduce 是分布式计算领域的里程碑式模型&#xff0c;由 Google 在 2004 年论文中首次提出&#xff0c;旨在简化海量数据处理的复杂性。其核心思想是通过函数式编程的 ‌Map‌ &#xff08;映射&#xff09;和 ‌Reduce‌ &#xff08;归约&#xff09;阶段&#x…

Linux文件编程——标准库函数fopen、fread、fwrite等函数

1. fopen — 打开文件 函数原型&#xff1a; FILE *fopen(const char *filename, const char *mode);参数&#xff1a; filename&#xff1a;要打开的文件名&#xff0c;可以是相对路径或绝对路径。 mode&#xff1a;文件打开模式&#xff0c;表示文件的操作方式&#xff08…

从 Git 到 GitHub - 使用 Git 进行版本控制 - Git 常用命令

希望本贴能从零开始带您一起学习如何使用 Git 进行版本控制&#xff0c;并结合远程仓库 GitHub。这会是一个循序渐进的指南&#xff0c;我们开始吧&#xff01; 学习 Git 和 GitHub 的路线图&#xff1a; 理解核心概念&#xff1a;什么是版本控制&#xff1f;Git 是什么&…

2025.05.11拼多多机考真题算法岗-第四题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 记忆碎片重组 问题描述 卢小姐正在开发一款名为"记忆碎片"的游戏,玩家需要分析混乱的记忆数据,推测出形成这些记忆的原始序列。游戏中,记忆数据存储在一个特殊的数…

Android Exoplayer多路不同时长音视频混合播放

在上一篇Android Exoplayer 实现多个音视频文件混合播放以及音轨切换中我们提到一个问题&#xff0c;如果视频和音频时长不一致&#xff0c;特别是想混合多个音频和多个视频时就会出问题&#xff0c;无法播放。报错如下&#xff1a; E/ExoPlayerImplInternal(11191): Playback…

Datawhale PyPOTS时间序列5月第1次笔记

课程原地址&#xff1a; https://github.com/WenjieDu/PyPOTS&#xff08;Package地址&#xff09; https://github.com/WenjieDu/BrewPOTS/tree/datawhale/202505_datawhale&#xff08;Tutorial地址&#xff09; 2.1 PyPOTS简介 PyPOTS 是一个专为处理部分观测时间序列&a…

网安学途—流量分析 attack.pcap

attack.pacp 使用Wireshark查看并分析虚拟机windows 7桌面下的attack.pcapng数据包文件&#xff0c;通过分析数据包attack.pcapng找出黑客的IP地址&#xff0c;并将黑客的IP地址作为FLAG &#xff08;形式&#xff1a;[IP地址]&#xff09;提交&#xff1a; 过滤器筛选&#x…

【大模型】DeepResearcher:通用智能体通过强化学习探索优化

DeepResearcher&#xff1a;通过强化学习在真实环境中扩展深度研究 一、引言二、技术原理&#xff08;一&#xff09;强化学习与深度研究代理&#xff08;二&#xff09;认知行为的出现&#xff08;三&#xff09;模型架构 三、实战运行方式&#xff08;一&#xff09;环境搭建…

go语言实现IP归属地查询

效果: 实现代码main.go package mainimport ("encoding/json""fmt""io/ioutil""net/http""os" )type AreaData struct {Continent string json:"continent"Country string json:"country"ZipCode …

基于STM32、HAL库的SGTL5000XNLA3R2音频接口芯片驱动程序设计

一、简介: SGTL5000XNLA3R2 是 Cirrus Logic 推出的高性能、低功耗音频编解码器,专为便携式和电池供电设备设计。它集成了立体声 ADC、DAC、麦克风前置放大器、耳机放大器和数字信号处理功能,支持 I2S/PCM 音频接口和 I2C 控制接口,非常适合与 STM32 微控制器配合使用。 二…

window 显示驱动开发-报告图形内存(一)

计算图形内存 在 VidMm 能够向客户端报告准确的帐户之前&#xff0c;它必须首先计算图形内存的总量。 VidMm 使用以下内存类型和公式来计算图形内存&#xff1a; 系统总内存 此值是操作系统可访问的系统内存总量。 BIOS 分配的内存不会出现在此数字中。 例如&#xff0c;一台…

[FA1C4] 博客链接

Blog Link 博客已经从 CSDN 转移 高情商&#xff1a;博客是给人看的 低情商&#xff1a;CSDN 已经烂了根本不能看 链接: https://fa1c4.github.io/

python通过curl访问deepseek的API调用案例

废话少说&#xff0c;开干&#xff01; API申请和充值 下面是deepeek的API网站 https://platform.deepseek.com/ 进去先注册&#xff0c;是不是手机账号密码都不重要&#xff0c;都一样&#xff0c;完事充值打米&#xff0c;主要是打米后左侧API Keys里面创建一个API Keys&am…

【计算机视觉】OpenCV项目实战:基于face_recognition库的实时人脸识别系统深度解析

基于face_recognition库的实时人脸识别系统深度解析 1. 项目概述2. 技术原理与算法设计2.1 人脸检测模块2.2 特征编码2.3 相似度计算 3. 实战部署指南3.1 环境配置3.2 数据准备3.3 实时识别流程 4. 常见问题与解决方案4.1 dlib安装失败4.2 人脸检测性能差4.3 误识别率高 5. 关键…