《操作系统——精髓与设计原理》第三章的复习和习题向来是很多同学的一道坎。前两章还在讲硬件组成和操作系统概览多少还能靠常识理解到第三章“进程描述与控制”一出来状态图要背、PCB字段要理解、模式切换和进程切换的区别要抠字眼课本看得似懂非懂做题更是拿不准。这篇复习精解正是为正在学这一章的大学生、考研复习党以及自学操作系统的朋友准备的。下面我把这一章的复习题和习题梳理一遍概念题该怎么答、计算题怎么列式、哪些地方容易踩坑一次讲透。1. 第三章整体脉络为什么进程是操作系统的“呼吸”1.1 章节定位与考核地位《操作系统——精髓与设计原理》第三章是整个操作系统课程的分水岭。前面章节讲的是“操作系统是什么”从这一章开始讲“操作系统到底在干什么”。如果只看目录这一章的内容无非是进程概念、进程状态、进程控制块、上下文切换但真正学起来你会发现这些名词之间环环相扣少一环都串不起来。从考试角度看第三章属于“必考且考得细”的章节。多数学校的操作系统期中考试里第三章相关题目能占15%到20%的卷面分且后续第四章线程、第五章并发与互斥全都建立在第三章的进程模型之上。这一章没嚼碎后面大部分章节的理解都会打折扣。这也是我把复习题和习题混在一起讲的原因概念学完必须立刻做题两者才能互相印证。很多同学觉得第三章难是因为它第一次把“程序”这个概念推倒重建。运行中的程序不再只是代码而是被操作系统“登记在册”、分配资源、控制执行、负责调度的一组数据对象。这种思维转换不是看一遍课本就能完成的要靠反复做状态图转换题、上下文切换计算题才能内化。1.2 全章知识点逻辑链复习第三章脑子里先要有这样一条逻辑链操作系统要同时管理很多“运行的东西”因此它先把“运行的东西”抽象成“进程”。进程有生命周期于是有了状态模型操作系统要知道每个进程在哪里、在干什么、拥有什么资源于是有了进程控制块PCB操作系统要真正让进程使用CPU就有了进程调度和切换的机制。这条逻辑链可以拆成一份复习清单进程的定义与基本特征动态性、并发性、独立性、异步性、结构性进程与程序的区别与联系进程的基本状态运行态、就绪态、阻塞态等待态五状态模型新建、就绪、运行、等待、退出及转换条件七状态模型增加挂起就绪、挂起阻塞及引入挂起的原因进程控制块PCB的组成标识信息、处理器状态信息、进程控制信息操作系统的控制结构内存表、I/O表、文件表、进程表执行模式用户态和内核态模式切换与进程切换的区别与开销进程创建、终止与层次结构交换swap技术与虚拟内存的初步关系这些知识点看着多但掌握逻辑链后会明白它们是同一个问题的不同侧面操作系统怎样把“正在运行的程序”管起来、调度起来。下面按“复习题→习题”两条线把高频考点逐一过一遍。2. 高频复习题精讲把概念答出层次感2.1 进程和程序的区别怎样答才完整这是第三章出现频率最高的一道复习题没有之一。教材复习题里几乎必列考试中无论以简答还是填空变形出现都要注意答出“几个不同”和“两个联系”。标准答法建议拆成四点来讲。第一从静态与动态来区分程序是存放在存储介质上的一组有序指令集合是静态存在可以说是“死”的进程是程序在处理机上的一次执行过程有创建、运行、阻塞、结束的变化是“活”的。第二从持久性与暂时性来看程序可以长期保存进程的生命周期有限它只存在于从创建到终止的这一段时间。程序是持久的进程是瞬时的。第三从并发性来看程序本身没有并发属性同一程序可以被多次执行形成多个进程。比如同时打开多个文本编辑器窗口操作系统里往往对应多个进程它们执行的可能是同一份代码。第四从组成结构来看进程实体进程映像通常包含程序代码、数据和进程控制块PCB三大部分。而“程序”这个词本身不包含PCB以及进程运行产生的动态数据。两个联系也要点出来进程是程序的一次执行程序是进程的代码基础同一个程序可以对应多个进程而一个进程在生命周期内也可能调用、执行不同段的代码。这道题如果只答出“程序是静态、进程是动态”一句话会被判为回答不完整。阅卷人看的是层次是否清晰至少要包含“静态/动态”“一对多”“PCB组成”三个得分点。2.2 为什么操作系统必须引入“进程”概念这道题问得比“程序与进程区别”深一层教材原文也有涉及但很多同学只会背结论。反向想一下如果没有进程操作系统要管理什么答案是没法管理。CPU执行的是机器指令但一条指令本身没有归属中断来临时CPU需要知道当前是哪个任务的现场一个任务申请到内存后也要有数据结构记录它占用了哪块区域。从这些需求出发“进程”这个抽象就不可避免地出现了。完整的答法包含三层意思多道程序设计让多个程序交替使用CPU必须有一个实体来代表“每一次运行”从而刻画运行现场与资源占用。进程是资源分配和调度的基本单位内存、文件、设备资源等都以进程为单位来记账和保护。进程为并发执行提供基础只有把程序变成一个个可独立调度、相互独立的进程操作系统才能在宏观上并行、微观上交替执行多个任务。有个细节要留意如果题目问的是“引入进程的目的”不要在回答里把“进程”和“线程”混在一起。第三章还没有引入线程概念答“进程是调度和资源分配的基本单位”是对的。如果题目出现在第四章之后才需要补充“线程是CPU调度的基本单位进程仍是资源分配单位”这层边界。2.3 进程状态模型五状态和七状态怎么考复习题中常要求“画出五状态模型图并说明各转换发生的原因”。五状态指的是新建、就绪、运行、等待、退出五种状态之间有直接转换路径还有一个不能成立的转换。填空和选择里最容易考的状态转换新建转就绪进程创建完成被接收进入就绪队列叫“提交”。就绪转运行调度器选中该进程把CPU分配给它。运行转就绪时间片到点被抢占或者高优先级进程到来抢占CPU。运行转等待进程需要等待某个事件比如等待I/O完成、等待资源。等待转就绪等待的事件发生进程被唤醒。运行转退出进程执行完毕、出错或被强制终止。特别容易错的是“就绪能不能直接转等待”。答案是不能。就绪进程只缺CPU其他资源都已就绪它不会因为没有CPU就变成“等待I/O”状态。如果选择题里出现“就绪→阻塞”的箭头可以顺手排除。记忆上有个窍门把运行态当中心。“就绪→运行”是调度“运行→就绪”是抢占“运行→等待”是请求资源“等待→就绪”是事件完成这四个箭头围着运行态画一圈思路就清晰了。七状态模型需要额外理解“挂起”的本质。五状态模型默认进程都在内存中但多道程序太多、内存不够大时操作系统会把一些暂时无法运行的进程换出到外存交换区这就是挂起态。挂起不是单纯的“阻塞更久”而是把“是否在内存中”这个维度加入状态判断。阻塞挂起状态下就算所等待的事件完成了进程也只能转为就绪挂起不能直接获得CPU因为它的映像还在外存里。考“为什么引入挂起”时从这几个角度答内存不足需要释放空间、操作系统调试与维护需要暂停某些进程、周期性的系统负载调节、父进程对子进程的管控需要。2.4 进程控制块PCB为什么说它是进程存在的唯一标志PCB是操作系统内核中的核心数据结构存放三类信息。一是标识信息进程ID、父进程ID、用户标识等用来唯一地识别进程。二是处理器状态信息通用寄存器、程序计数器PC、程序状态字PSW、栈指针等这些是进程再次被调度回CPU时必须恢复的现场。三是进程控制信息进程状态、调度优先级、等待原因、资源占用清单、消息队列指针、父子进程指针等。“PCB是进程存在的唯一标志”这句话怎么理解操作系统查找进程靠的是扫描PCB集合只要PCB存在进程就存在进程执行完PCB被回收进程立刻消亡。程序代码可以还在硬盘上但进程已经不在了。就像学校里的学籍档案档案在学生在籍档案销毁学籍取消。还有一个常见的判断点用户程序能读写PCB吗不能。PCB是操作系统内核的数据结构运行在用户态的程序访问不到只有通过系统调用进入内核态后由内核代码来创建、修改和回收。这个知识点在三章之后会不断出现务必建立这种“用户态/内核态”的权限意识。2.5 进程创建、终止与层次结构复习题还常考“进程在什么情况下被创建”和“进程的层次结构”。一般答四类创建时机系统初始化时由操作系统创建系统进程用户请求运行新程序时创建用户进程正在运行的进程通过系统调用如典型的fork机制创建子进程批处理作业被调度时创建对应进程。进程终止的原因则分为正常结束程序执行完毕、调用退出原语、错误结束程序出错如除零、越界访问和外部终止被其他进程或操作系统强制终止。UNIX系统中进程用fork派生子进程子进程继承父进程的环境和资源父进程等待子进程结束。这种机制形成了进程树树的根一般是系统启动后创建的第一个进程。答题时能画出“父进程—子进程”的树形结构并解释资源继承关系这道题基本就拿满了。3. 典型习题拆解从判断题到计算题稳拿分3.1 判断、选择与填空题出题人的“坑”挖在哪第三章的判断选择题不考死记硬背而是考概念的边界。我梳理几个高频变体都是考试里反复出现的陷阱。第一题“CPU在用户态执行时操作系统可以访问所有内存吗”答案为错。用户态程序只能访问自己的逻辑地址空间操作系统陷入内核态后才能访问系统区和全局数据结构。这个说法混淆了用户态和内核态的权限边界。第二题“进程切换一定引起模式切换模式切换一定引起进程切换。”前半句对后半句错。模式切换只改变CPU特权级别不代表换进程中断响应、系统调用都可能在同一个进程里完成用户态和内核态的切换。出题人特别喜欢把这种命题反过来考看到“一定”“必须”这类绝对词多留个心眼。第三题“等待态的进程释放CPU所以它不占用任何资源。”错。等待态进程释放CPU但仍占有内存和其他已分配资源。释放CPU不等于释放全部资源。第四题“两个进程共享同一份程序代码它们必定是同一个进程。”错。同一份代码可以被多个进程分别执行各进程有各自的数据、栈和PCB。第五题“进程是操作系统进行资源分配的基本单位。”在第三章范围内这句话是对的。若题目后续出现线程概念核心区分点则是进程是资源分配单位线程是调度单位。3.2 状态转换分析题结合中断和时间线来推理真题里常给一个情境“某个进程正在运行它发出一个磁盘读请求之后磁盘控制器完成数据传输并产生中断。请描述该进程在这期间的状态变化。”这道题的关键是把I/O请求路径和中断响应路径都走一遍进程处于运行态发出磁盘读请求后操作系统内核执行相应系统调用将该进程置为等待态。磁盘I/O完成设备控制器发出中断CPU响应中断后中断处理程序确定这是哪个进程的I/O完成将该进程从等待态置为就绪态。调度器再次选中该进程分配CPU后进程由就绪态转运行态继续执行。完整状态链就是“运行→等待→就绪→运行”。考试里最容易丢分的是漏掉“等待→就绪”这一中间环节有同学直接从“运行”写成“运行→等待→运行”把就绪态跳过了。答题时先写状态名再写每个转换的触发事件就不容易漏。再讲一道变式某进程正在用户态运行时钟中断到来操作系统切换到了另一个就绪进程。这里涉及两个进程的状态变化当前运行进程可能因时间片用完由运行转就绪另一个进程由就绪转运行。如果时间片没用完但高优先级进程抢占原因表述要从“时间片到点”改成“高优先级进程抢占”。答题要明确写“哪个进程 从哪个状态 到哪个状态”别含糊。3.3 上下文切换开销计算三步算清CPU利用率第三章习题里有一类经典计算给定时间片和切换开销求CPU利用率。公式是CPU利用率 时间片长度 / (时间片长度 上下文切换开销)背后的道理很简单每个时间片之后系统要花一段时间做上下文切换这段时间CPU不能执行用户程序。所以切换开销越重CPU利用率就被拉得越低。举个例子时间片q100毫秒上下文切换开销s5毫秒则CPU利用率100/(1005)95.2%。如果把时间片变成10毫秒同一切换开销下利用率10/(105)66.7%。从这个对比能直观看出时间片太短CPU资源会大量浪费在切换上。这类计算题不仅考公式还考“为什么要合理设置时间片”的设计思路答题时把设计含义写出来更能得高分。还有一类计算直接给寄存器个数和存取周期求切换时间。比如某处理器有32个通用寄存器保存一个寄存器需要一次内存访问内存访问周期为10纳秒此外还需保存程序计数器PC和程序状态字PSW各需要一次内存访问。那么模式切换只需保存PC和PSW约2次内存访问耗时20纳秒进程切换则要保存所有寄存器再加上PC和PSW总计34次内存访问耗时340纳秒。列式过程比数字更重要模式切换只保存少量上下文进程切换要保存整个处理器现场所以进程切换开销显著更大。3.4 简答与论述题层次化答题法第三章论述题常考“操作系统的控制结构”或“比较五状态模型与七状态模型”。这类题不能只给名词解释要按“是什么—为什么—怎么实现”三层写。拿控制结构来说操作系统维护四类表内存表记录主存和虚拟内存分配I/O表记录设备状态和通道状态文件表记录文件位置、权限和状态进程表存放进程的PCB。答题时先概括四类表分别管什么再说明它们的关联进程表与其他表通过索引或指针连接比如进程表中记录该进程打开的文件描述符就形成了进程表到文件表的引用关系。能够画出“表格之间的关联”比只背表格名字更有说服力。比较五状态与七状态时分三层对比状态数量、状态转移、设计目的。五状态解决进程一生中不同阶段的管理七状态在五状态基础上引入挂起态解决内存不足时进程的换入换出策略。核心区别是“进程映像是否在内存中”这个维度五状态只有“在内存”这一个情况七状态增加了“在外存”的情况。这样拆解逻辑就清晰了。4. 做题常见漏洞与避坑实录4.1 高频易混概念对照表我把第三章里最常被搞混的概念整理成一张自查表复习时可以逐个打勾。对比项关键区别常见错误表述程序 vs 进程程序静态进程动态进程含PCB“程序是运行中的进程”进程 vs 线程进程是资源分配单位线程是调度单位后续章节把进程当“最小调度单位”模式切换 vs 进程切换模式切换不换进程进程切换必含模式切换把两者完全等同阻塞 vs 挂起阻塞等待事件挂起指进程映像不在内存把挂起当“更长时间的阻塞”就绪 vs 阻塞就绪只缺CPU阻塞缺其他事件或资源认为就绪态可以因缺CPU变阻塞新建 vs 就绪新建是创建中尚未完全就绪以为新建直接进入运行态这张表中的每一行基本都能对应一道判断或选择题的出题点。4.2 阅卷视角下的隐性得分点答题要有“三段式”意识。凡是简答和论述先定性再分点后举例。比如问“什么是进程控制块”先写“进程控制块是操作系统用于描述和管理进程的数据结构是进程存在的唯一标志”再分列标识信息、处理器状态信息、进程控制信息最后举一个具体字段实例比如“进程ID就属于标识信息”。哪怕表述不够完美结构立住了阅卷人就能快速找到得分点比一整段文字堆到底要强得多。画图题也要注意细节。状态转换题如果要求画图每个状态之间的弧线必须标注触发的条件或事件。光画几个圆圈加箭头没写转换原因至少被扣掉一半分数。上下文切换的时序图则要标出“谁在保存谁的现场”。概念题要提防“半对半错”。比如“进程是否占用CPU”完整表述是“运行态进程占用CPU就绪态和阻塞态进程不占用CPU”。很多同学只写“占用”答案不完整丢分很可惜。4.3 刷题训练的正确顺序复习第三章不提倡一上来就猛刷选择题。我更推荐按这四个步骤来第一步合上书凭记忆画两状态、五状态、七状态的转换图并给每条弧线标注触发原因。这一步能快速暴露对状态模型的理解盲区。第二步做复习题里的概念题不写整句只写关键词提纲再对照课本补漏。这样效率高也能检验并记忆。第三步做计算题重点是上下文切换开销和CPU利用率列清公式和数据不要跳步。第四步整理错题本重点记录“当时我漏了哪个状态”“为什么把模式切换和进程切换弄混了”这种自我记录比重复刷题更有价值。选择题正确率参考线一般在80%以上才算过关。低于这个线多半是概念边界没掌握而不是题目难。5. 复习策略与个人经验心得5.1 把章节结构转成问题清单很多同学复习第三章是从头读课本读到哪算哪效率很低。我的做法是把目录转成问题清单比如“本章讲了几种状态模型”“状态之间什么情况下不能转换”“PCB里放了哪几类信息”“模式切换和进程切换各自发生在什么场景”把问题清单放手边每道复习题对应到课本具体小节形成一个索引。复习第二轮时只看问题清单不看课本答不出的再回到对应小节补漏。这个方法听着朴素但比反复通读节省一半时间。5.2 核心图示的默画训练法进程状态转换图是第三章的“图标型考点”必须做到闭眼能画。我的方法是每天默画一次画完用另一种颜色的笔补注释记录漏了哪条弧线。连续三次之后状态图基本不会出错。类似的还有PCB结构图、操作系统四类控制表的关系图这些图在解答题时可以直接当作草稿纸上的思维导图来用。5.3 一些实践体会第三章学得好不好有个简单的检验方法能不能不看课本用一分钟跟别人讲清楚“为什么进程切换比模式切换更耗时”。如果能讲明白说明你把上下文切换的本质吃透了如果只会背结论“进程切换开销大”那建议回到3.3节再琢磨一遍。另外一个容易被忽略的地方是课后原题。教材每章后面的复习题往往是考试命题的重要来源很多老师就是拿复习题做变体把简答改成判断把状态图换成填空。复习题做透了等于提前做了半套真题。最后分享一个细节技巧做计算题时先把所有已知条件用统一单位换算一遍。毫秒和微秒混用是上下文切换计算里最常见的低级错误单位差1000倍答案整个跑偏。计算完顺手写一句“因此系统的时间片不宜设得过短否则切换开销占比过高”这既是验证计算又呼应了第三章的核心设计思路是一举两得的做法。