简介:这是一份面向计算机专业学生与期末备考者的操作系统复习资料,内容涵盖操作系统基本概念、类型、主要特征、功能模块、发展历程及UNIX系统等考点,并配有答案便于自测。资源包仅含1个doc文档,大小439KB,文档结构清晰,以选择题和填空题形式覆盖核心知识点,适合考前系统梳理与查漏补缺。已有4057人学习使用,说明其内容对期末复习具有较高参考价值。通过完成这些习题,可重点掌握批处理/分时/实时系统的区别、多道程序设计、进程管理、存储器管理等关键概念,并对常见易错选择题有更深入理解。这份复习题集尤其适合需要快速回顾重点、检验掌握程度的本科阶段学习者。
1. 计算机操作系统期末复习题:为什么刷题前要先搭知识骨架
计算机操作系统期末复习题(含答案)这个标题,在期末季几乎是搜到次数最多的学习资料。但我的第一建议是:别急着背题。很多同学拿到一份“含答案”的复习题就从头刷到尾,结果走进考场发现题目稍微改一个条件就不会了,因为操作系统这门课的知识点密度太大,进程、内存、文件系统、I/O 几条主线相互交叉,靠背答案很难形成迁移能力。我一般会先用汤小丹版和慕课版的章节结构把骨架过一遍,再把复习题当成检验工具而不是学习入口。这套打法的核心是:让答案不再是你临时记住的字符,而是你脑子里知识地图的自然输出。适合期末考试前还有三到四周,想稳定拿下七八十分以上的同学。
2. 先搭知识骨架:把操作系统教材拆成三张必考地图
很多人复习操作系统喜欢按章节顺序从头翻书,结果翻到设备管理就忘了进程管理。更高效的做法是先按考试出现频率把内容拆成三张地图:进程与线程、内存管理、文件与I/O。这三块占期末卷面的比重通常在七成以上,其余内容多数是概念型选择填空。复习题里的高价值题目,也基本都围绕这三张地图出。建议你每张地图都用一张 A4 纸画出核心概念和它们之间的关系,再拿复习题往里面对号入座。
2.1 进程与线程:死锁、同步是选择题和简答的重灾区
进程与线程这一块,最常考的并不是“进程是什么”这种定义题,而是状态转换的条件、线程与进程的对比、同步互斥的 P.V 操作题,以及死锁相关的四条件和银行家算法。复习题里凡是出现“进程从就绪到运行的触发条件是什么”或者“等待态能否直接转入运行态”,都是在考察你对状态图的理解。我的记忆方法是把进程状态转换画成环:新建、就绪、运行、阻塞、终止,其中阻塞只能从运行态进入,而阻塞结束后只能回到就绪态。这个环画对了,选择题基本不丢分。
线程与进程的对比是另一个容易出混淆题的地方。常见考法是把进程和线程混在一起列四条描述,问哪条错误。注意进程是资源分配的基本单位,线程是调度的基本单位,同一进程的线程共享进程的地址空间,但各自拥有独立的栈和寄存器上下文。复习题里如果问你“线程切换是否一定需要进入内核态”,答案取决于系统是用户级线程还是内核级线程。汤小丹版教材的课后题里,这个区分经常被放到简答题里考,别看到“线程”两个字就默认是内核级。
死锁这块更偏向计算和判断。死锁四个必要条件缺一不可:互斥、占有且等待、不可剥夺、循环等待。考场上的典型题目是“破坏哪个条件可以预防死锁”。对应关系是:一次性申请所有资源破坏占有且等待,资源可抢占破坏不可剥夺,资源按序分配破坏循环等待。复习题若让你算“系统有 m 个同类资源和 n 个进程,每个进程最多需要 x 个资源,不发生死锁的最少 m 是多少”,直接用公式 m ≥ n(x-1)+1 来套。这个公式很多复习题答案里直接给结论,但你要记住推导逻辑:最坏情况下每个进程都占有 x-1 个资源且都在等最后一个资源,再多一个就能让某个进程执行完并释放。
2.2 内存管理:段页式、页面置换,虚拟内存的必考点
内存管理是期末计算题的最主要来源。连续分配里的动态分区算法、分页系统的逻辑地址到物理地址转换、分段和段页式地址结构、页面置换算法缺页次数计算,这几类题目几乎每年都会出现。复习题里最常见的是给一个访问串和页框数,让你用 FIFO、LRU、OPT 分别算缺页次数。这里最大的坑是页面访问串的初始状态和“页框是否已经预装入页面”没看清。我一般会建议做题时先画一张表,表头是“时间/访问页/页框1/页框2/页框3/是否缺页”,每一步都把页框里的状态写得明明白白,不靠心算。
段页式管理的地址转换更容易出错,因为它有两级查表。你要知道逻辑地址被切成三段:段号、段内页号、页内偏移;CPU 先查段表得到页表起始地址,再查页表得到物理块号,最后拼接页内偏移。复习题里常给一个“段表+页表+内存地址”的混合题,让你算某个逻辑地址对应的物理地址。这类题没有任何玄学,就是把段表项里的页表长度和页表项里的块号按公式拼起来。做题时注意越界判断:段内页号大于段表项中记录的页表长度时直接判定缺页或越界,不要继续往下算。
虚拟内存部分要理解局部性原理,以及请求分页系统如何工作的。选择题喜欢问“虚拟内存的最大容量由谁决定”,正确说法是由计算机的地址结构和外存容量共同决定,而不是物理内存大小。复习题里如果出现“页面置换策略”和“页面分配策略”混在一起比较,你要分清楚:置换策略解决“换出谁”,分配策略解决“给进程分配多少页框”。固定分配局部置换和可变分配全局置换的对比也是简答题常客。
2.3 文件与I/O:inode、磁盘调度和目录结构的拿分点
文件管理这一章的分值虽然没有前两章高,但属于“背了就能拿分”的性价比高地。文件逻辑结构、物理结构、目录结构、磁盘空闲空间管理、磁盘调度算法,这五类知识点在复习题里重复率极高。汤小丹版教材里 UNIX 的索引文件结构是计算题热门:给一个索引块大小和每个盘块地址占用的字节数,算文件最大长度。这类题的核心是把直接索引、一级间接索引、二级间接索引的地址个数分别算出来再相加。
inode 与文件目录的关系也是易混淆点。文件目录项里存的是文件名和 inode 编号,而文件的元数据都在 inode 里,包括文件大小、权限、块地址。复习题如果问“删除一个文件时,目录项和 inode 谁会先被清空”,你要知道答案是先删目录项,同时减少 inode 的连接计数,计数为 0 时 inode 才被释放。这个逻辑在很多选择题里被包装成“硬链接”的题,原理是一样的。
磁盘调度算法里,先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描算法(SCAN)是必考。计算题的坑在于“磁头初始位置”和“请求序列是否已经按到达时间排队”。FCFS 按序列顺序走,SSTF 每次选离当前位置最近的请求,SCAN 先向一个方向移动直到没有更远的请求再回头。复习题答案如果只给一个最终移动总距离,却不给磁头移动过程,你最好自己画一条数轴验证一遍。另外注意 C-SCAN 和 SCAN 的区别:C-SCAN 到一端后直接返回起点,返回途中不服务请求,很多同学在简答题里把这个细节写错。
3. 三遍法刷含答案复习题:错题本与考点归并的落地脚本
知识骨架搭完后,复习题才能发挥真正作用。我习惯用“三遍法”来刷题:第一遍按章刷,第二遍交叉刷,第三遍只刷错题。这三遍的目的不同,第一遍是熟悉题型,第二遍是建立考点连接,第三遍是消灭薄弱点。如果不分阶段直接从头到尾刷题,很容易出现“每道题都看着眼熟,但合上答案就写不出来”的情况。下面我把这个流程拆成三个步骤,并给一个帮你统计错题分布的小脚本,避免错题本变成一张又一张零散纸片。
3.1 第一遍按章刷题:把每道题还原到教材出处
第一遍刷题时,不要直接在题目旁边写答案,而是准备一个“题目来源表”。题目来源表至少要包含三列:题干关键词、对应教材章节、对应知识点。拿一道“进程在哪个状态下可以被撤销”的选择题举例,你要在表里写下“进程状态、第三章、状态转换”。这一步看着繁琐,但它能帮你把复习题和汤小丹教材的章节结构对齐。等这个表填完,你就能看清复习题的题量分配是不是和教材重点一致,很多复习题其实在设备管理和操作系统接口部分题目偏少,这时候就需要自己补充慕课版的对应章节习题。
我通常会给每个章节建一个单独的 Markdown 文件,文件名格式是“ch03-进程管理-错题记录.md”。刷第一遍时把错题复制进去,并把正确答案和教材页码放在同一行。这道工序的产出不是一份错题集合,而是一个可检索的索引文件。期末阶段你只需要在本地用搜索引擎或 grep 命令按关键词查题目,就能快速定位到对应知识点,比翻纸质笔记快得多。这里有一个很重要的习惯:凡是答案有“为什么”的简答题,不要照抄答案,用自己的话写三行解释。写不出来说明这个知识点还属于“黑匣子”,需要回到教材对应小节重看。
3.2 第二遍交叉刷题:把同类考点归并成一张“考点-题型”表
第二遍刷题的核心动作是“归并”。很多考点会以不同题型出现在不同章节的复习题里,比如“临界区”既能在进程同步的选择题里出现,也能在管程概念的简答题里出现。你应该把这些散落的题目归并到同一个考点下,形成一张“考点-题型”表。表头可以是:考点、选择/填空出现位置、计算/简答出现位置、易混淆点。这张表的价值在于让你看清同一个概念从识记、理解到应用的要求差异,也能帮你预判考试出题形式。
实际做法是:用第一遍整理好的 Markdown 文件,逐个考点搜索,把所有包含该关键字的题目行复制到考点汇总表。比如搜“银行家算法”,你会看到不少题目问“安全状态判断”“安全序列计算”“死锁避免与检测的区别”。归并后你会发现,银行家算法永远只考三件事:Need 矩阵计算、Available 与 Work 的关系、安全序列构造。把这三件事列到考点-题型表里,再去刷第三遍时就不会再犯“会算 Need 却不会找安全序列”的问题。
这个阶段还要顺手给每个考点标注一个优先级:教材目录里花了大量篇幅讲解的内容标为高,只在课后题里出现的标为中,复习题中反复出现但教材只提一句的标为低。高优先级的考点要在错题本里确保至少有五道题覆盖,低优先级的考点只要会做基本题就够了,不要在这种地方花太多时间。这个优先级完全由你自己根据教材和 PPT 的篇幅判断,不要迷信网上流传的“十大必考点”列表。
3.3 第三遍只刷错题:用脚本统计错题分布,生成复习清单
第三遍的核心是消灭错题,而不是把所有题再刷一遍。这时候你需要一份能统计错题分布的清单,靠手工数很容易漏。我一般会用一个小 Python 脚本读取一份记录刷题结果的 CSV 文件,按考点统计错误率和错误次数,然后输出一份按错误率排序的复习清单。这样你能一眼看出哪些考点是“稳定丢分点”,哪些只是偶发失误。
import csv from collections import defaultdict def analyze_errors(csv_path, result_col="结果"): total_by_point = defaultdict(int) wrong_by_point = defaultdict(int) with open(csv_path, encoding="utf-8-sig") as f: reader = csv.DictReader(f) for row in reader: point = row["考点"] total_by_point[point] += 1 if row[result_col].strip() == "错": wrong_by_point[point] += 1 print("考点,总数,错误数,错误率") for point in sorted(total_by_point, key=lambda p: wrong_by_point[p]/total_by_point[p], reverse=True): total = total_by_point[point] wrong = wrong_by_point[point] print(f"{point},{total},{wrong},{wrong/total:.1%}") if __name__ == "__main__": analyze_errors("./exam_results.csv")这段脚本的逻辑非常简单:用csv.DictReader读取表头,循环每一行时把“考点”列作为分类键,统计总出现次数和回答“错”的次数,最后按错误率降序输出。使用它之前,你需要先把自己的刷题结果整理成 CSV 文件,至少包含三列:考点、结果、题目编号。我的习惯是每次刷完一批题就把结果录进去,不要在考前几天一次性补录,否则统计结果会失真,因为你会忘记当时到底哪里卡住过。
脚本里唯一需要按你自己情况改的参数是result_col,默认取名为“结果”的列。如果你的文件里这一列叫“对错”或“status”,把第二个参数改掉即可。另外注意读取文件时用了utf-8-sig编码,这是为了防止 Excel 另存为 CSV 时产生 BOM 头导致第一列字段名变成\ufeff考点。我这里输出的格式是逗号分隔的文本,你可以直接重定向到文件再导入 Excel:在终端里执行python analyze_errors.py > review_plan.txt。如果同一个考点错误次数达到 3 次以上,就把它作为第三遍刷题的最高优先级,每天至少重做一遍相关题目直到连续两次正确。
4. 把静态答案变成限时模拟卷:抽题、隐藏答案与得分统计
复习题含答案是一份题库,但直接看答案会降低自测效果。更有效的用法是在期末前两周,把题库按章节比例随机抽题,组装成一份分值为 100 分的限时模拟卷。这样做的目的不是押题,而是让你提前进入考试状态,练出时间分配的手感。组装模拟卷的方式不需要多么复杂,我一般用 Python 从题库 CSV 里随机抽题,生成一份不含答案的 Markdown 文件,再把答案单独放到另一个文件里,等做完再对答案。
4.1 组装模拟卷:从题库里抽题并隐藏答案
要组装模拟卷,你首先要有一份结构化的题库文件。我建议把复习题整理成统一的 CSV 格式,至少包含:章节、题型、难度、题干、答案。整理的时候不需要把每道题都手打进去,很多电子版复习题可以直接从 PDF 复制,再用正则清洗掉多余空行。下面这段脚本会按章节和题型从题库中随机抽取指定数量的题,生成只含题目的卷子和一份含答案的对照表。
import csv import random def build_exam(source_csv, exam_output, answer_output, picks=None): if picks is None: picks = [("进程管理", "选择", 5), ("内存管理", "计算", 3), ("文件管理", "简答", 2)] with open(source_csv, encoding="utf-8-sig") as f: rows = list(csv.DictReader(f)) exam_lines, answer_lines = [], [] used = set() for chapter, qtype, count in picks: candidates = [r for r in rows if r["章节"] == chapter and r["题型"] == qtype and r["题干"] not in used] selected = random.sample(candidates, min(count, len(candidates))) for i, r in enumerate(selected, 1): used.add(r["题干"]) exam_lines.append(f"### {chapter} - {qtype} {i}\n\n{r['题干']}\n") answer_lines.append(f"### {chapter} - {qtype} {i}\n\n{r['答案']}\n") with open(exam_output, "w", encoding="utf-8") as f: f.write("# 模拟卷\n\n" + "\n".join(exam_lines)) with open(answer_output, "w", encoding="utf-8") as f: f.write("# 模拟卷答案\n\n" + "\n".join(answer_lines)) if __name__ == "__main__": build_exam("./question_bank.csv", "./exam.md", "./answers.md")这段脚本的逻辑是:先读取题库 CSV,按传入的picks列表逐个章节和题型筛选候选题目,再用random.sample做无重复抽样。used集合的作用是防止不同批次的抽题选中同一个题干,避免同一张卷子里出现重复题目。抽完的题干写入exam.md,对应答案按相同编号写入answers.md,两份文件的题号一一对应,方便你做完后对照。picks参数是组装卷子的核心配置,你应根据目标院校教材的章节比重来修改,比如汤小丹版里进程管理和内存管理占比高,就可以把这两章的题目数量调大。这里写的是默认参数,不是固定值。
运行时要注意一个边界:如果某章某种题型的候选数量少于count,random.sample会报错,所以脚本里我写了min(count, len(candidates))。实际使用中,如果你发现某个章节抽出来的题太少,说明题库文件里对应的题目数量不够,需要再补录。生成 Markdown 后,我建议直接用支持 Markdown 预览的编辑器打开,不要导出 Word,因为数学公式在 Word 里很容易错位。你还可以把picks里的数量改成一个大的组合,比如“进程管理 10 道,内存管理 5 道,文件管理 3 道,I/O 管理 2 道”,这样就能得到一份标准 100 分卷子的题量。
4.2 打分标准与时间分配:按分值算复习成本
模拟卷抽好后,要给它配一个可执行的时间预算。操作系统期末卷子通常是 90 到 120 分钟,题型分布大概是选择填空 30 到 40 分,简答 20 到 30 分,综合计算 40 到 50 分。我见过很多同学做模拟卷时在一道银行家算法计算题上死磕半小时,导致后面文件系统简答题来不及写。这里分享一个实际可用的时间分配表,你可以根据自己的速度调整:
| 题型 | 建议分值 | 建议时间 |
|---|---|---|
| 选择填空 | 30 分 | 15 分钟 |
| 简答 | 20 分 | 20 分钟 |
| 计算与应用 | 50 分 | 50 分钟 |
| 检查与涂卡 | 0 分 | 10 分钟 |
这个时间分配的隐含逻辑是:选择题平均每分钟做两道,简答题每题 5 分钟内完成主体要点,计算题每题 10 到 15 分钟。如果做模拟卷时某道计算题超过 15 分钟还没有完整思路,立刻做记号跳过去,等整张卷子完成后再回头。真实考场上,老师不会允许你在单道题上无限投入,模拟卷就是要练习主动放弃。我一般会在卷头用不同颜色的笔标出“打算跳过题目的条件”,比如“超过 5 分钟没写出第一步”就跳。这个习惯能有效降低考场上卡壳时的焦虑。
打分标准也要提前定好。计算题不要只写最终答案,每个关键中间步骤占 2 到 3 分,比如页面置换表每写对一个行给 1 分,银行家算法的安全序列每选择一个进程给 2 分。简答题按要点给分,每写对一个关键术语得 1 分,能写出定义和优缺点对比的得满分。你自己判卷时,最好严格按照这个标准来,不要对自己仁慈。判断一道简答题能不能拿满分,就假装自己是老师,只看关键词是否出现,不看句子通顺不通顺。
4.3 用 CSV 管理答题卡:统计正确率与弱点
模拟卷做完以后,对答案只是第一步,还要把每一道题的结果记录到 CSV 里。这和你前面刷题的记录格式可以完全一致,我把模拟卷里的题号和对应考点都写在题目旁边,这样记录时可以直接复用。养成分章记录的习惯后,你的 CSV 会积累出一整条正确率曲线。期末最后一天,你只需要看哪个考点的正确率低于 60%,就知道该临时抱哪只脚了。
如果你不想再写代码,直接在 Excel 里用数据透视表按考点统计正确率也能达到同样目的。但如果你手里已经有第 3 章的analyze_errors.py,我建议把模拟卷的成绩也录入同一个 CSV,然后重新跑一次脚本。因为模拟卷题目是随机抽的,它的错误率分布比平时刷题的分布更能反映真实知识漏洞。平时刷题你可能因为连续做同一章而“机械记忆”了答案,但模拟卷打乱了章节顺序,考的是你跨章节调取知识的能力,得分更可信。
我还会在答题卡的“备注”列里记录每次做错的原因,比如“把P和V操作顺序写反”“忽略了页框初始状态是空”“安全序列中未释放资源”。这些备注非常重要,它们是你能定位自己思维偏差的唯一凭据。到了第三遍复习时,你不需要重新去看每道题的完整解析,只看这些备注就能想起来当时的卡点。如果没有这些备注,你大概率会在同一个地方反复出错,然后反复怀疑自己的复习效率。
5. 操作系统期末刷题避坑指南:四类高频翻车现场与排查顺序
刷计算题也好,背简答题也好,有几类错误几乎每个人都会遇到。这一章我挑四类最常见的翻车场景来拆解,每一条都按“现象、原因、解决”来说。这些血泪经验大多不是题目本身多难,而是复习题答案省略了中间过程,或者教材版本之间表述不一致造成的。遇到这类情况时,先不要急着质疑自己,按下面的顺序倒推排查。
5.1 看 P.V 操作题答案觉得对,自己写却卡死
现象:对着复习题答案看 P.V 操作代码,每一步都说得通,但关上答案让你自己写“生产者-消费者”或“读者-写者”的同步代码,就会在初始化信号量的位置卡住。尤其是写读者写者问题时,不知道为什么要在读者进程里再加一个互斥信号量修饰计数器。
原因:你只是在阅读,没有内化“信号量初值取决于资源数量”这条原则。互斥信号量初值为 1,空缓冲区信号量初值为 n,满缓冲区信号量初值为 0;读者计数器的保护信号量初值为 1,因为需要保护读进程的共享变量。许多人把信号量当成随机变量,凭感觉给初值,自然一写就错。
解决:拿到任何 P.V 操作题,第一件事先用自然语言列出资源约束,把“这是一个互斥保护”和“这是一个资源数量同步”分开。然后给每个信号量写注释,例如semaphore mutex = 1; // 保护缓冲池的互斥访问。练习时先抄一遍标准答案,再遮住答案把代码默写三遍,直到每一步都能解释为什么先 P 后 V、为什么不能交换顺序。默写不到位,就说明还没理解资源竞争的本质。
5.2 页面置换算法算错在页框初始状态和访问串的边界
现象:用 FIFO、LRU 算缺页次数,自己在草稿纸上算出来 10 次,参考答案是 9 次。反复检查流程也找不到错,最后发现是题目里说了“页框初始为空”或“已装入前三个页面”没注意。
原因:复习题的题干里通常只有一句话描述初始状态,但不同的含答案题库表述五花八门。有的答案默认初始页框为空,每来一个页面都算缺页;有的默认先把前几个页面的访问作为填充,不算缺页。如果两套复习题对同一类题目口径不同,你就会得到完全不同的结果。
解决:做题前先用笔把初始条件圈出来。如果题干没有明确说“页框初始为空”,一律向老师或教材确认,不要擅自假设。计算时画一张表,第一行先标出初始页框内容,之后每一步问自己“当前访问页在不在页框里”。写代码验证时,把初始状态作为函数参数传入,方便测试不同口径。我经常写一个只有十几行的 Python 函数模拟 FIFO,传入不同的初始条件对比结果,这比纯靠手算靠谱得多。
5.3 银行家算法死活找不出安全序列
现象:题目给了一张资源分配表,Need 矩阵和 Available 也算得出来,但每次找安全序列时都发现没有任何进程的 Need 全部小于等于 Available,于是判断为不安全。可参考答案却说存在安全序列。
原因:你可能漏看了系统当前已分配资源的回收条件。安全序列的每一步,除了要找一个 Need 小于等于 Work 的进程,还必须在该进程完成后让Work += Allocation回收它的已分配资源。不少同学只把目光放在 Available 的初始值上,没有意识到每一步结束 Work 都会变大,结果当然找不出序列。
解决:每做一步都在草稿纸上写Work[i+1] = Work[i] + Allocation[选择进程],并把它和该进程的 Need 比较。遇到多个满足条件的进程时,任选一个继续,如果后面发现走不通,就回到分岔口换另一个候选进程,这就是标准回退法。做这类题只有亲手把安全序列从头走到尾,才算真正会了,光背“先找 Need 最小的进程”这种口诀没用。
5.4 复习题答案与教材版本不一致,信谁?
现象:同一道题,汤小丹版课后习题答案和慕课版习题解析给的结果不一样,比如某道进程同步题的信号量个数不同,或者某道页面置换题的总移动距离不同。复习题里标注的“参考答案”可能是某个学长自己整理的,并不是标准答案。
原因:操作系统教材版本迭代后,部分课后题删改过,而网络流传的复习题往往沿用老版答案。慕课版的题目顺序、数值和题号都可能调整,照抄旧答案自然对不上。另外,不同作者对“缺页是否包含首次装入”的口径不同,也会导致答案差异。
解决:遇到矛盾答案,先判断题干里的参数是否一致,数字不同就以教材原题为准。如果确认题干一致但答案不同,回看教材正文或慕课视频里的例题解法,以讲解过程为准,而不是以某份复习题的结论为准。最稳妥的办法是直接把这道题交给任课老师确认,或者带着问题去学校课程论坛搜索,搜索关键词用“教材名 章节 题号”会比“答案”更有用。千万不要因为复习题答案是这么写的,就硬记一个错误结论。
最后两天:用问答卡片和高频错题本做快速回顾
到了最后两天,不要再整章整章地刷题,而是要把复习资料压缩成两份:高频错题本和问答卡片。我会把之前脚本统计出来的错误率最高的考点改成“一问一答”的格式,每张卡片正面写一个简答题或计算题的关键条件,背面写三行以内的答案要点。例如正面写“缺页率与页面大小的关系”,背面写“页面越大,页表项越少,缺页中断次数可能减少,但内部碎片增加;页面过小则页表过长”。这种卡片用手写卡片或用表格软件都能做,关键是控制背面字数,逼着自己提炼核心逻辑,而不是抄整段答案。
做这些卡片时,只保留那些你曾经真正做错过的题目,不要贪多。我的经验是错题卡数量控制在 40 张以内,超出的话最后两天根本翻不完。翻卡时用随机顺序,不要按章节顺序看,因为考试顺序也是打乱的。我会在每张卡上标注“已掌握/未掌握”,只看未掌握的卡片,等一张卡连续两次答对后再把它从待看列表里移出去。到考前最后一晚,这四十张卡基本能缩到十张以内,我反而觉得特别踏实。
另外一个有用的技巧是把高频计算步骤做成一个速查表,贴在笔记最前面。比如银行家算法安全序列检查四步:第一步计算 Need,第二步初始化 Work=Available,第三步找未完成任务且 Need≤Work 的进程,第四步记下进程并回收其已分配资源。这种速查表的目的不是提供完整解法,而是防止你在考场上因为紧张突然忘记某一步。我现在每逢考试都用这个“错题卡+速查表”的组合,比考前重新翻一遍整本复习题轻松得多。回头想想,操作系统这门课最让人后悔的事,就是一开始直接对着答案背题,把复习题当成终点而不是工具。希望借这篇文章帮你避开那个坑,用好手头这份含答案资料。希望帮到你。
本文还有配套的精品资源,点击获取