ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

把课后答案变成复习路径:操作系统四大核心考点突破指南

把课后答案变成复习路径:操作系统四大核心考点突破指南

简介:《计算机操作系统(第三版)》课后习题答案是一份面向高校计算机专业学生、考研备考生及自学者的学习辅助资料,用于对照教材章节逐题查漏补缺。内容覆盖操作系统引论、分时系统、进程管理、进程控制块(PCB)、进程状态转换与并发编程等核心模块,答案按章节组织,每题提供完整解答,并对设计现代OS的主要目标、OS作用的三个层面、分时系统的关键问题及设置多路卡与缓冲区的处理方法、进程异步性成因、PCB为何是进程存在的唯一标志等易混淆知识点进行了必要展开,有助于理解方便性、有效性、同步机制和记录型信号量wait/signal等概念。资源包内为1个doc文档,容量约170KB,便于复制编辑、打印或导入笔记工具使用。目前已有509人学习下载,适合在操作系统课程复习、考研备考或自学梳理知识框架时作为配套参考。

1. 课后习题答案人人都有,为什么有人照样挂科:把答案用成复习路径

期末前一周,A同学把《计算机操作系统(第三版)》的课后习题答案从头到尾翻了两遍,进考场看到信号量大题照样卡了半小时。这不是个例。很多带着这本教材课后习题答案来复习的人,最后都栽在同一个地方:把答案当成了“对答案”,而不是把它当成一条完整的复习路径。这篇笔记想讲清楚的,就是怎么用这份现成的课后答案,把每一个知识点从“见过”变成“会做”,再从“会做”变成“考场上能写出来”。适合期末突击、考研二轮,以及想系统过一遍操作系统核心概念的读者。目标是用答案反推进度,让错题开口说话。

2. 把课后答案当考点地图:先做题、再对答案、让错题变入口

拿到答案第一反应是翻到最后一页对着抄,这是最亏的用法。我一般会建议把答案当作一张考点地图,用“做题→对答案→标记错题”的闭环,把教材四百多页压缩成几十个高频考点。这一章先解决“怎么把答案用起来”,再解决“怎么让错题成为下一轮复习的入口”。

2.1 先做题再对答案,让错题成为复习入口

常见做法是每看完一章教材,合上书,拿出纸笔直接做课后题。做题时不许翻教材,也不许看答案。做不出来的题目在题号前面画一个圈,拿不准的题目画一个半圆,完全没思路的画两个圈。这样一轮下来,你会得到一份非常诚实的“知识缺口清单”。

然后才轮到答案出场。对答案这一步也有讲究:不是只看结果对不对,而是要盯住“你的推导过程”和“答案的推导过程”之间的差距。如果只是最后得数不一样,说明是计算细节问题;如果第一步思路就不一样,说明这一题对应的知识点你还没有建立正确的解题模型。把后者单独抄进一个错题本,旁边标注上对应教材章节号,这就是你下一轮复习的入口。

2.2 从题干关键词反推考点,一行答案能拆出三层信息

课后题答案大多比较精炼,经常是一段结论加一个计算过程。如果你只是把这段文字记住,考场上换个问法就认不出来了。我一般会要求自己从题干里抓关键词,再反推考点。比如题干里出现“互斥”“临界区”,考点多半落在进程同步;出现“安全序列”“资源分配”,考点多半落在死锁避免;出现“缺页”“置换”,考点多半落在内存管理。

这一步做到位后,一行答案能拆出三层信息:第一层是结论本身,第二层是结论成立的前提条件,第三层是如果某个前提变了结论会怎么变。复习时只看第一层叫背答案,看到第三层才叫学考点。课后答案里的大多数简答题,都可以用这个方法拆出“触发条件、处理过程、最终结果”三段结构,考试时照着这个结构写,就不容易漏得分点。

2.3 用一张知识点覆盖表,把答案归位到教材章节

把全书课后题按章节归类后,你会发现题目类型高度重复。我习惯画一张覆盖表,横轴是教材章节主题,纵轴是常见题型,然后把课后题号填进交叉格里。这张表能一眼看出哪些章节题目多、哪些题型你还没练完。

章节主题典型题型对应考点是否已练透
进程与线程同步互斥设计题P/V操作、临界区待确认
处理机调度平均周转时间计算FCFS/SJF/RR 规则待确认
死锁银行家算法、证明题必要条件、安全序列待确认
内存管理页面置换手算缺页次数、置换算法待确认
文件管理索引结构计算索引节点、FAT 表待确认
设备管理磁盘调度计算寻道距离、旋转延迟待确认

这张表建议每章填一次。填的时候不用追求一次全对,而是把“待确认”的格子当作下一轮做题的目标。等整张表里“待确认”少于三格,就可以进入真题模拟阶段了。很多人觉得课后答案是“做完了就对完了”,其实它真正的作用是帮你把教材里的知识点压缩成一张可以反复扫描的清单。

