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

调度器与闲逛进程详解,(操作系统OS)

核心比喻回顾

  • CPU:办公室里唯一的超级打工人
  • 进程:一件件要处理的任务
  • 操作系统:管理办公室的工头

现在,我们来聚焦工头的一个核心部门——调度中心


1. 什么是调度器?(The Dispatch Center)

在我们的比喻里,调度器(Scheduler)就是工头的大脑,或者说他随身携带的那个最核心的“工作安排计划板”。它不是整个工头,而是工头专门负责“安排工作”的那一部分功能。

它是操作系统内核里一个至关重要的程序,专门用来回答这两个问题:

  1. “下一个该谁干活了?”
  2. “这个活能干多久?”

它的存在,就是为了让我们的超级打工人(CPU)永不停歇、高效运转,确保所有任务都能得到公平或及时的处理。

2. 调度器具体干些啥?(调度器的工作内容)

工头的这个“计划板”上,有几项关键的决策要做:

  • 决定谁上(确定运行进程):工头看着一堆等待处理的任务(就绪队列),他得按照一定的规矩来挑一个。是“先来的先做”(先来先服务)?还是“老板催得最急的先做”(优先级调度)?这个“规矩”就是调度算法
  • 决定干多久(确定运行时间):工头对打工人说:“A报告很重要,你专心写半小时。B邮件不急,你看5分钟就行。” 这就是给不同的任务分配不同的时间片
  • 决定换不换(决定是否下处理机):在打工人干活的时候,工头会一直盯着。可能是时间到了,也可能是来了更紧急的任务,工头会立刻做出判断:“停!换下一个!”

3. 什么时候调度器会启动?(触发调度器工作的事件)

工头的“计划板”并不会时时刻刻都在变,只有在发生特定事件时,他才会拿出来重新规划一下。这些事件包括:

  • 来了新活(创建新进程):办公室突然接了一个新任务。工头需要看一眼,如果这个新任务特别紧急(优先级高),他可能会让打工人立刻停下手中的活,先做这个新的。
  • 干完一个活(进程退出):打工人报告:“A任务完成了!”。打工人现在闲下来了,工头必须马上从等待列表里挑一个新任务给他。
  • 活干到一半卡住了(进程阻塞):打工人说:“我需要等设计部的图,现在干不下去了。” 工头马上会说:“那你先等着,来,这是C任务,你先做着。”
  • 等待的东西来了(发生I/O中断):设计部把图发过来了,并大喊一声:“图来了!”(这就是I/O中断)。之前被卡住的任务现在可以继续了。工头听到后,会重新评估一下,是让打工人继续手头的活,还是回头去做刚才那个等图的任务?
  • 闹钟响了(时钟中断):如果工头采用的是“霸道总裁”风格(抢占式),他会设一个闹钟。比如每隔10分钟响一次,闹钟一响,他就去检查一下,是不是该换个任务了,以保证“雨露均沾”。

4. 到底在调度谁?(调度对象)

这个问题其实是在问,工头安排的“最小工作单元”是什么?

  • 在比较老的系统里:工头安排的是一整个“项目”(进程)。他只会说:“去做A项目!”。至于项目里面具体先做哪一步,他不管。
  • 在现代化的系统里:管理更加精细。一个“项目”(进程)被分成了很多个小“任务步骤”(线程)。工头现在可以直接安排:“去做A项目里的‘数据分析’那一步!”。这样更灵活高效。
    • 在这种模式下,进程更像是一个“资源文件夹”,里面装着项目需要的所有资料(内存、文件等)。而内核级线程才是那个真正被工头拿来安排给打工人(CPU)的“具体任务步骤”。

所以,调度器调度的直接对象,是能上CPU运行的最小单位。在支持内核级线程的系统里,就是内核级线程。

5. 什么是闲逛进程?(The "Look Busy" Process)

好,现在最有趣的问题来了。如果有一天,办公室里所有的任务都完成了,等待列表也空了,没有任何活要干。这时候怎么办?

难道让我们的超级打工人(CPU)直接关机下班吗?不行!因为可能下一秒就有新任务进来。

于是,工头想出了一个绝妙的主意。他给了打工人一个永远也做不完、但又极其简单的“万年任务”,我们叫它**“闲逛进程”(Idle Process)**。

这个任务的内容是:“坐在原地,反复做一套广播体操,同时竖起耳朵听着外面的动静。”

闲逛进程的作用非常关键:

  1. 让CPU不“停机”:只要系统开着,CPU就永远有事干(执行闲逛进程),确保它随时处于“工作状态”,而不是“关机状态”。
  2. 优先级最低:这个“做体操”的任务是全公司最不重要的活。只要有任何一个真正的任务来了,打工人会立刻、马上、毫不犹豫地丢下体操,去做正事。
  3. 能耗极低:这套“广播体操”设计的非常科学(比如执行一条特殊的“Halt”指令),虽然CPU在动,但基本不怎么消耗能量,就像手机息屏待机一样。
  4. 时刻准备响应(最重要的作用):在做每节体操(执行每条指令)后,打工人都会检查一下有没有人叫他(检查中断)。一旦有中断发生(比如鼠标动了、键盘被敲了、网络来数据了),他能立刻响应。中断处理程序可能会把一个新任务放进等待列表,当中断处理完后,调度器一看:“呀,来新活了!” 于是马上就让打工人别做操了,去干正事。

总结一下:闲逛进程就像一个系统的“待机画面”,它让CPU保持最低限度的运行,不消耗太多能量,但又能保证在任何新任务到来时,系统能被瞬间“唤醒”。

http://www.dtcms.com/a/272467.html

相关文章:

  • UI前端与数字孪生结合案例分享:智慧城市的智慧能源管理系统
  • 数据结构笔记10:排序算法
  • Windows 本地 使用mkcert 配置HTTPS 自签名证书
  • Java并发 - 阻塞队列详解
  • XSS(ctfshow)
  • 文心大模型4.5开源测评:保姆级部署教程+多维度测试验证
  • 图书管理系统(完结版)
  • PyCharm 中 Python 解释器的添加选项及作用
  • 创始人IP如何进阶?三次关键突破实现高效转化
  • QT解析文本框数据——详解
  • pycharm中自动补全方法返回变量
  • 自动化脚本配置网络IP、主机名、网段
  • React封装过哪些组件-下拉选择器和弹窗表单
  • 常用的.gitconfig 配置
  • 【显示模块】嵌入式显示与触摸屏技术理论
  • HarmonyOS AI辅助编程工具(CodeGenie)UI生成
  • 时序数据库的存储之道:从数据特性看技术要点
  • 使用深度学习框架yolov8训练监控视角下非机动车电动车头盔佩戴检测数据集VOC+YOLO格式11999张4类别步骤和流程
  • UEditor 对接 秀米 手机编辑器流程与问题
  • ClickHouse 查看正在执行的SQL查询
  • Django--01基本请求与响应流程
  • go go go 出发咯 - go web开发入门系列(四) 数据库ORM框架集成与解读
  • selenium跳转到新页面时如何进行定位
  • 前缀和|差分
  • S7-1200 与 S7-300 PNS7-400 PN UDP 通信 TIA 相同项目
  • 缓存一致性问题(Cache Coherence Problem)是什么?
  • 使用Word/Excel管理需求的10个痛点及解决方案Perforce ALM
  • Word中字号与公式字体磅值(pt)的对应关系
  • 【AI智能体】智能音视频-通过关键词打断语音对话
  • RuoYi-Cloud ruoyi-gateway 网关模块