ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

操作系统课后习题答案这样用:从信号量到银行家算法真正吃透考点

操作系统课后习题答案这样用:从信号量到银行家算法真正吃透考点

简介:这是计算机操作系统教程(左万利、王英第四版)的课后习题答案文档,面向高校计算机专业学生及考研复习者,覆盖操作系统核心考点:进程管理、调度算法、死锁避免、银行家算法、读者与写者问题等。内容以典型例题详解为主,如第三章对EDF与RMS算法调度可行性判断及Gantt图绘制,FCFS、SJB、HRN算法的平均周转时间与带权周转时间计算;第四章给出读者/写者问题的信号量解法,并对比读者优先与写者优先策略;第五章通过银行家算法实例演示安全性检测与资源分配决策过程,便于对照教材逐题查漏补缺。文件为单个doc格式,共1个文件,压缩包大小约4.21MB,下载即可直接查看打印。已有6334人学习浏览,适合需要强化操作系统原理习题训练、准备期末或考研的读者使用。

1. 《计算机操作系统教程》(第四版)课后习题答案,到底能帮你学到什么程度

操作系统大概是计算机专业里“课听懂了,题做不对”的重灾区。拿一份《计算机操作系统教程》(第四版)的课后习题答案来复习,最常见的吃法是打开文档从头浏览到尾,把答案抄一遍,合上文档心里踏实,上考场却发现自己连“PV操作”里信号量加减的完整流程都讲不清楚。这份答案文档的本质不是背诵材料,而是一块试金石——它能如实暴露你对知识点的掌握程度:并发与互斥、死锁四条件、页面置换缺页率、磁盘调度顺序,哪些是真会,哪些只是眼熟。它适合三类人:期末考前突击的、考研一轮复习卡壳的、以及自学完一章想验证学习效果的人。用对了,它是提分最快的资料;用错了,它就是心理安慰。

2. 操作系统考点地图:从进程到文件系统,课后习题集中在这八块考点

2.1 从并发到死锁:教材章节与高频考点的对应关系

拿到任何一本操作系统教材的课后习题答案,第一件事不是开始抄,而是把答案的目录结构和教材目录对齐。操作系统课程的知识体系几十年来相对稳定,一份《计算机操作系统教程》(第四版)的答案,通常围绕下面这些知识模块展开。不同版次或不同院校定制讲义里章节的先后顺序可能有微调,但考点不会跳出这个范围。

知识模块核心考点课后习题主要题型答案文档里重点看什么
操作系统概述定义、四大特征(并发/共享/虚拟/异步)、中断与系统调用、分类概念题、简答题特征之间的区别与联系,中断响应过程
进程与线程进程模型、状态转换、进程控制块、线程与协程、进程通信概念题、状态转换图题状态迁移条件,通信方式的适用场景
处理机调度调度层次、FCFS/SJF/优先级/时间片轮转/多级反馈队列计算题(周转时间)计算过程与调度规则的一一对应
同步与互斥临界区、信号量与PV操作、生产者消费者/读者写者/哲学家进餐PV操作编程题信号量初值与P/V配对逻辑
死锁死锁必要条件、预防/避免/检测、银行家算法概念题+算法计算题安全序列的推导步骤
内存管理连续分配、分页/分段/段页式、虚拟存储、页面置换、地址变换计算题(缺页率/地址变换)地址变换过程,置换算法的手算步骤
文件管理文件逻辑结构、目录、存储空间管理(位示图)、磁盘调度计算题(磁盘寻道)FIFO/SSTF/SCAN 的访问顺序计算
设备管理I/O控制方式、缓冲技术、SPOOLing、设备分配概念题、简答题中断/DMA/通道三种方式的核心差异

这份对照表看着长,实际使用时有取舍。期末复习和考研一轮复习的侧重点完全不同:期末更均衡,几乎每个模块都出题;考研则明显偏向进程管理、内存管理和死锁这三块,文件与设备部分的题目通常以概念题形式出现。看答案文档时,先想清楚你当前的知识缺口在哪,再按模块分配精力,不要八块平均用力。

2.2 同一道答案,两类读法:概念题看表述,计算题看步骤

