简介:面向西工大801考研的操作系统核心知识点总结,覆盖进程管理、内存管理、文件管理、设备管理与作业调度六大模块。压缩包共一个PDF文件,约十九兆字节,为扫描版笔记,适合冲刺阶段系统回顾与查漏补缺。目前已有一百六十七人学习下载。内容细述进程控制块、五种状态转换、常见调度算法、信号量与管程,内存管理的分区、分页分段、地址映射、虚拟内存及碎片问题,文件管理的逻辑与物理结构、存取方法、访问控制,以及设备管理中的块字符设备、程序控制中断与直接内存访问、假脱机调度策略,并单列作业调度中的生命周期与周转、响应时间及吞吐量指标。整体结构清晰、条目分明,可帮助考生快速搭建知识框架、强化易混淆概念记忆。
1. 操作系统为什么必须"自己总结"一遍
很多人复习操作系统,教材、课件、别人的笔记一大堆,但一到面试或考场,最基本的追问都能让人卡壳。"进程和线程的区别"答得上,追一句"线程共享了哪些资源、哪些不共享"就开始犹豫。我见过一位A同学,三本不同体系的操作系统教材都翻过,最后在一道"LRU 页面置换在顺序扫描场景下为什么会退化"的题前干瞪眼。问题不在书少,在于知识是别人的,不是自己的。
操作系统自己总结.pdf,本质就是把操作系统从"看过"变成"能讲出来"。按自己的逻辑把进程、内存、文件系统重新组织成一份随时能翻的 PDF,过程中暴露出的每个含糊点才是真正的复习重点。它不是教材的压缩,而是合上书后能默写出来的知识地图,适合面试备考也适合期末冲刺。后面我从搭知识骨架、产出 PDF、真题反向验证到二轮复习,把整条路径完整讲清楚。
2. 搭知识骨架:先把进程、内存、文件三条主线立起来
操作系统教材通常按"进程管理、内存管理、文件管理、设备管理"的课程顺序写,这个顺序对教学友好,但对自己总结并不友好。我一般建议先跳出目录,按"进程与并发、内存与地址、文件与IO"三条主线重新组织内容。这样做有三个好处:第一,三条主线对应面试和考试里八成以上的高频题;第二,每条主线内部有清晰的因果链,先有进程模型才有调度问题,先有地址空间才有映射问题;第三,总结时不会陷入教材的流水账结构,写出来的内容真正是自己的理解。
2.1 进程与线程:状态转换和调度算法是必答考点
进程这块,我总结时会把"进程是什么"用一句话钉死:进程是程序的一次执行,是资源分配的最小单位;线程是CPU调度的最小单位,同一进程内的线程共享地址空间。这句话写不出来,后面的状态模型全是空中楼阁。接着交代进程控制块(PCB),它是进程存在的唯一标志。PCB 的组成我习惯画成一张小表:进程标识符、程序计数器、CPU 寄存器、内存界限、打开文件表、调度信息。这张表不要死记,要理解每个字段都对应一个管理需求,比如调度信息就是为调度算法服务的。
状态转换建议画成文本图而不是抄书上的大图。五状态模型可以写成下面这样,然后手动推一遍典型转换:运行到就绪是时间片用完或被高优先级抢占;运行到阻塞是等待IO或锁;阻塞到就绪是IO完成。其中"阻塞到就绪"不经过运行态,这是最高频的混淆点。七状态模型则是在五状态基础上加入挂起,多了"就绪挂起"和"阻塞挂起",挂起意味着进程映像被换出到外存,这个动作与内存管理的换页直接相关,复习时顺手标记一条与内存管理章节的交叉引用。
新建 -> 就绪 <-> 运行 -> 终止 ↘ 阻塞 ↗调度算法部分,我用一张对比表收拢。覆盖 FCFS、SJF、优先级、时间片轮转、多级反馈队列。维度固定为:是否抢占、平均周转时间倾向、饥饿风险、典型场景。这里有个血泪经验:不要背算法定义,要背"两个作业一短一长同时到达时各自的调度结果",自己代入算一遍,比抄十遍定义都管用。比如 SJF 对短作业友好但长作业可能饥饿,解决思路是让作业年龄递增或使用多级反馈队列,这一层因果链条只有自己算过才能说顺。
同步与互斥是进程章节的另一个大热点。我会把临界区、信号量、经典 PV 问题的套路单独写成一节。常见做法是直接用生产者消费者问题来讲信号量初值:互斥信号量初值为1,空槽位信号量初值为N,满槽位信号量初值为0。然后把 down/up 操作类比成"申请资源"和"释放资源"。写伪代码时注意顺序,顺序错了就会出现死锁。读者写者问题、哲学家就餐问题则各自总结一句话要点:读者优先可能饿死写者,就餐问题用"同时拿起两只筷子"或者资源编号破坏循环等待。
死锁那章是硬骨头。四个必要条件必须在总结里单独占一节,并且配合打破手段:互斥条件难打破但可以尽量少用独占资源;持有并等待可以通过一次性申请所有资源来破坏;不可剥夺可以通过超时回滚来破坏;循环等待可以通过资源编号按序申请来破坏。银行家算法如果篇幅有限,我建议至少把安全性算法的步骤写清楚:先找能满足剩余需要的进程,让其运行完毕归还资源,重复直到全部完成,找不到就是不安全状态。这个流程本质上就是模拟未来是否能完成所有进程,理解以后再算例题就不会错。
2.2 内存管理:从分页到虚拟内存,图比文字重要
内存管理如果只看文字描述,很容易把分页和分段搞混。我的应对办法是每节画图,哪怕只是粗糙的字符图。分页的基本思想要说清楚:物理内存按固定大小切块,进程的逻辑地址也被切成同样大小的页,通过页表映射。这里三个关键要素是页大小、页表项结构、地址转换公式。逻辑地址分成页号和页内偏移两部分,偏移位数由页大小决定,剩下的高位就是页号。
高频计算题有一个:逻辑地址32位、页大小4KB、页表项4B,求一级页表占用多少内存。很多人算错是因为忘了先算页内偏移占12位,页号占20位,页表项数量是2的20次方,再乘4B得到4MB。我会把完整推导步骤写到总结里:页内偏移位数=log2(4KB)=12,页号位数=32-12=20,页表项数=2^20,页表大小=2^20×4B=4MB。这种题复习时看一遍很爽,但考前最容易忘的就是"20位来自32减12"这个减法。
引入多级页表和 TLB 之后,问题变成了性能。多级页表的核心动机是一级页表需要连续占用4MB内存,而进程实际用到的页可能很少,二级页表可以按需分配。TLB 则把地址转换中最热门的映射缓存起来,命中时不需要访问内存中的页表。总结里我会画一条地址转换时间线:CPU给出逻辑地址,查TLB,命中则直接得到物理地址;未命中则访问页表,得到物理地址,更新TLB。这个顺序对口试回答"缺页与TLB未命中是不是一回事"非常重要——TLB未命中仍然可能访问到合法物理地址,缺页则意味着页不在内存,需要去磁盘换入,两者完全不同。
页面置换算法是必考。OPT、FIFO、LRU、Clock 四个算法,我会用同一组访问序列串起来:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1,物理块数固定为3,逐个算缺页次数。同一份序列跑四个算法,对比一目了然,比自己各找各的例子强得多。算完之后加一句总结:OPT是理论下界,FIFO有Belady异常,LRU是栈式算法所以不会出现Belady,Clock是LRU的近似实现。这一句话就能把置换算法章节收拢成体系。
如果总结篇幅还有余量,我建议在虚拟内存部分补充工作集模型。工作集是进程在时间窗口内访问的页面集合,工作集小于驻留集说明内存花得不值,大于驻留集则可能频繁缺页,也就是颠簸。这个模型能解释为什么页面置换算法性能会因访问局部性不同而差异巨大,也能衔接后面的多级页表和 TLB 内容。写的时候不用展开推导,把定义、判断公式、一句话意义写清楚即可。
2.3 文件系统与IO:用一张表理清层次关系
文件系统章节经常被忽略,但面试很爱考。我会把文件系统的层次从底往上写成:设备驱动、IO调度、文件系统、通用文件系统访问层、系统调用。每层职责各写一句话,这样"为什么需要虚拟文件系统"就能直接答出来:为上层提供统一接口,屏蔽不同文件系统差异。接着交代磁盘上的布局:超级块存全局信息、索引节点区存文件元数据、数据区存内容。inode 的字段里,文件大小、权限、时间戳、数据块指针都是基础,重点理解直接块、间接块、双重间接三重间接的寻址范围。
磁盘调度算法与内存置换算法类似,适合用同一组数据对比。磁道序列 98 183 37 122 14 124 65 67,初始磁头在 53,分别用 FCFS、SSTF、SCAN、C-SCAN 算总寻道长度。SCAN 和 C-SCAN 的区别建议在总结里画一条双向箭头和一串单向箭头,文字讲一百遍不如箭头直观。SCAN 到最内圈后回程仍服务请求,C-SCAN 回程不服务直接回到最外,所以 C-SCAN 的等待时间更均匀。
IO 控制方式总结成四阶段对照:程序直接控制、中断驱动、DMA、通道。对比维度是 CPU 参与程度、每次传输单位、适合场景。其中 DMA 的"周期窃取"常被考到,我会专门标注:DMA 传输时 CPU 被窃取的是总线周期,而不是被中断打断,所以 DMA 适合块设备的大批量传输。文件目录部分,软硬链接的区别各写三行:是否共享同一个inode、删除原文件后目标是否还能访问、能否跨文件系统。这个对照表在所有操作系统总结里几乎都是必背内容。
3. 把总结写成可复用的PDF:Markdown 到 PDF 的完整链路
知识骨架立住之后,就要动手产出那份 PDF。用 Word 写的人不少,所见即所得,但复习后期频繁增删章节时,改目录、调样式很痛苦。我习惯全程用 Markdown 维护源文件,最后用 Pandoc 加 XeLaTeX 导出 PDF。这样做的理由有三条:源文件可以纳入 Git 管理,历史版本可回溯;导出样式统一,公式、代码块、表格都能结构化呈现;迁移成本低,同一个源文件既能出 PDF,也能出 HTML 或 docx。需要准备的工具是 Pandoc、带 xelatex 的 TeX 发行版,以及一款中文字体。
3.1 先建目录结构:按"原理-算法-例题"组织每一章
直接打开编辑器写正文是新手最容易踩的坑。我一般会先用 Markdown 标题把整份总结的骨架立出来。以进程管理为例,典型的目录骨架是这样的:
# 1 进程管理 ## 1.1 基础概念 - 进程定义、PCB、进程与线程区别 ## 1.2 状态与转换 - 五状态模型、七状态模型、转换触发条件 ## 1.3 调度算法 - FCFS / SJF / 优先级 / RR / 多级反馈队列 - 每个算法配一个运行实例 ## 1.4 同步与互斥 - 临界区、信号量、生产者消费者、读者写者 ## 1.5 死锁 - 四个必要条件、银行家算法、检测与恢复 ## 1.6 高频追问 - 进程切换开销组成?协程为什么轻量?这个骨架的本质,就是把你已经搭好的知识主线落成文档结构。注意我在每章末尾放了一个"高频追问"小节,这是刻意加的。因为复习到后期,你会发现课本例题和真实考题之间有一道沟,提前把追问写进结构里,后面填内容时才会去思考,而不是誊抄。骨架还有一个作用:如果某个节点你什么都写不出来,说明这块是真空地带,要么回教材补课,要么去查资料,而不是带着空洞往下写。
为了让源文件好维护,每个一级章节存成一个独立 Markdown 文件,命名用数字前缀:01-process.md、02-memory.md、03-filesystem.md。然后在总目录文件里用链接汇总。这样单独改某章不会影响其他文件,导出时也可以用一条命令把所有文件合并。目录文件本身只保留章节导航和导出说明,相当于整份总结的入口。
3.2 在Markdown里画图:用文本图、表格和代码块替代截图
Markdown 本身不能画图,常见做法是嵌入 mermaid 语法。但实际经验里,mermaid 图导出 PDF 时经常因为宽度溢出导致排版翻车,箭头和节点被截断,排错成本很高。我的做法是优先用文本图、表格和代码块承载图形化信息。状态转换画文本图,算法对比放表格,伪代码进代码块,这样导出的 PDF 在任何页面宽度下都不会变形。
进程状态转换的文本图可以这样写:
时间片用完/抢占 ┌───────────────────┐ │ v 新建 ──▶ 就绪 ──────▶ 运行 ──▶ 终止 ▲ │ │ 等待IO/锁 │ 事件完成 └──────────────┘ 阻塞这种图看起来朴素,好处却很实在:不依赖任何渲染库,导出 PDF 不可能因为图片加载失败而空白;复习时可以直接在终端里看源文件;修改只需改几个字符,不需要重新生成图片。如果确实需要精细图,我建议用绘图工具画好后以 PNG 放入 images 目录,在 Markdown 里用相对路径引用。注意图片名用英文小写加连字符,比如 process-state.png,别用中文名,否则某些 PDF 引擎对路径中的中文支持不好。
表格在总结里要大量使用。我会把调度算法对比、内存管理方式对比、IO控制方式对比全部做成表格。写表时有条经验:列数尽量控制在四列以内,超过四列 LaTeX 在默认页面宽度下很容易溢出。如果内容确实多,把细节拆到表下注释里。另外 Pandoc 支持的表头分隔行写法是标准的 |---| 语法,不需要任何扩展,兼容性最好。
3.3 用Pandoc导出PDF:中文字体与页边距的配置要点
内容写到一定程度就可以出第一版 PDF。我推荐的最小导出命令如下:
pandoc 01-process.md 02-memory.md -o os_summary.pdf \ --pdf-engine=xelatex \ -V mainfont="Noto Serif CJK SC" \ -V monofont="Noto Sans Mono CJK SC" \ -V geometry:margin=2cm \ -V fontsize=11pt \ -V colorlinks=true这条命令的每个参数都有讲究。--pdf-engine=xelatex 指定用 XeLaTeX 作为 PDF 引擎,默认的 pdflatex 对中文支持非常差,几乎必然报错;mainfont 和 monofont 分别指定正文和等宽字体,字体名必须和系统已安装字体完全一致,否则 xelatex 直接报错;geometry 把页边距设成 2cm,复习资料需要紧凑排版,但这个值也最好别低于 1.5cm,否则页眉页脚和页码会打架;fontsize=11pt 是正文默认字号;colorlinks=true 给超链接上色,方便在 PDF 内部跳转复习。
提示:如果你的系统里没有 Noto CJK 字体,先执行 fc-list | grep -i "cjk" 查看已安装的中文字体,再替换 mainfont 参数,不要照着网上的命令盲目拷贝。
首次导出大概率会出问题。最常见的错误是 xelatex 找不到字体或缺少某个 LaTeX 宏包。排查路径先看报错里有没有 fontspec 字样,有就是字体名称问题,用 fc-list 查全名后替换即可。如果报错是 ! LaTeX Error: File 'xxx.sty' not found,说明缺宏包,用 tlmgr install xxx 补装。我帮同事排查过几次导出失败,结论一致:八成是字体名写错,不是 Pandoc 坏了。
表很多的时候,导出后必须检查表格是否越界。Pandoc 渲染的表格默认按内容自适应宽度,一旦某列内容很长就冲出页面。解决办法是把表头用短词,内容放进表下的注释;或者把该表拆成两列结构重新呈现。我在调度算法对比表上吃过这个亏,所有算法描述改成关键词后,表格才稳稳落在版心。建议每写完一个一级章节就导出一次 PDF 检查排版,不要等全部写完再统一导出,几十页文档里找一处越界很费眼睛。每章一导只需要三分钟,但这个习惯能省掉整块排错时间。
为了让导出脚本可复用,我会在项目目录放一个 build.sh 保存上面的命令,并且增加 -V toc=true 自动生成目录。如果章节多了,还想在生成的 PDF 里保留书签导航,可以加 --toc-depth=2 控制目录显示到二级标题。整个命令在 macOS 和 Linux 上行为一致,Windows 下要确保 xelatex 和 pandoc 都在 PATH 里。
4. 自己总结最容易翻车的四个地方:避坑与排查
写总结这个事不难,难的是避免低效的搬运。我围绕"操作系统自己总结"这个场景,整理出四个高频翻车点,每条按现象、原因、解决三层展开,基本都是我或身边的人的真实教训。
4.1 总结变抄书:知识点没经过"用自己的话复述"
现象:总结写得很厚,翻开每页密密麻麻,合上文档后脑子里一片空白,跟没写过一样。原因:写作过程一直对着教材摘抄,把"书上的定义"原封不动搬进 PDF,大脑没有进入深度加工状态,"抄写"这个动作本身并不创造理解。
解决:立一个硬规矩,每个小节写完后,关掉所有参考材料,用五分钟在文档末尾的"复述区"用自己的话讲一遍,口语化没问题。比如我在进程定义小节后面写下的复述是:"进程是程序跑起来以后的那个容器,里面装着寄存器、打开的文件、内存映射这些现场信息。线程是在这个容器里干活的执行流。"这句话不是教材原话,但它是自己的理解,复习时看到它,记忆的唤醒速度远快于一段规范定义。如果复述不出来,说明这一节还没真正理解,立刻回教材重读,不要在原文上继续画线。这个环节会让写作速度明显变慢,但记忆留存率比抄书高很多,花这个时间值。
4.2 没有场景题:概念记住了,但题目一变就懵
现象:总结里全是定义和原理,找不到一道带数字的例题。复习时感觉全懂了,考场上遇到一个陌生场景就发懵。原因:操作系统是实践性很强的课,调度、置换、同步这些结论都依赖具体场景。只记"LRU 优于 FIFO"这种结论,不亲手算缺页次数,遇到"程序顺序扫描大数组"的场景题,就不知道顺序扫描会让 LRU 频繁缺页,反而 FIFO 表现稳定。
解决:每个算法小节后面至少配一个可手算的实例。页面置换用固定访问序列,磁盘调度用固定磁道序列,信号量就写生产者消费者变体。每个实例都要留下完整的代入过程和最终答案,二轮复习时重算一遍,比读十遍文字都快。如果一时找不到合适的例题,在总结里标注"待补充",不要跳过节奏。A同学就是在页面置换处加了这道题,后来面试被问到同类型问题直接手写出来。这个场景题思维再延伸一下,其实就是用变体题来对抗"背结论"。我在信号量部分做过一个变体:把一个生产者和一个消费者改成多个生产者和多个消费者,方向不变,但信号量的 down/up 顺序错了就会死锁。这种微小改动是真题最爱的形式,单独背经典题根本防不住。
4.3 排版失控:PDF导出后公式乱、表格越界
现象:导出 PDF 后发现文本图箭头错位、表格右边界超出页面、等宽代码块挤成一团。原因:文本图里混用全角和半角空格,宽度计算直接乱掉;表格列数多、单元格内容长,LaTeX 表格就会溢出;代码块没标语言,Pandoc 不做语法高亮,挤在一起更难读。
解决:给文本图统一用等宽字体区域;表格列数控制在四列以内,长内容拆行或缩写;代码块一律标注语言。导出后第一时间翻到表格最宽的那一页检查,发现问题马上改源文件,不要攒到全部写完。检查文本图对齐时,可以在终端里直接 cat 源文件预览,如果终端下对齐良好但 PDF 里乱了,基本可以断定是字体宽度问题,把该代码块字体改为等宽并设置 monofont 即可。这种问题发现得越早,修复成本越低。
4.4 没有做减法:总结越写越厚,复习时根本看不动
现象:总结写到后面接近教材的压缩版,一百多页,二轮复习根本不知道从哪看起,最后只看了前两章就放弃了。原因:写作时把自己当作者,追求面面俱到,生怕漏掉任何一句可能考的话。实际上操作系统自己总结的核心价值是帮未来的自己定位薄弱点,不是写一本新教材。
解决:每章结尾增加一个"已掌握/待复习"标记区,复习完就把确定掌握的内容打勾,仍然含糊的条目移到文档最前面的"待突击清单"。每次通关后清单越来越短,PDF 也不用越写越长。严格控制每个知识点篇幅,能三行说清的不用三段。这个做法还有一个附赠好处:待突击清单本身就是考前最后一天最该翻的东西,而不是从头翻整本 PDF。所有小节标题都要写清楚对象,比如"LRU与FIFO对比"而不是"置换算法补充",这样在 PDF 里搜索关键词时也能一步到位。
5. 用考题反向驱动总结:让PDF直击考点
自己总结容易从头写到尾然后"完工撒花",缺少验证环节。我的做法是总结写到八成时停下来,把历年真题和面试高频题翻出来,用考题反向检验总结的内容。这个动作类似先挖坑再填土,效率远高于盲目堆内容。
5.1 从真题里统计考点频次,回填总结目录
做法不复杂:先把能拿到的真题逐题分类,打上章节标签,比如进程管理、内存管理、文件系统、IO、死锁,然后统计每个标签下的题目数量。举一个我遇到过的分布:三十道专业题里,进程同步与互斥十道,页面置换七道,死锁五道,文件系统四道,剩下的是杂项。这个分布直接告诉你总结的篇幅该如何分配,而不是平均用力。
统计完成后,把高频主题在总结目录里提前,并在对应小节前加一行"高频考点"标注。这个标注给 PDF 加了一个优先级视图,二轮复习翻到页面就知道这个知识点的重要程度。如果某一章节真题数量为零,要反问自己:是这部分真的不重要,还是题源不够全?常见做法是再找一份不同出题风格的题集交叉验证,避免被单一样本带偏。这一步做完你会发现自己总结里有些部分根本没人考,比如操作系统发展历史的文字介绍,可以直接压缩成三行;而有些部分教材只讲了一页,真题却反复出现,比如信号量 PV 操作的变体。这种由题目反馈驱动的增删,比自己闷头写高效得多。
为了操作方便,我会在总结的 README 文件里维护一个统计表:章节、题数、占比、优先级。每做完一套题就更新一次,优先级高的章节在总目录里往前提。这套表不需要任何工具,Markdown 表格就够了,但它的存在会让总结始终贴着考点生长,不会写着写着离题。
5.2 把易混淆概念做成对照表
真题做多了会发现,出题人特别喜欢考"A 和 B 有什么区别"这种对照型问题:分页和分段、进程和线程、硬链接和软链接、同步和异步 IO。这类问题在总结里写成文字段落效率很低,我强制用对照表。先给一个分页和分段的例子:
| 对比维度 | 分页 | 分段 |
|---|---|---|
| 地址空间 | 一维线性 | 二维(段号+段内偏移) |
| 划分方式 | 系统自动划分,固定大小 | 用户编程划分,大小可变 |
| 碎片类型 | 内部碎片 | 外部碎片 |
| 共享与保护 | 实现较困难 | 以段为单位更自然 |
| 对程序员透明 | 透明 | 可见 |
这种表的信息密度远高于两段文字,考前扫一眼就能唤醒记忆。我会给每个章节至少做一张这样的对照表,然后定期合上书重填一遍。填不出来的格子,就是下一轮复习的重点。对照表还有一个特殊用法:把做错过的真题里的易混描述也写成一行,比如"分页不产生外部碎片,分段产生外部碎片,但分段无内部碎片",把它写进对应行的备注列,让每张表都变成你自己的易错点集合。注意每张对照表最多六行,超过六行拆成两张,否则宽度和阅读性都会下降。
5.3 用一道综合题验证总结的完整性
验证总结是否完整,最直接的方式是找一道覆盖多个知识点的综合题,不看总结完整做一遍。我常用的一道题长这样:给出一个进程的虚拟地址、页表内容、TLB 命中情况,要求计算物理地址,并说明访问该地址的过程;再附带两个小问——如果页不在内存会触发什么异常,这个异常与普通中断的区别是什么。
这道题把逻辑地址转换、页表、缺页异常、中断机制全部串在一起。如果能不看总结从头写到尾,说明这四块知识已经打通;如果卡在中间某一步,比如"页表项里有效位为0怎么处理",这个卡点就是总结里必须加粗的位置。我通常在验证之后,把这道题的完整解题过程回填进总结,作为"综合题范例"放在内存管理章节末尾。这种回填积累多了,PDF 就像一个被真题反复打磨过的知识库,而不是孤芳自赏的笔记。
综合题选什么也有讲究。我建议优先选那种跨章节的题,比如把进程调度和中断处理放进一个场景,或者把文件系统和 IO 调度放进一个场景。单纯考单点的题只能验证局部,跨章节的题才能暴露知识之间的断点。如果手头没有合适的题,可以自己把两道简答题合并成一个场景:先问缺页会怎样,再问换出的页是脏页会怎样,这样就覆盖了置换与回写两块内容。
6. 让总结PDF成为二轮复习的"活文档":版本管理与验收方法
6.1 用Git记录每一次补充与修订
写总结最大的风险是写完就停止生长。我第一次写的时候,导出 PDF 后就只读不改,结果复习到后半程发现新学的知识和错题没地方放,整个文档慢慢失效。后来养成的习惯是把 Markdown 源文件纳入 Git 管理,每补充一个知识点就提交一次,提交信息写明改了什么,比如"补充:LRU在顺序扫描下的退化场景"。一个月下来,git log 几乎就是整个复习轨迹。
有人觉得复习还搞版本管理太做作,但实际好处很直接:可以用 git diff 对比两轮复习之间的理解变化,复盘时看到自己最初哪里想错了,这比任何计划表都真实。如果不想碰 Git,最低成本的替代方案是按日期保存副本,比如 os-summary-20250601.md,但副本多了容易混乱,还是 Git 干净。每次提交前顺手 git add 对应章节文件即可,一分钟的事,性价比非常高。
6.2 用"讲给别人听"作为验收标准
版本带来另一个收益:可以定期做复习标记。我会在每章开头加一行"复习日期"注释,每轮只标记一次。二轮复习时只翻标记过的重点章节,把稳定的知识点从待突击清单移出去。这个表只是简单的一行注释,不需要任何花哨工具。
检验这份总结是否合格的唯一标准也很简单:你能不能拿着它,不看教材,给另一个人讲清楚页面置换的四种算法。能讲明白,这份 PDF 就值了;讲不明白,回去补对应小节,再讲一次。用"讲给别人听"的方式收尾,本质是把隐含理解显性化。我最早写总结时追求排版精美,花大量时间调样式,结果内容密度被稀释。后来想明白,第一读者是自己,不是拿去发表的论文,内容比外观重要十倍。排版只要不乱,就把时间挪回去填内容。最后希望这套自己总结的方法能帮到你,让你把操作系统从一本厚书真正变成脑子里随时能调用的东西。
本文还有配套的精品资源,点击获取