计算机操作系统(十二)详细讲解调计算机操作系统调度算法与多处理机调度
计算机操作系统(十二)详细讲解调计算机操作系统调度算法与多处理机调度
- 前言
- 一、调度算法入门的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,处理后台批量任务(如下载、备份) - 规则:
- 新任务先进入最高优先级队列
- 每个队列时间片用完后,任务降级到下一级队列
- 高优先级队列空了,才处理低优先级队列
- 应用场景:现代操作系统(如Linux的CFS调度器就是多级反馈的变种)。
- 优缺点:
✅ 兼顾公平性、响应速度和效率
❌ 队列和时间片参数配置复杂 - 会饿吗?:不会(任务最多降到最低队列,总会被处理)。
三、从单机到多核:多处理机调度的新挑战
(一)多处理机调度是什么?
当计算机有多个CPU(或多核CPU)时,需要决定哪个任务分配到哪个CPU上执行,就像工厂里多个工人同时干活,如何分配任务让大家都不闲着。
(二)单机vs多核调度的区别
对比项 | 单处理机(1个CPU) | 多处理机(多个CPU) |
---|---|---|
任务分配 | 只决定执行顺序 | 既要决定顺序,又要分配到哪个CPU |
核心目标 | 减少任务等待时间 | 让所有CPU负载均衡(别有的忙死有的闲死) |
特殊问题 | 无 | 任务在不同CPU间迁移会影响效率(因为CPU缓存数据可能丢失) |
(三)多核调度的两大关键
-
负载均衡:
让每个CPU的任务量尽量平均。
🌰 比如3个CPU,别让2个满负荷运行,第3个空闲。
实现方法:定期检查各CPU的任务队列,把多的任务"搬"到少的CPU上。 -
处理机亲和性:
让任务尽量固定在一个CPU上执行(利用CPU缓存)。
🌰 比如你经常用某台打印机,下次直接去那台打印机的队列,不用重新找位置,速度更快。
但如果某个CPU太忙,也会打破亲和性,把任务迁移到其他CPU(在效率和负载间找平衡)。
四、总结
-
单机调度进化逻辑:
从最简单的先来先服务(FCFS),到追求效率的短作业优先(SJF),发现长任务会饿死,于是用高响应比(HRRN)平衡;交互式场景需要公平,就有时间片轮转(RR);关键任务要优先,加优先级调度;最后用多级反馈队列(MFQ)综合所有优点。 -
多核调度核心目标:
不再只关注单个CPU的效率,而是让多个CPU一起高效工作,重点解决"任务怎么分"(负载均衡)和"怎么分更高效"(处理机亲和性)。 -
一句话总结:
调度算法没有"最好",只有"最合适"——根据场景选规则:- 批处理任务(如后台计算):优先选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
非常感谢您的阅读,喜欢的话记得三连哦 |