当前位置: 首页 > news >正文

计算机操作系统(十二)详细讲解调计算机操作系统调度算法与多处理机调度

计算机操作系统(十二)详细讲解调计算机操作系统调度算法与多处理机调度

  • 前言
  • 一、调度算法入门的3个核心概念
    • (一)调度算法是什么?
    • (二)两种基本调度模式
    • (三)什么是"饥饿"?
  • 二、单机调度算法:从简单到优化的进化史
    • (一)初代算法:先来先服务(FCFS)
    • (二)效率升级:短作业优先(SJF)
    • (三)平衡大师:高响应比优先(HRRN)
    • (四)公平至上:时间片轮转(RR)
    • (五)优先级控场:优先级调度
    • (六)终极优化:多级反馈队列
  • 三、从单机到多核:多处理机调度的新挑战
    • (一)多处理机调度是什么?
    • (二)单机vs多核调度的区别
    • (三)多核调度的两大关键
  • 四、总结


前言

  • 在之前的博客中,我们已对调度器/调度程序、闲逛调度以及调度算法的评价指标进行了讲解。
  • 接下来,本篇博客将继续深入探讨计算机操作系统的调度算法,并介绍多处理机调度相关内容

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的操作系统博客专栏
https://blog.csdn.net/2402_83322742/category_12916780.html?spm=1001.2014.3001.5482


一、调度算法入门的3个核心概念

(一)调度算法是什么?

简单说就是计算机分配任务的"规则"

  • 比如你去银行办业务,柜员按什么顺序叫号?是先来先办(先来先服务),还是优先处理简单业务(短作业优先)?
  • 计算机调度任务也需要类似规则,让CPU高效处理多个任务。

(二)两种基本调度模式

  • 非抢占式(温柔模式)任务一旦开始执行,必须等到自己主动暂停(比如等数据输入)才会换人
    🌰 就像你排队时,前面的人就算办业务很慢,也得等他办完才轮到你。

  • 抢占式(强制模式)系统可以强行打断当前任务,优先处理更紧急的
    🌰 比如急诊室里,不管前面有多少人排队,危重病人来了立刻插队。

(三)什么是"饥饿"?

有些任务因为调度规则永远轮不到执行,就像食堂打饭时,每次都让后面的人先打,你永远吃不上饭,这就是"饥饿"。好的调度算法要避免这种情况。

二、单机调度算法:从简单到优化的进化史

(一)初代算法:先来先服务(FCFS)

  • 核心思想:完全按任务到达顺序处理,先来的先做。
  • 规则:排队!谁先到队列头部,CPU就先处理谁。
  • 应用场景:早期操作系统的作业调度(比如批量处理打印任务)。
  • 是否可抢占:非抢占式(必须等当前任务自己结束)。
  • 优缺点
    ✅ 简单公平
    ❌ 效率低(比如前面有个超慢任务,后面所有快任务都得干等)
  • 会饿吗?:不会(按顺序处理,总有轮到你的时候)。

(二)效率升级:短作业优先(SJF)

  • 核心思想:优先处理"预计执行时间短"的任务。
  • 规则:每次从队列里挑最快能做完的任务先做。
  • 应用场景:适合任务执行时间可预估的场景(比如已知的计算任务)。
  • 是否可抢占:分两种版本:
    • 非抢占式SJF:新任务来了先排队,等当前任务结束再比较
    • 抢占式SJF(Shortest Remaining Time First):如果新任务剩余时间更短,直接打断当前任务
  • 优缺点
    ✅ 整体效率高(减少平均等待时间)
    ❌ 对长任务不友好(可能一直被短任务插队,导致饥饿)
  • 会饿吗?:会!如果不断来短任务,长任务可能永远做不了。

(三)平衡大师:高响应比优先(HRRN)

  • 核心思想:用一个公式平衡"等待时间"和"任务时长",避免长任务饿死。
    响应比 =(等待时间 + 执行时间)÷ 执行时间
    (等待越久、执行越短的任务,响应比越高,优先处理)
  • 规则:每次调度前计算所有任务的响应比,选最高的执行。
  • 应用场景:批处理系统(比如后台任务调度)。
  • 是否可抢占:非抢占式(任务开始后不打断)。
  • 优缺点
    ✅ 既照顾短任务,又不让长任务饿死
    ❌ 每次调度都要计算响应比,有点麻烦
  • 会饿吗?:不会(等待时间越长,响应比越高,迟早会被处理)。

(四)公平至上:时间片轮转(RR)

  • 核心思想:把CPU时间切成小块(时间片,比如10毫秒),每个任务轮流执行一个时间片。
  • 规则:任务执行到时间片结束就强制暂停,轮到下一个任务(抢占式)。
  • 应用场景:交互式系统(比如Windows、Linux的桌面任务调度)。
  • 是否可抢占:强制抢占式(时间一到必须让开)。
  • 优缺点
    ✅ 保证每个任务都能及时得到响应(比如打字时不会卡太久)
    ❌ 时间片设置不当会影响效率(太小导致频繁切换,太大变成FCFS)
  • 会饿吗?:不会(轮流执行,绝对公平)。

(五)优先级控场:优先级调度

  • 核心思想:给每个任务定优先级,优先处理高优先级任务。
  • 规则:分为两种模式:
    • 静态优先级:任务创建时定好优先级(比如系统任务永远比用户任务优先级高)
    • 动态优先级:根据运行情况调整(比如长时间没执行的任务,优先级慢慢升高)
  • 是否可抢占:可抢占或非抢占式(看系统设计,比如手机系统会优先处理来电事件)。
  • 优缺点
    ✅ 能保证关键任务优先执行(比如杀毒软件扫描时优先处理病毒检测)
    ❌ 静态优先级可能导致低优先级任务饥饿
  • 会饿吗?:静态优先级会!动态优先级可避免。