课后习题答案的用途不能一概而论,要分成概念题和计算题两类,读法完全不同。

概念题的答案值得逐句读。批改概念题看的是术语准确性和逻辑链条。举个例子,问“什么是死锁”,标准的答案会分三层:先给出死锁的定义,再说明与“饥饿”的区别,最后补一个典型场景。很多学生写的答案只有第一句定义,这不是“知道”而是“知道一半”。答案文档里那些看起来有点啰嗦的展开句,恰恰是拿分的关键。在自测时,可以合上答案先写一遍,再看答案的用词和结构上的差异。

计算题的答案价值全在过程。这类题包括调度算法的周转时间、页面置换缺页率、银行家算法安全序列、磁盘寻道顺序。核对时很多人只看最后的数字,忽略中间的推导和表格,这是把计算题当成判断题在做。后面第5章会讲怎么用这些计算题做变形自测,这里先强调一个原则:数字对上了,不代表你会做;过程能复述,才算吃透。

2.3 三道必练的计算题套路:调度、页面置换与银行家算法

调度算法题是操作系统课上最“公式化”的一类计算题。题目会给出一组进程的到达时间和预计运行时间,要求计算平均周转时间和平均带权周转时间。周转时间等于完成时间减去到达时间,带权周转时间等于周转时间除以服务时间。难点在区分不同调度规则下的完成时间:先来先服务按到达顺序排队;短作业优先按服务时间排序,若是可抢占版本还要在每次新进程到达时重新比较剩余时间;时间片轮转则要模拟时间片耗尽后的排队队尾追加。用答案文档核对时,要特别关注每个进程的完成时刻,很多答案在前一个进程的完成时刻算错,后面全串。

页面置换题是另一类高频计算题,给你一个页面访问序列和内存块数,求缺页次数与缺页率。手算时先画表格,列是访问序号,行是内存块,缺页就记×。FIFO看进入内存的先后,LRU看最近一次被访问的时间早晚。这里有一个著名的翻车点:内存块增加,缺页次数反而变多,这是FIFO的Belady异常。比如经典访问序列1,2,3,4,1,2,5,1,2,3,4,5,开3块内存时FIFO缺页9次,开4块内存反而缺页10次;同样的序列换成LRU,3块时缺页10次,4块时降到8次。初次接触会觉得这像玄学,实际上FIFO只认进入顺序,不认访问热度,才会出现这种反直觉现象。

提示:Belady异常只在FIFO等非栈式置换算法中出现,LRU属于栈式算法,理论上不会发生“内存变多反而缺页更多”的情况。做题时注意别把两类算法的性质混在一起。

银行家算法是死锁避免的核心考点,也是手算步骤最多的一道题。整体分三步:先算每个进程还需要的资源量 Need = Max - Allocation;再反复寻找满足 Need ≤ Available 的进程,假设把资源分给它执行完,执行完立刻收回它的 Allocation,更新 Available;最后如果所有进程都能依次完成,就找到了安全序列。这道题最容易错在第2步忘掉“记账”——资源借出去后Available要同步更新,后续判断必须基于最新值而不是初始值。对答案时,每一行的Available变化都应该能对上,对不上就是自己的推导链断了。

3. 把答案文档变成复习工具:做题、溯源、建索引的三步实操

3.1 第一遍:遮答案做题,敢在错题上画记号

不要打开答案就从第一题看到最后一题。我一般建议把复习周期拉到两到三周,每周拿出一个完整下午,把当周学过的章节习题复印一份,遮住答案区域,在空白处自己动手写。写的时候用三种记号区分错题类型:完全没思路的空着,概念表述不准的划波浪线,计算过程错的画圆圈。这一步的核心目的不是“做对”,而是让答案文档变成一面镜子。

直接看答案时,大脑会产生一种“这个词我认识”的熟悉感,这是阅读错觉。拿起笔从零开始写,才会发现自己连“进程创建时最先初始化哪个数据结构”都要想半天。抄答案的瞬间觉得全会,合上文档就忘,考场上翻车的根源就在这里。第一遍做题时不在乎对错,只在乎能不能在完全独立的情况下写满两行字。空着反而比瞎写更有价值——空着意味着这里完全没有建立概念,需要重新看教材对应章节;瞎写说明概念有雏形,只是细节偏差,纠偏成本低得多。