3. 课后答案里最厚的四块硬骨头:同步、置换、死锁、磁盘与文件

操作系统课后习题的区分度,基本集中在这四块:信号量与同步、页面置换、银行家算法、磁盘调度与文件索引。这些题在答案里往往只有几行,但每一行背后都是一个容易踩坑的模型。把这几类题吃透,整份习题答案就算真正消化了七八成。

3.1 信号量与同步题:初值设定、PV 顺序、三个易错点

信号量题是课后习题里最常见也最容易被扣分的题型。常见做法是先分析进程间的关系,再决定信号量数量和初值。互斥关系用一个初值为 1 的 mutex,同步关系用两个初值分别为资源容量和 0 的信号量。以经典生产者消费者为例,伪代码如下:

semaphore mutex = 1; // 互斥访问缓冲区 semaphore empty = N; // 空缓冲块数,初始为 N semaphore full = 0; // 满缓冲块数,初始为 0 producer() { while (1) { P(empty); // 申请一个空位 P(mutex); // 申请访问缓冲区 // 放入一个数据 V(mutex); // 释放缓冲区 V(full); // 满块数加 1 } } consumer() { while (1) { P(full); // 申请一个满块 P(mutex); // 申请访问缓冲区 // 取出一个数据 V(mutex); // 释放缓冲区 V(empty); // 空位加 1 } }

逻辑说明:每个进程内部的 P 操作顺序不能调换。生产者必须先 P(empty) 再 P(mutex),如果反过来,缓冲区满时消费者拿不到 mutex,生产者又占着 mutex 等空位,就会死锁。参数说明:empty 的初值是缓冲区大小,不是进程数量;full 的初值永远是 0,表示刚开始没有数据可消费。这三个值如果有一个设错,整个题的答案就全偏了。

3.2 页面置换手算:从“第几次缺页”到“初始空页算不算”,三个易错点

页面置换题是另一类答案看着简单、手算经常翻车的题。以 LRU 为例,手算时要把访问序列从左往右推进,内存框里保留最近使用过的页号,每当新页不在框内时记一次缺页。答案往往只给一个总数,但你在草稿纸上最少要踩三个坑。

第一个坑是缺页次数从哪一次开始数。如果题目没有明确说“内存初始为空”,常见教材通常默认前三次调入也算缺页;但有些题目会把初始空白页当作“预备态”不计入,导致最后总数差三次。第二个坑是 LRU 与 OPT 的区别:LRU 看的是“过去最久没用过”,OPT 看的是“未来最久不被使用”,手算时把两张表混着写,答案必错。第三个坑是内存框里的页号顺序,每一步更新后要从“最近使用”到“最久未用”重排,否则下一步判断就会错。

我见过最典型的场景是:某同学用同一张访问序列分别算 FIFO 和 LRU,算到一半发现两者结果一样,以为是自己的问题,结果答案里两个算法本来就有重合段。遇到这种情况不要慌,继续按规则推进,最后总数对着答案核对一次,如果还差一次,优先检查第三步“当前页是否已在内存里”有没有漏判。

3.3 银行家算法:安全序列检查的顺序与边界条件

银行家算法题几乎是课后习题的保留项目,也是最好拿分又最好丢分的题。做题顺序要固定死:先算每个进程的 Need(= Max - Allocation),再看当前 Available 能同时满足哪些进程的 Need。找到一个满足条件的进程后,假设它执行完并归还资源,Available 变大,再继续找下一个。这个过程要反复推演直到所有进程都标记为完成,或者某个进程找不到可满足资源。

易错点有两个。一是检查时不能跳过进程,每轮要从所有未完成进程里挑一个 Available 够用且 Need 最小的,不能只盯着进程编号小的试一次就放弃。二是安全序列可能不止一条,答案给的是其中一条,只要你的序列每一步都满足资源条件,就和答案等价。如果最后有进程无法满足,说明该状态不安全,这时题目可能会追问“可否分配”,答案应该是拒绝,而不是勉强找一个看似可行的路径。

另外注意边界条件:Available 大于等于某个进程 Need 才能分配,等于也算可以。有些同学把“等于”判成不可分配,结果安全序列多绕了一圈才走通,数字差一个。这类题不太需要背,只需要按表格一步步推,推完再核对答案,准确率就上来了。

3.4 磁盘调度与文件索引:公式记牢了,单位又翻车

磁盘调度题考的是 FCFS、SSTF、SCAN 这些算法的磁头移动轨迹计算。公式本身不难,总寻道距离等于每一步磁头当前位置与目标磁道号绝对差值的累加。翻车点绝大多数出在“当前磁头方向”上:SCAN 算法必须先明确磁头朝内还是朝外,然后一路走到该方向的边界再回头;如果你把方向搞反,移动轨迹和答案能差出上百道。