(六)终极优化:多级反馈队列

  • 核心思想:把任务分成多个队列,按优先级排队,不同队列用不同调度规则。
    🌰 比如:
    第1队列(高优先级):时间片轮转(10ms),处理交互式任务(如鼠标点击)
    第2队列(中优先级):时间片轮转(20ms),处理普通程序
    第3队列(低优先级):SJF,处理后台批量任务(如下载、备份)
  • 规则
    1. 新任务先进入最高优先级队列
    2. 每个队列时间片用完后,任务降级到下一级队列
    3. 高优先级队列空了,才处理低优先级队列
  • 应用场景:现代操作系统(如Linux的CFS调度器就是多级反馈的变种)。
  • 优缺点
    ✅ 兼顾公平性、响应速度和效率
    ❌ 队列和时间片参数配置复杂
  • 会饿吗?:不会(任务最多降到最低队列,总会被处理)。

三、从单机到多核:多处理机调度的新挑战

(一)多处理机调度是什么?

当计算机有多个CPU(或多核CPU)时,需要决定哪个任务分配到哪个CPU上执行,就像工厂里多个工人同时干活,如何分配任务让大家都不闲着。

(二)单机vs多核调度的区别

对比项单处理机(1个CPU)多处理机(多个CPU)
任务分配只决定执行顺序既要决定顺序,又要分配到哪个CPU
核心目标减少任务等待时间让所有CPU负载均衡(别有的忙死有的闲死)
特殊问题任务在不同CPU间迁移会影响效率(因为CPU缓存数据可能丢失)

(三)多核调度的两大关键

  1. 负载均衡
    让每个CPU的任务量尽量平均。
    🌰 比如3个CPU,别让2个满负荷运行,第3个空闲。
    实现方法:定期检查各CPU的任务队列,把多的任务"搬"到少的CPU上。

  2. 处理机亲和性
    让任务尽量固定在一个CPU上执行(利用CPU缓存)。
    🌰 比如你经常用某台打印机,下次直接去那台打印机的队列,不用重新找位置,速度更快。
    但如果某个CPU太忙,也会打破亲和性,把任务迁移到其他CPU(在效率和负载间找平衡)。

四、总结

  1. 单机调度进化逻辑
    从最简单的先来先服务(FCFS),到追求效率的短作业优先(SJF),发现长任务会饿死,于是用高响应比(HRRN)平衡;交互式场景需要公平,就有时间片轮转(RR);关键任务要优先,加优先级调度;最后用多级反馈队列(MFQ)综合所有优点。

  2. 多核调度核心目标
    不再只关注单个CPU的效率,而是让多个CPU一起高效工作,重点解决"任务怎么分"(负载均衡)和"怎么分更高效"(处理机亲和性)。

  3. 一句话总结
    调度算法没有"最好",只有"最合适"——根据场景选规则:

    • 批处理任务(如后台计算):优先选SJF/HRRN
    • 桌面交互(如看视频+打字):用时间片轮转+优先级调度
    • 多核服务器:重点做负载均衡,兼顾亲和性

以上就是对本次关于操作系统博客内容的总结,后续我们将深入探讨操作系统更多知识。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的操作系统博客专栏
https://blog.csdn.net/2402_83322742/category_12916780.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

相关文章:

  • 使用 Elasticsearch 和 Red Hat OpenShift AI 提升工作流程效率
  • 什么是VR场景?VR与3D漫游到底有什么区别
  • CustomSVG,一键生成SVG,文字秒变矢量图(WIN/MAC)
  • 阿里开源 CosyVoice2:打造 TTS 文本转语音实战应用
  • Springboot通过SSE实现实时消息返回
  • [原创](计算机数学)(The Probability Lifesaver)(P14): 推导计算 In(1-u) 约等于 -u
  • 得力DE-620K针式打印机打印速度不能调节维修一例
  • C++ std::find() 函数全解析
  • Spyglass:CDC官方Hands-on Training(三)
  • 服务器数据迁移终极指南:网站、数据库、邮件无缝迁移策略与工具实战 (2025)
  • A10服务器使用vllm推理框架成功运行Qwen3大模型
  • MCP 服务与 Agent 协同架构的理论基石:从分布式智能到生态化协作
  • YOLOV11改进策略【最新注意力机制】CVPR2025局部区域注意力机制LRSA-增强局部区域特征之间的交互
  • Android屏幕适配利器:Kotlin动态尺寸计算工具类完整封装
  • 矩阵:线性代数在AI大模型中的核心支柱
  • Kotlin-数组,集合类以及序列
  • SQLMesh Typed Macros:让SQL宏更强大、更安全、更易维护
  • 探索C++对象模型:This指针与(构造、析构)成员函数的深度解析(中篇)
  • iOS使用Metal对采集视频进行渲染
  • OpenHarmony外设驱动使用 (十三),Vibrator
  • 有哪些好的网页设计/优化设计全部答案
  • 李静做的化妆品网站/免费的推广平台
  • 那个网站的机票做便宜/免费优化
  • 企业网站美化/4p营销理论
  • 威海网站制作/全网整合营销
  • 郑州高端网站公司/太原百度搜索排名优化