操作系统核心:从进程线程到调度算法,这一篇就够了

操作系统核心:从进程线程到调度算法,这一篇就够了
目录前言一、进程与线程程序为什么需要“动”起来1.1 程序的两种执行方式1.2 进程资源分配的基本单位1.3 线程CPU调度的最小单位1.4 进程与线程的对比面试高频二、进程的状态与转换进程的一生2.1 七种状态详解2.2 挂起状态的深入理解2.3 状态转换的关键规则三、线程的实现三种映射模型3.1 用户级线程ULT3.2 内核级线程KLT3.3 三种映射模型对比四、进程的组织与控制PCB是关键4.1 进程的组成4.2 PCB的作用4.3 PCB的三种组织方式4.4 进程控制的主要操作五、进程间通信IPC进程怎么聊天5.1 共享存储器系统5.2 消息传递5.3 管道通信5.4 信号六、CPU调度与调度算法6.1 调度的层次6.2 调度算法的评价指标6.3 七种调度算法详解6.3.1 先来先服务FCFS6.3.2 短作业优先SJF6.3.3 优先级调度PR6.3.4 高响应比优先HRRN6.3.5 时间片轮转RR6.3.6 多级队列调度MLQ6.3.7 多级反馈队列调度MLFQ⭐七、知识体系总结后记前言最近系统性地整理了操作系统进程管理模块的知识发现这块内容虽然基础但知识点密集、概念容易混淆——用户级线程和内核级线程有什么区别多级队列和多级反馈队列的核心差异是什么进程的七种状态之间如何转换这篇文章将按照“进程与线程 → 状态转换 → 线程实现 → 进程控制 → 进程间通信 → CPU调度”的逻辑主线把零散的知识点串联成一个完整的知识体系。适合正在准备操作系统考试、面试或想系统梳理这部分知识的同学阅读。阅读建议全文约5000字建议先看目录定位自己需要的章节按需阅读。一、进程与线程程序为什么需要“动”起来1.1 程序的两种执行方式程序的执行过程可以分为顺序执行和并发执行两种方式。顺序执行的特征顺序性、封闭性、可再现性。程序按代码顺序一条条执行像流水线一样稳定可预测。并发执行则完全不同它带来了三个新特征间断性程序走走停停不是一口气跑完失去封闭性多个程序共享全机资源执行状态受外界环境影响不可再现性同样的输入多次运行可能得到不同结果正是为了解决并发执行带来的这些问题操作系统才引入了进程这个概念。1.2 进程资源分配的基本单位进程的定义进程是程序的一次执行是程序的实体是系统进行资源分配和调度的基本单位。进程的五大特征特征含义结构性由程序段、数据段、PCB三部分组成PCB是进程存在的唯一标志动态性进程具有生命周期创建→运行→消亡并发性宏观并行、微观串行独立性进程是资源分配与调度的基本单位拥有独立资源异步性进程以不可预知的速度前进进程与程序的区别常考对比维度进程程序本质程序的一次执行实例静态的指令集合状态活动的、有生命周期静态的、存储在磁盘关系进程包含程序的代码部分程序是进程的代码来源存储位置内存中外存中1.3 线程CPU调度的最小单位线程的定义线程是进程内部的一个基本执行单元是操作系统进行CPU调度的最小单位。线程的四大特征轻型实体基本不拥有系统资源只有保证独立运行的最少资源独立调度和分派的基本单位在多线程OS中线程是能独立运行的基本单位可并发执行同一进程的多个线程可以并发执行共享进程资源同一进程中的各个线程共享该进程所拥有的资源1.4 进程与线程的对比面试高频对比维度进程线程调度单位资源分配的基本单位CPU调度的基本单位拥有资源拥有独立的系统资源基本不拥有资源共享进程资源独立性进程间独立性高同一进程的线程间独立性低系统开销创建/撤销/切换开销大创建/撤销/切换开销小并发性进程间可并发同一进程的线程间也可并发一句话总结进程是资源拥有的基本单位线程是CPU调度的基本单位。进程是“容器”线程是容器里真正干活的“人”。二、进程的状态与转换进程的一生2.1 七种状态详解进程在其生命周期中会经历多种状态理解这些状态及其转换条件是理解操作系统调度机制的基础。状态含义触发条件创建态进程正在被创建用户登录、作业调度、应用请求等就绪态已获得除CPU外的所有资源等待调度创建完成/被唤醒后运行态正在CPU上执行被调度器选中阻塞态因等待某事件而暂时无法执行请求I/O、等待资源等终止态执行结束系统正在回收资源正常结束/异常/外界干预挂起态从内存移到外存释放资源终端用户请求、负荷调节等激活态从外存调回内存恢复运行挂起的逆操作2.2 挂起状态的深入理解挂起是指操作系统通过特定原语将进程从内存暂时转移到外存使其脱离CPU调度范围的操作。挂起后的进程不再参与系统调度直到被激活为止。挂起的常见原因终端用户请求父进程请求负荷调节需要操作系统需要2.3 状态转换的关键规则创建态 → 就绪态资源分配完成 就绪态 → 运行态被调度器选中 运行态 → 就绪态时间片用完/被抢占 运行态 → 阻塞态等待I/O或资源 阻塞态 → 就绪态等待的事件完成 运行态 → 终止态执行结束/异常终止 任何状态 → 挂起态被主动挂起 挂起态 → 激活态被唤醒调回核心记忆点就绪→运行由调度程序决定运行→阻塞是进程主动行为阻塞→就绪由事件完成触发。三、线程的实现三种映射模型线程的实现方式决定了线程的调度效率、并发能力和系统开销。主要有三种模型。3.1 用户级线程ULT定义不依赖操作系统内核由应用程序利用线程库提供的操作控制的线程。内核只知道进程的存在调度单位是进程。优点线程切换在用户空间完成不需要切换到内核态开销小调度算法可以进程专用线程实现与OS无关可移植性好缺点一个用户级线程被阻塞后整个进程都会被阻塞多个线程不可在多核处理机上并行运行3.2 内核级线程KLT定义依赖于内核由操作系统内核完成创建和撤销工作的线程。在内核空间实现。优点多处理机系统中内核可同时调度同一进程的多个线程 →真正的并行一个线程阻塞了内核可调度该进程的其他线程内核本身可以采用多线程技术缺点线程切换需要内核参与必须从用户态切换到内核态开销大创建、销毁、挂起、唤醒等操作开销较大依赖内核调度策略灵活性降低3.3 三种映射模型对比模型映射关系优点缺点典型代表一对一1个ULT → 1个KLT并行能力强阻塞问题少开销大创建数量受限Linux NPTL、Windows多对一多个ULT → 1个KLT开销低自定义调度一个阻塞全进程卡死早期Green Threads多对多n个ULT → m个KLT资源利用率高灵活调度实现复杂负载均衡难Go goroutine记忆口诀一对一够硬核并行强但耗资源多对一够轻量切换快但怕阻塞多对多最聪明兼顾两者但难实现。四、进程的组织与控制PCB是关键4.1 进程的组成进程由三部分组成程序段要执行的指令数据段指令操作的数据进程控制块PCB进程存在的唯一标志常驻内存4.2 PCB的作用作为独立运行基本单位的标志实现间断式的运行方式保存切换时的现场信息提供进程管理、调度所需的信息实现与其他进程的同步与通信4.3 PCB的三种组织方式组织方式原理优点缺点线性方式所有PCB放在一张线性表中实现简单开销小每次查找需扫描整张表链接方式按状态分为多个链表分类管理高效动态管理好链表操作需维护指针索引方式为不同状态建索引表查找速度快支持随机访问需额外存储空间4.4 进程控制的主要操作操作触发事件核心动作创建用户登录、作业调度、应用请求申请PCB→分配资源→初始化PCB→入就绪队列终止正常结束、异常结束、外界干预停止运行→回收资源→移除PCB阻塞请求资源失败、等待操作完成保护现场→转为阻塞态→入等待队列唤醒等待的事件发生从等待队列移除→转为就绪态→入就绪队列挂起用户请求、负荷调节修改状态→数据换出外存→更新资源记录激活挂起的逆操作数据调入内存→修改状态→入相应队列切换调度决策保存当前上下文→更新PCB→选择新进程→恢复上下文五、进程间通信IPC进程怎么聊天进程间通信是指进程之间的信息交换。主要有以下几种方式5.1 共享存储器系统原理在通信进程之间建立一块可直接访问的共享存储空间。两种类型基于共享数据结构粒度精细用队列、栈等特定结构通信低级通信基于共享存储区粒度粗用一块连续的无格式内存区域高级通信数据量大5.2 消息传递原理以格式化消息为单位通过内核作为中介传递。两类方式直接通信发送方和接收方直接指定对方ID一对一传递间接通信通过中间媒介如信箱传递5.3 管道通信原理pipe是指用于连接读/写进程的共享文件本质是内核维护的一块内存缓冲区。三大特性伪文件属性数据存储在内核缓冲区中通过文件描述符访问半双工通信默认单向传输字节流传输无结构需自行处理数据拆分管道机制需提供的三种协调能力互斥同一时间只有一个进程操作管道同步协调读写速度确定对方状态保证数据传输的可靠性分类匿名管道仅支持有亲缘关系的进程父子、兄弟命名管道通过管道文件实现任意进程间通信5.4 信号定义信号是进程间通信机制中唯一的异步通信机制可以在任何时候发送信号给某一进程无须知道该进程的状态。关键点信号是异步的发送方不需要等待接收方就绪。六、CPU调度与调度算法6.1 调度的层次调度类型调度对象作用出现频率高级调度长程/作业调度作业将外存作业调入内存创建进程低低级调度短程/进程调度进程决定就绪队列中哪个进程获得CPU最高必不可少注意实时系统和分时系统不设置高级调度因为交互式系统需要“随到随进”实时系统需要确定的响应时间。6.2 调度算法的评价指标指标定义公式CPU利用率CPU有效工作时间占比有效时间/(有效时间空闲时间)系统吞吐量单位时间内完成的作业数量—周转时间从提交到完成的时间间隔完成时间 - 到达时间带权周转时间周转时间与服务时间之比T/Ts等待时间在就绪队列中等待的总时间—响应时间从提交到首次获得CPU的时间—6.3 七种调度算法详解6.3.1 先来先服务FCFS原理按作业/进程到达的先后次序调度。特点实现简单但对短作业不利 convoy effect 护航效应。6.3.2 短作业优先SJF原理选择估计运行时间最短的作业/进程。两种模式非抢占式SJF运行时间相同时按FCFS抢占式SJF最短剩余时间优先有新进程剩余时间更短时抢占特点平均等待时间最短但需要预知运行时间长作业可能饥饿。6.3.3 优先级调度PR原理基于作业/进程的紧迫程度赋予优先级。两种类型非抢占式抢占式优缺点✅ 实现简单考虑了紧迫程度❌低优先级可能永远得不到运行饥饿6.3.4 高响应比优先HRRN原理响应比 Rp (等待时间 要求服务时间) / 要求服务时间 1 等待时间/要求服务时间特点只用于作业调度兼顾了等待时间和运行时间长作业等待久了也能获得服务不会饥饿。6.3.5 时间片轮转RR原理所有进程按FCFS排队每个进程运行一个时间片后重新排队。切换时机进程运行结束时间片用完特点响应时间快适合分时系统但时间片大小选择关键——太短则切换开销大太长则退化为FCFS。6.3.6 多级队列调度MLQ原理将就绪队列分为若干个不同性质的进程固定分在不同队列不同队列采用不同调度算法不允许跨队列。核心本质静态分类、刚性隔离——进程“出身定终身”。6.3.7 多级反馈队列调度MLFQ⭐原理在多个优先级队列基础上允许进程根据运行时行为动态迁移。采用“奖惩机制”消耗完时间片的进程降级主动让出CPU如I/O操作的进程升级配合“老化”机制防止饥饿。核心本质动态学习、柔性适应——“看表现定待遇”。MLQ vs MLFQ 核心区别对比维度MLQMLFQ进程归属静态固定至死不变动态浮动能升能降决策依据外部属性进程类型内部行为CPU/I/O占比饥饿问题低优先级可能饿死有老化机制防止饥饿管理方式需管理员手动配置全自动内核自适应一句话总结MLQ是“出身定终身”MLFQ是“看表现定待遇”。MLFQ的本质是MLQ 进程迁移规则 老化机制。七、知识体系总结把这六个模块串起来就形成了完整的进程管理知识体系用户程序用户态 ↓ 系统调用/中断/异常 内核态调度器MLFQ等算法 ↓ 选择进程/线程 进程状态转换就绪→运行→阻塞→... ↓ 线程实现模型决定并发能力 ↓ 进程间通信共享内存/消息/管道/信号核心要点回顾进程是资源分配单位线程是CPU调度单位用户级线程切换快但阻塞影响大内核级线程支持真并行但开销大七态转换中挂起是主动移出内存阻塞是等待事件MLFQ是MLQ的进化版核心是“动态反馈”实时和分时系统没有高级调度后记这篇文章整理了进程管理模块的核心知识点涵盖了从基础概念到调度算法的完整脉络。如果你正在准备考试或面试建议重点掌握进程与线程的对比三种线程映射模型的优劣MLQ与MLFQ的区别七态转换的触发条件写作说明本文内容源自笔者近期系统学习操作系统进程管理时的个人笔记。为了提升阅读体验笔者借助AI工具对原始笔记进行了逻辑梳理、表格优化和排版润色但所有核心知识点均经过笔者逐一核对与校正。如有疏漏欢迎指正交流。