操作系统第三版课后题考点全解析:从概念到计算题的答题技巧
简介:这份资源是《计算机操作系统(第三版)》课后习题的参考答案,面向高校计算机专业学生、考研复习者以及准备操作系统课程考试的学习者,用于对照教材章节核对习题思路、巩固课堂所学。压缩包内共1个doc文档,约170KB,按教材章节顺序整理,涵盖操作系统引论、进程管理、并发编程等核心模块,逐题给出简答与要点分析。内容上,第一章围绕设计现代OS的目标、OS的作用、分时系统的关键问题与实现方法、分时与实时系统的比较、OS的四大特征及异步性成因展开;第二章则涉及前趋图绘制、程序并发执行产生间断性与失去封闭性可再现性的原因、引入进程概念的意义、进程与程序在动态性并发性独立性上的比较、PCB的作用及其作为进程存在唯一标志的说明、三态转换的典型原因、挂起状态的引入与性质、临界区进入区与退出区代码的必要性、同步机构的基本准则以及记录型信号量wait与signal的物理含义等。目前已有512人学习,适合按章复习时逐题比对、梳理答题要点,也可作为考前查漏补缺的参考材料。
1. 操作系统第三版课后题:先看清这场考试到底在考什么
很多人拿到《计算机操作系统(第三版)》的课后习题答案,第一反应是“对着抄一遍就完了”。真到考场上才发现,简答题能背,计算题一算就错,画前趋图、写信号量程序、算缺页率这几类题几乎全军覆没。这门课的考试套路很固定:概念题考你背得准不准,分析题考你讲不讲得清因果,计算题考你步骤动不动得了手。三类题的拿分逻辑完全不同,用同一种方式复习必然翻车。这份第三版答案的价值不在于“有答案”,而在于它把每一章的考点原样摆出来了——第一章引论、第二章进程管理、第三章调度与死锁、第四章存储器管理、第五章设备管理,每一道课后题背后都是一个高频考点。下面按考点模块拆开讲,哪些必背、哪些必算、哪些题面试官最爱追问,一次说透。
2. 引论与进程管理:概念题必背清单与状态转换题
2.1 引论章:四个目标、三大作用、四特征,背错一个字就丢分
第一章的题看着简单,失分率却不低,原因是考生只记关键词、不记限定语。设计现代 OS 的主要目标是方便性、有效性、可扩充性和开放性,这四个词顺序无所谓,但不能拿“可靠性”“安全性”去凑数——那是实时系统的重点,不是引论的标准答案。OS 的作用表现为三个方面:作为用户与计算机硬件系统之间的接口、作为计算机系统资源的管理者、实现了对计算机资源的抽象。这三条是层层递进的关系,答题时最好按“接口—管理者—抽象”的顺序写,阅卷时逻辑分就稳了。
OS 的四大特征是并发性、共享性、虚拟性、异步性,最基本特征是并发和共享,最重要的特征是并发性。这里有个经典陷阱:题目问“最基本特征”答“并发和共享”,问“最重要特征”答“并发性”,两个问法答案不一样,混着写就是送分。分时系统与实时系统的比较也是必考:交互性上分时更强,及时性上实时更高(实时控制以开始截止时间和完成截止时间衡量),可靠性上实时要求更高。这三条对比建议做成三行小表背,考场上直接默写。
异步性的成因要能讲出完整因果链:多道程序环境下多个进程并发执行,受资源限制走走停停,何时执行、何时暂停、推进速度都不可预知,所以完成次序与进入内存次序不一致;但在进程控制和同步机制支持下,相同运行环境下多次运行结果相同。只答“因为并发”拿不到满分,必须落到“不可预知”和“结果可再现”这一对关系上。
2.2 进程管理:PCB、三态转换、同步准则,简答题的三大主力
进程管理是全书简答题密度最高的一章。进程与程序的比较从动态性、并发性、独立性三个维度答:动态性是进程最基本的特性,有创建、调度、暂停、撤销的生命期;并发性是进程的重要特征,程序本身不能并发执行;独立性指进程是独立运行、独立获得资源和独立调度的基本单位。这三条几乎年年以不同问法出现。
PCB 的作用与“唯一标志”是高频题。标准答法分两层:PCB 是进程实体的一部分,是最重要的记录型数据结构,记录了描述进程情况和控制进程运行所需的全部信息,使程序成为能独立运行的基本单位;系统通过 PCB 感知进程存在、对进程实施控制,所以 PCB 是进程存在的唯一标志。答题时“唯一”两个字必须出现,这是采分点。
三态转换要画得出、说得出原因:就绪到执行是调度程序分配了处理机;执行到阻塞是进程因某事件无法执行,比如访问被占用的临界资源;执行到就绪是时间片用完。挂起状态的四类引入原因(终端用户请求、父进程请求、负荷调节、操作系统需要)和被挂起进程“静止、不能直接被调度”的性质,属于容易被忽略的冷门考点,简答题一旦考到就是整题分。
同步机构四条准则——空闲让进、忙则等待、有限等待、让权等待——要能解释为什么:为了实现进程互斥进入临界区。进入区和退出区的作用也是同理:进入区检查临界资源是否被访问,退出区恢复访问标志让其他进程能再访问。这类“为什么要有这段代码”的题,答题模板是“目的 + 不这么做会怎样”,两句话讲完。
2.3 真题演练:前趋图与信号量程序怎么写才不扣分
前趋图题(S1: a:=x+y; S2: b:=z+1; S3: c:=a-b; S4: w:=c+1)的答题思路:先找数据依赖,S3 依赖 S1 的 a 和 S2 的 b,S4 依赖 S3 的 c,所以 S1、S2 并行起步,S3 汇合,S4 收尾。画图时箭头只表示“必须先于”,不要多画。
信号量描述前驱图的题,标准写法如下:
// 按前驱图设置信号量初值:有前驱的边初值为0,无前驱的边初值为1 semaphore a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0; begin parbegin begin S1; signal(a); signal(b); end; // S1 完成后放行 S2、S3 begin wait(a); S2; signal(c); signal(d); end; // S2 等 S1,放行 S4、S5 begin wait(b); S3; signal(e); end; // S3 等 S1,放行 S6 begin wait(c); S4; signal(f); end; // S4 等 S2,放行 S7 begin wait(d); S5; signal(g); end; // S5 等 S2,放行 S7 begin wait(e); S6; signal(h); end; // S6 等 S3,放行 S7 begin wait(f); wait(g); wait(h); S7; end; // S7 等 S4、S5、S6 全部完成 parend end这段代码的采分点有三个:信号量初值必须与边的方向对应(指向某语句的边初值 0,从起点出发的边初值 1);每条语句前 wait 的数量等于入边数,后 signal 的数量等于出边数;S7 前三个 wait 缺一不可。考生最常见的错误是初值全写 0 或全写 1,程序跑起来就是死锁,阅卷直接判错。
生产者—消费者问题是第二章的压轴考点,三个变体必须分清。缺少 signal(full) 时,full 永远为 0,消费者 wait(full) 一直阻塞取不到产品;缺少 signal(empty) 时,empty 一直为 0,缓冲池取空后生产者申请不到空缓冲区被阻塞。wait(full) 与 wait(mutex) 互换位置会死锁:缓冲区满时生产者先拿到 mutex,再等 empty 失败阻塞,消费者又进不了临界区释放不了资源,系统僵死。而 signal(mutex) 与 signal(full) 互换只影响释放次序,不会死锁。这道题面试官特别爱追问“为什么一个死锁一个不死”,答题关键是抓住“谁在持有锁的情况下等待”这个判断标准。
单缓冲区数据采集与计算的同步算法,双信号量版本(empty=1, full=0,不加 mutex)是标准答案,因为单缓冲区天然互斥;如果考生硬加 mutex 也不算错,但要能解释“单缓冲区下 mutex 是冗余的”。哲学家进餐的死锁避免算法,三种方案任写一种:要么一次只允许四位哲学家同时拿筷子,要么奇偶号哲学家拿筷顺序相反,要么用 AND 信号量一次申请两支。答题时写清“破坏了哪个必要条件”比只贴代码更容易拿高分。
3. 调度与死锁:算法对比题和银行家算法的手算步骤
3.1 三级调度与 FCFS/SPF:对比题按维度答,别写成流水账
高级调度负责从外存后备队列选作业调入内存、创建进程、分配资源、插入就绪队列;低级调度负责从就绪队列选进程分配处理机;中级调度引入的目的是提高资源利用率和系统吞吐量。三级调度的分工是简答题常客,答题时按“从哪选、选到哪、干什么”三要素写,比背整段定义更稳。
FCFS 与 SPF 的比较,相同点是两者都既可用于作业调度也可用于进程调度;不同点在于 FCFS 按到达先后选,利于长作业不利于短作业,SPF 按估计运行时间最短选,利于短作业不利于长作业。这类对比题最忌讳只写“一个先进先出一个短作业优先”,必须把“有利于谁、不利于谁”写出来,这才是采分点。实时调度按方式分非抢占和抢占两种,属于记忆型小题,考前过一遍即可。
3.2 死锁四条件与预防手段:答题要落到“摒弃了哪一条”
死锁的定义是多个进程因竞争资源形成的僵局,无外力则永远无法推进;原因有二:竞争资源和进程推进顺序非法;四个必要条件是互斥、请求和保持、不剥夺、环路等待。这四条件必须一字不差,少一条整题作废。
处理方法中,预防死锁最易实现但限制过严、资源利用率低;检测和解除死锁资源利用率最高。预防的三条途径要对应到条件上:一次性申请全部资源是摒弃“请求和保持”;申请不到就释放已占资源是摒弃“不剥夺”;资源线性排序、按序号递增请求是摒弃“环路等待”。答题模板是“做法 + 摒弃了哪个条件 + 代价”,三句话一个得分点。
3.3 真题演练:银行家算法两步走,安全序列怎么找
银行家算法题(P0 到 P4 的 Allocation/Need/Available 表)几乎是必考计算题,标准步骤分两步。
第一步判安全:Work 初值取 Available(1,6,2,2),逐个找 Need ≤ Work 的进程。P0 的 Need(0,0,1,2) 满足,Work 变为 Work+Allocation = (1,6,5,4);接着 P3 的 Need(0,6,5,2) 满足,Work 变为 (1,9,8,7);P4 的 Need(0,6,5,6) 满足,Work 变为 (1,9,9,11);P1 的 Need(1,7,5,0) 满足,Work 变为 (2,9,9,11);最后 P2 的 Need(2,3,5,6) 满足。得到安全序列 <P0,P3,P4,P1,P2>,状态安全。
第二步判请求:P2 请求 Request(1,2,2,2),先做两道检查——Request ≤ Need(2,3,5,6) 成立,Request ≤ Available(1,6,2,2) 成立,试分配后 Available 变为 (0,4,0,0),P2 的 Allocation 变为 (2,5,7,6)、Need 变为 (1,1,3,4)。此时对任何进程,Need 都不小于等于 (0,4,0,0),找不到安全序列,系统进入不安全状态,所以不能分配。
这道题的血泪经验是:试分配后一定要重新算 Need 和 Available,很多考生只改 Available 就下结论,步骤分全丢;另外安全序列不唯一,写出一个合法序列即可,但每一步的 Work 值必须写清楚,这是过程分。
4. 存储器管理:分页分段对比与缺页率计算
4.1 装入、链接、重定位:三个“方式”别串门
程序装入内存有三种方式:绝对装入适用于单道环境,重定位装入和动态运行时装入适用于多道环境。链接分三种:静态链接是运行前链接成完整模块不再拆开;装入时动态链接是边装入边链接,遇到外部模块调用就去找并修改相对地址;运行时动态链接是把链接推迟到执行时,调用到未装入的模块才装入链接。这三种链接的区分点是“链接发生的时机”,答题时把时机写出来就赢了一半。
动态重定位的引入原因是程序运行中经常要在内存中移动,移动后必须修改地址;实现靠硬件重定位寄存器存放程序在内存的起始地址,真正访问的地址是相对地址加重定位寄存器值。这道题常和“为什么需要硬件支持”连问,答案就是“不影响指令执行速度”。
4.2 分区分配四算法与分页分段五区别
分区管理的四种分配策略要能各说一条优缺点:首次适应保留高址大空闲区但低址碎片多、查找开销大;循环首次适应空闲区分布均匀但缺大分区;最佳适应分区最贴合但留下大量小碎片;最坏适应剩余区不至于太小但缺大空闲区。答题时“优点 + 缺点”成对写,只写一半扣一半分。
分页与分段的区别是第四章最高频的对比题,五个维度:功能上页是物理单位、为离散分配减少外零头,段是逻辑单位、为满足用户需要;大小上页固定由系统定,段长不固定由程序定;地址空间上分页是一维、分段是二维;共享保护上分段只需一个段表项即可实现共享保护,分页需要大量页表项一一对应;两者共同点是都离散分配、都要地址变换机构。这五条建议按“同—异—异—异—异”的顺序背,考场上不容易漏。
虚拟存储器的特征:离散性、多次性、对换性、虚拟性,最本质是离散性,最重要是虚拟性——又是“最本质”和“最重要”两个问法的陷阱,和第一章的并发/共享是同一个套路。实现虚拟存储器的硬件支持:请求分页需要页表机制、缺页中断机构、地址变换机构;请求分段对应换成段表机制、缺段中断机构、地址变换机构。
4.3 真题演练:FIFO 缺页率与 Belady 现象
页面走向 4、3、2、1、4、3、5、4、3、2、1、5,FIFO 算法下 M=3 时缺页 9 次、缺页率 75%;M=4 时缺页 10 次、缺页率 83%。物理块增多反而缺页率上升,这就是 Belady 现象。
手算时的规范做法是画表:每一列一个页面访问,行是物理块,缺页打叉。M=3 时前三次访问 4、3、2 全部缺页装入,访问 1 时淘汰最早进入的 4,访问 4 时淘汰 3,访问 3 时淘汰 2,访问 5 时淘汰 1,之后 4、3 命中,访问 2 淘汰 4,访问 1 淘汰 3,访问 5 淘汰 2,共 9 次缺页。M=4 时同理逐列推,得到 10 次。这道题的易错点是淘汰顺序记错——FIFO 淘汰的是“最早进入内存”的页,不是“最久未使用”的页,和 LRU 混了就全错。答题时把每次淘汰的页号写出来,过程分才拿得稳。
抖动的原因也要能讲成因果链:内存无空闲又发生缺页,需调出一页;算法不当导致刚换出的页很快又被访问,再调入再换出,系统大部分时间耗在换进换出上,几乎不能完成有效工作。深层原因是提高 CPU 利用率要多道程序度上升,但多道程序度过高又使缺页率急剧上升、CPU 利用率下降,调度程序再提高多道程序度,形成恶性循环。改进型 Clock 算法的原理是同时考虑使用位和修改位:优先换出未使用且未修改的页,其次未使用已修改的页,置换代价小的先出。
5. 设备管理与易错点:I/O 控制方式、缓冲计算与失分清单
5.1 四种 I/O 控制方式与三类通道
I/O 控制方式四种:程序 I/O 方式适用于早期无中断系统;中断驱动方式普遍用于现代计算机;DMA 方式适用于块设备与主机交换数据;I/O 通道方式适用于成组数据块交换,需要配置通道及通道控制器。四种方式的演进主线是“减少 CPU 干预、缓和速度矛盾、提高并行度”,答题时把这条主线带上,比干背适用场合更像理解过的答案。
三类通道的区分:字节多路通道含多个非分配型子通道,连接低中速设备,按字节轮转共享主通道;数组选择通道只有一个分配型子通道,一段时间只服务一台设备,按数组传送,通道利用率低,用于多台高速设备;数组多路通道结合两者优点,多个非分配型子通道按时间片轮转、按数组传送,速率高且利用率好。瓶颈问题的解法是增加设备到主机的通路而不是增加通道,即设备连多个控制器、控制器连多个通道,既解决瓶颈又提高可靠性。
5.2 单缓冲与双缓冲的时间公式
单缓冲下每块数据处理时间为 max(C,T)+M:设备输入 T 与 CPU 计算 C 可并行,但数据从缓冲区传到用户区 M 必须串行加上。双缓冲下为 max(C,T)(严格说是 max(C+M,T),M 短暂可省略):设备输入与 CPU 计算并行,输入与传送也并行。这两个公式的采分点是“谁和谁并行”,答题时先写并行关系再写公式,即使公式记混也能拿过程分。
设备独立性的引入是为了让应用程序独立于物理设备、使设备分配灵活、便于实现 I/O 重定向;实现关键是设备独立性软件层加逻辑设备表 LUT,表目含逻辑设备名、物理设备名、驱动程序入口地址。独占设备的分配步骤按“逻辑设备名请求—查 LUT—查系统设备表找安全空闲设备—分配控制器—分配通道—三者都成功才算成功”六步走,任何一步失败就挂到对应等待队列。虚拟设备靠 SPOOLing 技术把一台独占设备变成多台逻辑设备,后台打印的服务流程是输出进程在输出井申请空闲盘块、送入打印数据,再由打印进程取出输出。
5.3 易错点:这五类题年年有人栽
第一类,特征题问法混淆。错在把“最基本特征”答成“最重要特征”,或把虚拟存储器“最本质”答成“最重要”。为什么错:教材里两个限定词指向不同答案,考生背的时候只记了词没记问法。怎么答对:背的时候成对记——“最基本:并发和共享;最重要:并发”“最本质:离散性;最重要:虚拟性”,考场上先看问的是哪个限定词再落笔。
第二类,信号量初值写反。错在前趋图题里把所有信号量初值写成 0 或 1。为什么错:没理解“边指向谁、谁就要等”,初值 0 表示需要等待,初值 1 表示可直接执行。怎么答对:画完前趋图后逐条边标注初值,起点出发的边为 1,指向汇合点的边为 0,写完再对照程序里的 wait/signal 数量核一遍。
第三类,wait 顺序写反导致死锁。错在生产者—消费者题里先 wait(mutex) 再 wait(full/empty)。为什么错:持有互斥锁去等资源,资源不到就阻塞,别人又进不了临界区。怎么答对:记住口诀“先资源信号量、后互斥信号量”,wait 的顺序永远是 full/empty 在前、mutex 在后,signal 顺序无所谓但习惯上先释放 mutex。
第四类,银行家算法只改 Available。错在试分配后不更新 Need 和 Allocation 就判安全。为什么错:安全检测依赖的是新的 Need 和新的 Available,只改一个数算出来的序列是假的。怎么答对:试分配后强制走一遍“Allocation 加、Need 减、Available 减”三件套,再开始找安全序列,每一步 Work 值写在纸上。
第五类,FIFO 与 LRU 混淆。错在缺页计算时淘汰“最久未使用”的页。为什么错:FIFO 淘汰的是最早进入内存的页,和访问频率无关,两者在 Belady 现象上表现完全不同。怎么答对:FIFO 画队列、按进入顺序淘汰;LRU 画栈、按最近访问淘汰,做题前先在草稿纸角上写“FIFO=进入顺序”提醒自己。
6. 答题节奏:从背答案到会答题的最后一步
走到这里,考点清单和高频题都过了一遍,剩下的是把“会背”变成“会写”。这门课的卷面分有个特点:简答题按关键词给分,计算题按步骤给分,画图题按结构给分,三种题的答题节奏完全不同。简答题我建议用“定义 + 要点 + 一句因果”的三段式,比如问 PCB 作用,第一句给定义,第二句列记录哪些信息,第三句落到“所以是唯一标志”,三句话覆盖全部采分点,写多了反而容易暴露概念混淆。计算题必须写过程:银行家算法写 Work 变化表,缺页率写每次淘汰的页号,信号量题写初值和 wait/signal 配对,阅卷老师看的是过程不是最终数字。画图题先标依赖再画箭头,前趋图多画一条边就是错。
押题方向上,按这份第三版答案的题量分布,第二章进程管理和第四章存储器管理合计占简答题一半以上,第三章的死锁与银行家算法是计算题主力,第五章的设备管理偏记忆、出大题概率低但小题必考。复习时间紧的话,优先顺序是:进程三态与同步机制、分页分段对比、死锁四条件与银行家算法、FIFO 缺页计算、I/O 控制方式,这五块吃透,及格线以上很稳,剩下的引论和设备细节靠考前突击记忆。
最后说个自己的教训。早年复习这门课,我把答案从头到尾抄了一遍,自我感觉良好,结果第一次模拟考银行家算法,试分配后忘了改 Need,整道 15 分的题只拿了 3 分过程分。从那以后我每次做计算题都强制走一遍“改三件套、写 Work 表、核安全序列”的固定流程,简答题也强制按“定义—要点—因果”三段写,再没在步骤分上翻过车。这份第三版课后题答案,建议你别只当答案看,把它当考点地图用:每做一道题,先合上答案自己写,写完对照采分点找差距,比抄十遍都管用。希望帮到你。
本文还有配套的精品资源,点击获取