文件索引题则是另一类单位重灾区。计算最大文件大小时,要先把块大小和地址大小统一成字节或 KB,再算一级间接、二级间接能指向的块数。常见错误是把“每个块能存多少个地址”算成“每块大小除以块大小”,多除一次,结果放大一个数量级。做完这类题,我习惯在草稿纸右下角把单位换算单独写一行,防止中途把 KB 当成字节。

4. 对着答案复习的翻车现场:四个高频坑与排查办法

这一章写的是大家最容易在“用答案”这件事上翻车的地方。每一条我都按现象、原因、解决来拆,直接照着排查即可。

4.1 题号和教材对不上:我看的答案到底是不是这一版

现象:某一章的课后题答案跟教材题目对不上,比如教材第 12 题讲分页存储,答案却写的是设备管理的内容。原因:操作系统教材版本更新后,课后题顺序经常调整,网上流传的答案很多仍是上一版的旧题目顺序。解决:先放弃“按题号对答案”,改成按“题干首句关键词”定位。把教材题干的最后一句或者核心名词拿去答案里搜索,找到匹配的再做比对。如果连关键词都对不上,这道题就直接跳过,说明你的教材版本里根本没有这道题,不用纠结。

4.2 换个进程数量就不会做:同步题在背答案,不是在练套路

现象:某同学能把生产者消费者的标准答案默写出来,但题目换成“三个生产者、两个消费者、一个缓冲区”就写不出来。原因:背答案是背“具体信号量数量”,而没建立“信号量对应资源”的抽象模型。解决:把每个信号量对应到具体资源,用一句话说明“它保护的是什么东西”。然后按四步走:先列出所有进程和共享资源;再给每个资源配信号量并设初值;接着在每个进程内按“先资源后互斥、先互斥后资源”的顺序写 P/V;最后检查有没有可能死锁。题目换多少进程都不怕,模型没换就行。

4.3 手算缺页比答案多一次:初始空白页的计数规则没对齐

现象:页面置换题手算结果和答案差一次,反复检查也没发现哪一步换页换错。原因:缺页计数起点不同。你的草稿把前三次调入内存的空白页都计为缺页,但答案可能把前三页当作预置状态,从第四个页面才开始计。解决:做题前先把题干里“内存初始状态”这句话圈出来。如果题干没写“初始为空”,看答案给的总数能不能反推出它的计数方式。把答案总数回代到你的手算表里,如果差三次,说明答案把前三页预置了;如果差一次,检查中间有没有“页面已在内存但 LRU 顺序更新错了”的情况。

4.4 简答题按“标准表述”背,得分反而低:得分点逻辑没拆

现象:简答题默写出来的文字跟答案差不多,但考卷上分数不理想。原因:课后题答案往往是精简结论,阅卷按得分点给分,你只背了完整的句子,没背出里面的关键得分词。解决:把答案拆成三件套——触发条件、处理过程、唯一结果。比如“死锁产生的四个必要条件”这类题,四个条件名本身就是得分点,一个条件漏写就是丢一个点的分。平时对答案时,自己用荧光笔把名词、数字、条件划出来,默写时只写这些得分词,再补一句连接性描述,分数就稳了。

5. 从答案到自己的一份口试清单:把几十道课后题压缩成十二个考点

最后一章给一个验证方法:把整本课后答案用完一遍后,合上书,自己给自己出一份“口试清单”。做法是每章提炼两到三个核心考点,每个考点用三句话自问自答:第一句说它是什么,第二句说它为什么存在,第三句说它怎么算或怎么写。这张清单比再刷一遍题更有效,因为口述能暴露“好像懂了”和“真懂了”的差距。

我常用的复盘表长这样:

考点我的三句话和答案的差距下一步动作
P/V 操作初值互斥=1,同步=容量漏了“同步信号量必须先于互斥 P”重写一次生产者消费者
页面置换缺页计数初始空白页通常计入教材答案可能预置前三页做题前先标计数起点
银行家安全序列每次找 Available 够用的进程没强调“等于也能分配”重推一遍给定案例
SCAN 寻道方向先到边界再回头方向搞反会差出上百标出磁头起点和方向

这份清单每三天过一遍。能连续默出三天的考点,就说明真正掌握了;默不出来的,回去翻对应章节的课后答案,把那个题的推导过程重新写一遍。我当年就是那个把答案从头翻到尾的人,考完才发现欠的推导迟早要还。希望这份“从答案反推考点”的习惯能帮到你,至少到下一场考试前,你可以不用再凭运气做信号量大题了。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进