调度器与闲逛进程详解,(操作系统OS)
核心比喻回顾
- CPU:办公室里唯一的超级打工人。
- 进程:一件件要处理的任务。
- 操作系统:管理办公室的工头。
现在,我们来聚焦工头的一个核心部门——调度中心。
1. 什么是调度器?(The Dispatch Center)
在我们的比喻里,调度器(Scheduler)就是工头的大脑,或者说他随身携带的那个最核心的“工作安排计划板”。它不是整个工头,而是工头专门负责“安排工作”的那一部分功能。
它是操作系统内核里一个至关重要的程序,专门用来回答这两个问题:
- “下一个该谁干活了?”
- “这个活能干多久?”
它的存在,就是为了让我们的超级打工人(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)**。
这个任务的内容是:“坐在原地,反复做一套广播体操,同时竖起耳朵听着外面的动静。”
闲逛进程的作用非常关键:
- 让CPU不“停机”:只要系统开着,CPU就永远有事干(执行闲逛进程),确保它随时处于“工作状态”,而不是“关机状态”。
- 优先级最低:这个“做体操”的任务是全公司最不重要的活。只要有任何一个真正的任务来了,打工人会立刻、马上、毫不犹豫地丢下体操,去做正事。
- 能耗极低:这套“广播体操”设计的非常科学(比如执行一条特殊的“Halt”指令),虽然CPU在动,但基本不怎么消耗能量,就像手机息屏待机一样。
- 时刻准备响应(最重要的作用):在做每节体操(执行每条指令)后,打工人都会检查一下有没有人叫他(检查中断)。一旦有中断发生(比如鼠标动了、键盘被敲了、网络来数据了),他能立刻响应。中断处理程序可能会把一个新任务放进等待列表,当中断处理完后,调度器一看:“呀,来新活了!” 于是马上就让打工人别做操了,去干正事。
总结一下:闲逛进程就像一个系统的“待机画面”,它让CPU保持最低限度的运行,不消耗太多能量,但又能保证在任何新任务到来时,系统能被瞬间“唤醒”。