操作系统 | 进程调度机制全解析

CPU的"相亲"现场:谁才能坐上那个唯一的宝座?

嘿,各位朋友们,大家好!今天我们来聊聊那个每天都在疯狂"相亲"的地方------CPU

大家都知道,我们的电脑里跑着成百上千个进程(微信、Chrome、网易云...),但CPU核心就那么几个。这就好比是"一夫多妻"制,哦不,是"千军万马过独木桥"。

那么问题来了:到底谁才有资格坐上CPU这个"宝座"?是谁在背后操纵这一切?

今天,我们就结合这张来自"西安电子科技大学出版社"的经典流程图,带你走进操作系统的"后宫",看看这场进程调度的大戏是怎么演的。


🎭 角色介绍:调度大戏的演员表

在开演之前,我们先认识一下这张图里的几位关键"大咖":

  1. CPU(宝座):全场唯一的C位,所有进程都想上去爽一把。

  2. 就绪进程(求职者):万事俱备,只欠CPU。它们已经加载进内存,随时准备开干。

  3. 进程控制块/PCB(身份证):每个进程的档案袋,里面记录了它的优先级、状态、寄存器数据等。没有这个,操作系统根本不认识你是谁。

  4. 调度程序(调度中心):这是整个流程的大脑,它内部包含了三个得力干将:

    • 排队器:负责把人排好队。

    • 分派器:负责挑人上位。

    • 上下文切换器:负责交接工作。


🎬 第一幕:排队!排队!排队!

场景:排队器 & 就绪队列

当你的程序启动时,它还不能马上运行,得先去排队器 那里报到。排队器是个讲究规矩的保安,它会根据一定的策略(比如优先级高低、先来后到),把你塞进就绪队列里。

  • 排队器的工作:它就像一个整理扑克牌的人,把杂乱的进程按照某种规则(算法)理得整整齐齐。

  • 就绪队列:这就是一个等候室。大家在这里嗑瓜子、聊天(其实是处于就绪状态),眼巴巴地盯着CPU的方向。

💡 划重点:在这里,进程虽然"就绪"了,但还没拿到CPU的使用权,就像你在海底捞拿号排队,菜都点好了,但还得等叫号。


🎬 第二幕:谁去坐那个位置?

场景:分派器

这时候,CPU空闲了(或者上一个进程时间片用完了),分派器闪亮登场。

分派器是调度程序里的"执行者"。它会看一眼就绪队列,根据调度算法(比如"短作业优先"或者"时间片轮转"),一把抓出一个幸运儿:"就你了,出来!"

分派器的主要任务

  • 从队列中移除该进程。

  • 决定把这个进程送到CPU上去。


🎬 第三幕:交接仪式(最累的一步)

场景:上下文切换器

这一步是整张图的核心 ,也是最耗费时间的操作------上下文切换

想象一下,CPU是一个正在写作业的学生。

  • 旧进程(前任):正在做数学题,写到一半被老师叫停了。

  • 新进程(现任):刚被分派器选中,准备做英语题。

上下文切换器就是那个收作业又发作业的课代表:

  1. 保存现场 :它必须把"前任"刚才写到第几行、笔拿在左手还是右手(寄存器状态、程序计数器PC值等)全部记录在进程控制块里。不然下次轮到他时,他就不知道写到哪了。

  2. 恢复现场:把"现任"上次留下的作业本摊开,笔递到他手里,告诉他:"接着上次这里继续写"。

⚠️ 注意:这个过程虽然很快,但也是有开销的!如果切换太频繁,CPU光忙着交接工作了,实际干活的时间就少了,这就是所谓的"上下文切换开销"。


🎬 第四幕:下台与轮回

场景:移出运行进程

进程在CPU上爽完之后,会有几种结局:

  1. 时间片到了 :老老实实下来,回到就绪队列尾部重新排队(图左上角的"移出运行进程" -> "就绪进程")。

  2. 等待IO(比如读硬盘) :主动让出CPU,去阻塞队列睡觉,等硬盘读完了再回来排队。

  3. 任务结束:直接"销户",释放资源。


📌 总结一下:一张图看懂流程

  1. 就绪进程 -> 进入排队器 -> 加入就绪队列

  2. 分派器 -> 从队列挑人 -> 触发上下文切换器

  3. 上下文切换器 -> 保存旧的,加载新的(查PCB ) -> 上CPU运行。

  4. CPU -> 运行结束/时间片到 -> 移出 -> 循环往复。

操作系统的调度机制,本质上就是一场精密的资源分配游戏。 它保证了我们每个人感觉电脑在"同时"运行很多程序,虽然实际上CPU是在疯狂地"左右横跳"。

下次你的电脑卡顿的时候,你可以想象一下:可能是上下文切换器 太忙了,或者就绪队列太长啦!


喜欢这篇硬核科普吗?点个赞再走呗!👍

相关推荐
talen_hx2962 小时前
OkHttpClient的最佳实践优化方案
java·笔记·学习
Byron__2 小时前
AI学习_05_LangChain使用
学习·langchain
三品吉他手会点灯2 小时前
C语言学习笔记 - 26.C编程预备计算机专业知识 - 15~25关键内容回顾
c语言·笔记·学习
知识分享小能手2 小时前
R语言入门学习教程,从入门到精通,R语言多维数据可视化(12)
学习·信息可视化·r语言
我命由我1234516 小时前
程序员的心理学学习笔记 - 空杯心态
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
stm32 菜鸟16 小时前
nucleo-f411re学习记录-13,flash的操作
学习
晓梦林16 小时前
3170靶场学习笔记
笔记·学习
ErizJ17 小时前
Redis|学习笔记
redis·笔记·学习
加油201917 小时前
方法论:如何系统性的学习?
学习·学习方法·方法论