进程与线程--CPU调度(1)--调度的概述
操作系统处理机调度三层体系 七状态模型前面我们讲透了进程的五状态转换、线程的实现与模型。但系统里同时存在几十上百个进程CPU 算力有限该先让谁运行、该把谁暂时搁置就需要「处理机调度」来统一管理。调度不是只有 “选进程跑 CPU” 这一步而是分为高级、中级、低级三层完整体系对应进程从硬盘到内存、再到 CPU 的全流程。一、处理机调度基本概念定义操作系统按照特定算法从候选的进程 / 作业中选择一个将 CPU 处理机资源分配给它核心目标是兼顾公平性、系统效率与资源利用率。类比 把整个计算机系统比作一家公司外存硬盘 外部简历人才池人还没入职内存 公司办公区有正式工位员工在公司待命CPU 核心项目组只有进入项目组才能真正干活执行调度的本质就是决定 “哪些人能入职、哪些人先居家待命、哪些人能进核心项目干活” 的整套规则。二、调度的三个层次从入职到分配项目1. 高级调度作业调度 定义也叫作业调度从外存的后备作业队列中挑选合适的作业将其调入内存并为其创建进程、分配初始资源。1.调度对象作业外存中待运行的程序2.流向外存 → 内存3.核心作用决定哪些作业有资格进入系统运行类比公司 HR 从外部简历池外存里筛选候选人发 offer、办理入职手续给员工分配工位内存让他成为公司正式员工创建进程。核心特点发生频率最低几分钟、几小时甚至更久才执行一次一个作业只会被调入一次、调出一次是程序进入系统的第一道门槛批处理系统中作用最突出现代交互式系统Windows、Linux 桌面通常没有严格的高级调度。真实例子早期批处理系统中用户提交的计算任务先全部存在磁带 / 硬盘里操作员启动作业调度选中的任务才会加载进内存运行。2. 中级调度内存调度 定义也叫内存调度为了缓解内存不足的压力、提升资源利用率把内存中暂时不运行的进程调到外存 “挂起”等内存有空余、进程具备运行条件时再调回内存。1.调度对象进程2.流向外存 ↔ 内存双向3.核心作用在内存和外存之间做进程换入换出也就是内存 “对换” 技术类比公司业务淡季、工位不够时把暂时没项目的员工安排居家待命挂起到外存收回工位给更紧急的项目等业务回暖、有空位了再把员工召回公司上班调回内存。核心特点发生频率中等根据内存占用情况动态执行可以多次换入换出同一个进程可以被反复挂起、激活是虚拟内存、交换分区技术的底层逻辑之一。真实例子Windows 的虚拟内存、Linux 的 swap 交换分区当物理内存不足时系统会把长时间不活跃的进程数据换到硬盘上腾出内存给前台程序背后就是中级调度的思想。3. 低级调度进程调度 定义也叫进程调度从内存的就绪队列中挑选一个进程将 CPU 资源分配给它让它进入运行态执行指令。1.调度对象内存中的就绪进程2.流向内存 → CPU3.核心作用决定哪个进程能真正占用 CPU 执行是操作系统最核心、最基础的调度类比部门主管从公司办公区待命的员工就绪队列里挑选合适的人分配到当前核心项目CPU上干活。核心特点发生频率最高几毫秒就会执行一次是操作系统最频繁的调度是所有多道程序系统的必备功能我们常说的时间片轮转、优先级调度、短作业优先等算法都属于低级调度的具体算法。真实例子我们平时用电脑时一边刷网页一边听歌一边挂微信系统每隔几毫秒就切换一次进程让多个程序 “同时运行”这个切换决策就是低级调度完成的。三、三层调度核心对比表表格调度层级别名调度对象数据流向发生频率核心作用高级调度作业调度、长程调度作业外存 → 内存最低决定作业能否进入系统中级调度内存调度、中程调度进程外存 ↔ 内存中等内存不足时换出进程缓解内存压力低级调度进程调度、短程调度就绪进程内存 → CPU最高决定哪个进程占用 CPU 运行四、进程七状态模型挂起态的引入1. 为什么要新增挂起态我们之前学的进程五状态模型创建、就绪、运行、阻塞、终止默认所有进程都在内存里。但实际系统中内存空间有限进程太多会导致内存不足、系统卡顿。引入中级调度后进程可以被调到外存暂时存放这种 “进程在外存、暂时不参与调度” 的状态就叫挂起态。根据挂起前的状态又细分为「就绪挂起」和「阻塞挂起」五状态模型就扩展成了七状态模型。2. 挂起态的两种细分就绪挂起进程在外存只要调回内存就能立刻进入就绪态、等待 CPU类比员工居家待命随时能干活只要召回公司就能上岗阻塞挂起进程在外存同时还在等待某个事件就算调回内存也还是阻塞态类比员工在家一边待命一边等审批文件就算回公司也得继续等文件3.阻塞态与挂起态的区别很多同学容易混淆这两个状态核心区别只有一条进程映像还在不在内存里。阻塞态进程还在内存中只是在等待 I/O、信号等事件事件一到立刻就能变回就绪态参与 CPU 调度。类比员工在公司工位上坐着只是在等快递 / 审批东西一到就能马上干活。挂起态进程已经被调出内存数据放到外存里了必须先经过 “激活” 调回内存才能参与后续调度。类比员工已经回家了公司连工位都收回了必须先召回公司、分配工位才能安排工作。4. 七状态的核心转换逻辑就绪态 → 就绪挂起内存不足时把就绪队列里优先级低、长时间不运行的进程挂到外存腾出内存空间阻塞态 → 阻塞挂起内存不足时本来就在阻塞等待的进程反正也跑不了干脆挂到外存优先腾内存给能运行的进程就绪挂起 → 就绪态激活内存有空闲时把就绪挂起的进程调回内存重新加入就绪队列阻塞挂起 → 阻塞态激活内存有空闲时把阻塞挂起的进程调回内存继续等待事件阻塞挂起 → 就绪挂起进程等待的事件发生了阻塞挂起就变成就绪挂起等后续激活回内存后直接就是就绪态运行态 → 就绪挂起特殊场景下正在运行的进程也可能被直接挂起腾出内存给更紧急的进程创建态--就绪挂起创建进程之后可能由于内存不足而进入就绪挂起状态五、总结处理机调度分为三层高级调度管 “作业能不能进内存”中级调度管 “进程在内外存之间换入换出”低级调度管 “哪个进程能上 CPU 运行”频率从低到高。挂起态的本质是进程被调出内存、放到外存分为就绪挂起和阻塞挂起和阻塞态的核心区别是 “是否还在内存中”。七状态模型是五状态的扩展完美匹配三层调度的完整流程是内存资源紧张场景下的必然设计。