☰
操作系统第三章进程复习精解:状态模型、PCB与上下文切换
2026/10/14 10:43:38 网站建设 项目流程

《操作系统——精髓与设计原理》第三章的复习和习题,向来是很多同学的一道坎。前两章还在讲硬件组成和操作系统概览,多少还能靠常识理解,到第三章“进程描述与控制”一出来,状态图要背、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利用率就被拉得越低。

举个例子:时间片q=100毫秒,上下文切换开销s=5毫秒,则CPU利用率=100/(100+5)=95.2%。如果把时间片变成10毫秒,同一切换开销下,利用率=10/(10+5)=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倍,答案整个跑偏。计算完顺手写一句“因此系统的时间片不宜设得过短,否则切换开销占比过高”,这既是验证计算,又呼应了第三章的核心设计思路,是一举两得的做法。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询