3.2 第二遍:答案溯源,把每道题挂回到教材知识点

对完答案不要急着进入下一章,花30分钟做一次“答案溯源”。具体做法是:每道错题旁边,写下它对应的考点名称。比如某道题问进程从就绪到运行的转换条件,那道题就标“进程状态迁移”;另一道PV操作题用的是缓冲队列,就标“生产者消费者模型”;还有一道算缺页率的题,标“LRU置换算法”。

这里的逻辑是“题目→考点→教材原文”的倒推。错题暴露的是考点而非题目本身,同一考点下的三道错题,说明这个考点所处的整个章节可能没有建立起概念框架。比如连续三道题都卡在分页地址变换上,大概率是页号和页内偏移量这两个基础概念没分清,而不是某一步计算失误。这种情况下应该回到教材的对应小节重读一遍,再回来做题,而不是只改眼前这道题的答案。

课程知识体系的另一个规律是:课后习题的出题范围集中度很高,高频考点往往在历年考试里反复出现。做完一半章节的溯源之后,可以回头统计一下哪些考点被标记的次数最多,那些点就是重点中的重点。这个统计不需要专门做表,扫一眼错题旁的标记就知道。

3.3 第三遍:建一个错题索引,而不是抄一本错题本

很多学生复习时会把错题工工整整抄进本子,抄完再也不看。这种做法把宝贵的复盘时间花在了誊写上。我建议只建索引,不抄题。索引表的每一行是一道错题,记录四个字段就够了。

考点题目一句话描述错误类型状态
信号量同步双缓冲区生产者消费者,P/V顺序颠倒步骤遗漏已解决
页面置换访问序列含重复页,LRU没数最近访问时刻概念混淆待复习
银行家算法安全序列找到一半,Available没更新步骤遗漏已解决
磁盘调度SCAN算法单方向移动,回程不处理请求公式记错待复习

错误类型可以归成四类:概念混淆、公式记错、步骤遗漏、审题偏差。每个类型对应的复习动作不一样。概念混淆要回教材重读定义;公式记错要把公式手写三遍并附一个应用例子;步骤遗漏要重点练习解题流程,而不是做新题;审题偏差需要训练圈关键词的习惯。

索引表的另一个用途是预测考试重点。课后习题历来是老师出题的重要依据,习题里反复出现的考点大概率就是考试重点。复习后半段每次只看这个表和教材目录,快速确认每个考点的掌握状态,比盲目重翻答案文档高效得多。状态一栏用“待复习/已解决”就够了,不需要记录太多细节,否则索引就变成了第二个错题本。

4. 常见问题与避坑:版本串号、格式乱码与“看懂了”的假象

4.1 答案版本串号:题目对不上、编号错位的三个检查点

现象:从网上找到的答案文档,做第六章的题,答案却对应到第七章的编号上;某道题目的答案明显是另一道题的,连关键术语都对不上。

原因:这类答案文档大多由历届学生或资料整理者手工录入,章节编号随教材版次调整而失配。有的文档来自更早的第三版,有的来自不同院校自编的讲义,还有扫描件经OCR转换后出现题目张冠李戴。这些问题不是个例,而是这类文档的普遍风险。

解决:使用前做三个检查点。第一,对照教材目录核对章节标题,确认文档中的章节划分和你手头教材一致。第二,用每章习题的关键术语验证内容对应关系,比如这章讲“位示图”,答案里却大篇幅讨论“管程”,说明章节已经错位。第三,遇到数字类参数与教材正文不一致的,比如磁盘块大小、页表项位数,以教材正文的定义为准,答案里的数字很可能是旧版参数没更新。

4.2 .doc 排版雷区:公式乱码、下划线消失、表格散架的抢救办法

现象:一段文字读着正常,一到公式就变成“??”或乱码;填空题的下划线全部丢失,答案和题干挤成一行;表格边框错位,数据被文字挤成长串。

原因:.doc 格式高度依赖本地字体映射,从 WPS 到 Word,从 Windows 到 Mac,公式编辑器和字体渲染引擎不一致就会导致乱码。这个问题在手机自带的文档阅读器上尤其频繁,因为这些阅读器只做了文本解析,没有完整实现 .doc 排版引擎。

解决:第一个方法是转换格式,把 .doc 转成 .docx 再查看。用 LibreOffice 无头模式转换,命令如下。

libreoffice --headless --convert-to docx "计算机操作系统教程_课后习题答案.doc" --outdir ~/docout

参数说明:--headless表示无界面运行,适合单次或批量转换;--convert-to docx指定目标格式;--outdir指定输出目录。转换后用办公室软件重新打开,检查公式和表格是否恢复。如果公式本来就是图片或乱码文本,直接对关键页面截图查看,不要依赖文档内的文本搜索功能。

第二个方法是导出 PDF。PDF 会把公式、表格和分页固定成版式,阅读稳定,适合长期保存和打印。第三个方法只适合单页小表格的问题:手动重设字体,正文用宋体、公式用默认公式字体,一页一页修。这个方法耗时高,不推荐大范围使用,除非你只需要那一页的某个表格内容。

4.3 “看懂了”的假象:抄答案的代价与补救

现象:考场上看到一道眼熟的题,写的时候却卡在开头第一步;考完对答案觉得“我见过这个”,成绩出来却不理想。

原因:阅读答案时大脑产生的是识别记忆,考试需要的是提取记忆。两者完全不同。操作系统这门课尤其特殊,计算题和PV操作题都是过程分制——知道答案是一个数字,但写不出得出这个数字的每一步,过程分一分都拿不到。

解决:补救办法是“默写式复盘”。对每道计算题,合上答案,在草稿纸上把完整推导从头写一遍,再逐行核对答案。默写不是背诵,而是重新理解每一步的发生逻辑:这一页为什么被换出,这个信号量为什么要P一次,这步调度为什么选这个进程。做到能不看答案复现整个推导过程,才算真正掌握。这一条也是下一章进阶练习的基础,只有先能默写,才能谈得上变形和自出考题。

5. 进阶用法:把习题改造成自出考题,反向凿开知识漏洞

5.1 三种最省事的改题法:换参数、换场景、正反互换

答案文档里的习题做熟了,会进入一个危险状态:看到题号就能报出答案。这时候题已经失去了检测能力。我常用的做法是给原题做三个方向的改造。

第一种是换参数。页面置换题把访问序列换成一组新的、含重复页的序列;调度题把进程到达时间和服务时间全部改掉;银行家算法把进程数和资源类数调大调小。参数变了,方法的骨架不变,但如果你只是背了原题答案,立刻会卡住。第二种是换场景。生产者消费者问题改成读者写者问题,单缓冲区改成双缓冲区,同步问题的本质没变,信号量的设置却完全不同,能迁移才算理解。第三种是正反互换,把“给序列求缺页次数”反着出成“给定缺页次数反推一组可能的访问序列”。这种自虐式的练习做一次,比闷头做十道原题都管用,因为反推逼迫你把置换规则里的每一步在脑子里重新走一遍。

5.2 考前两小时的最高性价比用法

考前不要再看整份答案文档,而是打开错题索引表,对每个考点快速复现关键步骤:调度公式先列周转时间还是带权周转时间,银行家算法安全序列怎么开头,LRU 要数最近访问时刻而不是进入时刻。有一个考点复现卡顿,立刻翻教材对应段落,把那个知识点当临时补丁看。这种查缺补漏的方式比从头刷答案高效得多,因为索引表里留下的全部是你真实错过的点,而不是教材的平均分布。

我当年复习操作系统最后悔的一件事,就是把大把时间花在誊抄答案上,抄完内心满足,实际上把最宝贵的推导训练变成了体力劳动。后来把时间全部挪到“遮答案做题、溯源、建索引、改题自测”这四件事上,成绩才真正稳定下来。希望你少走这个弯路,希望帮到你。

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

RELATED READING

延伸阅读

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