操作系统考研复习笔记:构建进程管理与内存管理的知识体系

发布时间:2026/10/5 8:30:19
操作系统考研复习笔记:构建进程管理与内存管理的知识体系 1. 内容整体设计与思路拆解1.1 为什么操作系统笔记总是“听懂了、合上书就忘”我最早接触操作系统是在大学本科阶段当时用的是汤小丹那本《计算机操作系统》慕课版、王道课件、期末试卷翻来覆去刷了好几遍。后来帮学弟学妹做考研辅导又把这门课系统过了三轮。一个很真实的感受是操作系统是计算机考研408里最“像文科”的理科科目——它不像数据结构那样有大量代码可以练手也不像计算机网络那样全是协议细节可以死记它的知识点分布在整个计算机系统的中间层概念之间的耦合极强。很多人的复习状态是听课的时候觉得什么都懂了进程、线程、临界区、PV操作、银行家算法老师一讲就觉得“这不就是那么回事吗”。但一到做题尤其是做王道的课后大题和408真题立刻原形毕露。选择题靠排除法还能蒙对几个综合题里让你写信号量、算页面置换次数、分析磁盘调度顺序当场卡住。这个问题的根源在于操作系统知识点是“网状结构”但大多数人把它学成了“链状结构”——学完一章就翻篇不知道这一章和上一章有什么联系更不知道它在整个知识体系里处于什么位置。做笔记如果只是抄课件、抄板书那本质上还是线性记录起不到串联知识的作用。1.2 王道课件在知识体系里的位置王道计算机考研的操作系统课件在考研圈里的地位不用多说。我自己用过之后最大的感受是它对“考点的颗粒度划分”做得很到位课件里每一章都围绕考试大纲展开重点难点标得很清楚例题的选择也基本贴合真题风格。但这里有个容易踩的误区王道课件是“辅导资料”不是“教材”。它默认你是已经有了一定基础的所以很多原理性的推导过程会被压缩直接给你结论和考点。比如管程那一节课上重点讲的是管程的组成共享变量、条件变量、操作过程和与信号量的对比但管程背后的设计动机、为什么它能解决信号量使用不当带来的死锁问题课件里往往一句话带过。如果你只看课件不做扩展就会陷入“记住结论但不会应用”的尴尬境地。所以我当时的做法是以王道课件为主线以教材汤小丹版和习题册为辅助把笔记整理成“课件没有展开的原理 课件给出的考点结论 我做题时踩过的坑”这三层结构。这样笔记既是课件的高密度提炼又补全了课件的逻辑断层。1.3 这门课到底适合谁怎么学才不亏操作系统笔记的受众我总结下来大致有三类。第一类是准备考研、尤其是考408的同学操作系统占25分左右性价比很高学好了是稳定拿分的板块第二类是正在准备期末考试的在校生操作系统是计算机专业的核心必修课期末试卷的考点和考研高度重合笔记可以直接用来突击第三类是想补基础的在职开发者平时写代码用着多线程、锁、内存池但不太清楚底层OS是怎么调度和管理的操作系统笔记可以作为系统知识的地基。针对这三类人学习重心不太一样。考研党要重点吃透PV操作、调度算法、内存管理、文件系统和磁盘调度这些大分值考点期末党要覆盖老师划的重点同时把课后习题刷透在职开发者更要关注虚拟内存、进程通信、同步互斥这些和实际编程强相关的部分。这篇笔记的展开方式会兼顾三类需求把核心知识点按重要程度逐层拆开。2. 核心细节解析与实操要点2.1 绪论与体系结构先建立整棵知识树很多复习操作系统的人会直接跳过第一章绪论觉得“操作系统概述”这种章节不就是背背定义吗这是个很大的误区。第一章虽然不直接考大题目但它决定了你对整门课的认知框架。操作系统在计算机系统里处于什么位置它夹在硬件和应用软件之间是一层“管理者”。往下管理硬件资源CPU、内存、磁盘、I/O设备往上为应用程序提供运行环境和服务接口。所以整门课的四大部分——进程管理、内存管理、文件管理、设备管理本质上是同一个问题的四个侧面操作系统是如何管理计算机的各种资源的。学习第一章时我建议你把“操作系统的四大特征”并发、共享、虚拟、异步和“五大功能”进程管理、内存管理、文件管理、设备管理、用户接口单独整理成一页思维导图式的总览笔记。这页笔记要贴在复习资料的首页之后每学完一个章节都在这页上补充对应的联系。比如学到虚拟内存时回来看看“虚拟”这个特征你会发现这不止是一个词汇而是贯穿内存管理的一条主线。操作系统的发展阶段也要留意一下尤其是从单道批处理到多道批处理、分时系统、实时系统的演变过程。考试不会直接考“批处理系统的优缺点”这种纯背诵题但选择题里经常出现“下列哪个特征属于实时系统”之类的判断搞清楚各个阶段的典型特征和设计目标这类题就不会丢分。2.2 进程管理整本书的绝对核心占分能到30%以上进程管理是操作系统考试中分值最高、也是难度最集中的模块。可以这么说如果你把进程管理学扎实了操作系统这门课就成功了一半。进程这一章有两个非常核心的概念要区分清楚程序和进程。程序是静态的指令集合存在磁盘上进程是程序的一次执行过程是动态的包含代码、数据、堆栈、PCB进程控制块等。面试里也经常问“进程和程序的区别”标准答法就是“动态与静态”“临时与永久”“一个程序可以对应多个进程”。但考试不会只考定义它会问“进程控制块PCB中包含了什么”“进程从创建到终止经历哪些状态转换”这些才是考点。进程状态转换图是必须亲手画一遍的。三态模型运行、就绪、阻塞看似简单但加上“挂起”变成五态模型后很多同学就开始混淆。我提供一个记忆技巧就绪态是“万事俱备、只欠CPU”,阻塞态是“等的事件还没发生”两者最关键的区别在于是否占有CPU执行权、是否主动让出CPU。做题时凡是遇到“进程在等待打印机输出时处于什么状态”一律答阻塞态不要被“等待”两个字带偏。线程是进程管理里的另一个重点。线程是CPU调度的基本单位进程是资源分配的基本单位。这两句话是考试里的高频考点也是很多人容易混淆的地方。为什么引入线程因为进程切换的成本太高线程切换可以共享进程的资源同时让一个进程内可以并行执行多个任务。从操作系统的发展角度看从进程到线程本质上是“调度单位”和“资源分配单位”的分离理解了这一层关于线程的很多选择题就迎刃而解了。2.3 处理机调度不只是算几个平均时间调度算法是操作系统里“背了就会、理解了不忘”的考点。常见的调度算法有先来先服务FCFS、短作业优先SJF、优先级调度、时间片轮转RR、多级反馈队列等。考试一般会让你根据给定的作业/进程到达时间、执行时间计算周转时间、带权周转时间、平均等待时间并比较不同算法的优劣。这里有一个高频失分点SJF短作业优先分为抢占式和非抢占式。选择题里有时会默认考察非抢占式但题目如果没说“可抢占”你要根据上下文判断。另外SJF的一个变种SRTF最短剩余时间优先是抢占式的两者在计算时结果会有差异。王道课件里对这部分的讲解很细致但你需要亲手算几遍历年真题才能真正体会“到达时间不同会影响调度顺序”这层含义。多级反馈队列是调度算法中的重点也是难点。它的思想是设置多个优先级递减的就绪队列新进程先进入最高优先级队列时间片用完后降级。短作业能在高层队列快速完成长作业降级到低层队列用更长的时间片。这种算法兼顾了响应时间和吞吐量是交互式系统的典型调度方案。复习时不要只看概念要会画时间轴图模拟进程在各级队列间的移动过程。2.4 进程同步与互斥PV操作题靠的是背模板还是真理解这一节是绝大多数人复习操作系统时最头疼的地方。生产者消费者、读者写者、哲学家进餐这三大经典同步问题王道课件里都有标准答案但考试很少考原题它会把场景包装一下换几个变量换一个资源类型考察你是否真正理解了信号量机制。我自己的经验是PV操作题不能靠背代码要靠建模。拿到题目先做三件事第一数清楚题目里有几种“资源”每种资源对应一个信号量第二找到临界区也就是多个进程需要互斥访问的那段代码第三找同步关系也就是哪个进程必须等哪个进程先完成某件事。只要这三步理清了信号量的设置就是水到渠成的事。管程是这一章里近年来越来越常考的知识点因为它在高级语言里对应的就是Java的synchronized和ReentrantLock这些同步机制。管程把一个共享资源的所有访问操作封装在一个类里同一时刻只允许一个进程调用管程内的过程从而避免了信号量使用不当带来的死锁风险。考试里常考的是管程与信号量的对比——管程更安全、更易用但需要语言层面的支持信号量更灵活但使用不当很容易写出死锁代码。另外一个常考概念是协程它比线程更轻量是用户态调度的不涉及内核态切换所以切换成本极低。王道课件里协程部分讲得比较简略但408近年选择题偶尔会出现建议了解协程与线程的本质区别线程的调度是内核完成的协程的调度是用户程序自己完成的。2.5 死锁四个必要条件 三种处理策略死锁考点本质上就两块内容死锁产生的四个必要条件互斥、请求与保持、不可剥夺、循环等待和死锁的处理策略预防、避免、检测与解除。选择题最爱考的是“破坏哪个条件对应哪种策略”比如“采用资源有序分配法可以破坏循环等待条件”“允许进程剥夺他人资源可以破坏不可剥夺条件”这些一一对应的关系必须熟记。银行家算法是死锁避免的代表性算法也是综合题的常客。它的本质是在每次资源分配前检查分配后系统是否处于安全状态。所谓安全状态就是存在一个安全序列使得系统按这个序列分配资源时每个进程都能在有限时间内获得所需资源并运行完。计算时只要按照王道例题的表格一步步推演即可——先算Need矩阵再算Available向量然后逐轮找满足条件的进程标注执行顺序。第一次做会慢但熟练后你会发现这类题其实就是“找规律填空”拿满分的把握比很多概念题还高。2.6 内存管理从连续分配到虚拟内存的分页与分段内存管理这一章在考试里同样占据重要篇幅。最早的内存管理是连续分配方式包括单一连续分配、固定分区分配和动态分区分配。动态分区分配里需要重点掌握首次适应、最佳适应、最坏适应三种算法以及它们各自对内存碎片的影响。非连续分配方式才是重点中的重点。分页存储管理的基本思想是把内存划分为固定大小的页框把进程的逻辑地址空间划分为等大的页面通过页表建立映射。考试常考的计算题包括逻辑地址结构分析页号占几位、页内偏移占几位、页表项大小、页表长度等。很多人在“页面大小是2KB逻辑地址长度为16位”这类题上翻车原因就是对“偏移量位数 log2(页面大小)”这个公式不够敏感。我建议你把这一章的公式单独抄在一页纸上考前反复默写。分段与分页的区别是另一个必考点分页是系统行为对用户透明是为了提高内存利用率分段是用户行为按逻辑意义划分是为了满足程序的模块化需求。从地址结构上看分页的地址空间是一维的分段的地址空间是二维的段号 段内偏移。还有一个经常被混淆的点分页可能产生内部碎片分段可能产生外部碎片——因为页的大小固定进程最后一项页可能用不满而段的大小不固定动态分配时会产生外部碎片。虚拟内存这一章重点在于页面置换算法。最佳置换算法OPT只是理论参照先进先出FIFO存在Belady异常最近最久未使用LRU是最常考也最实用的算法时钟Clock算法是LRU的近似实现。考试里让你算缺页次数的题要注意题目是否说明“初始内存为空”以及页面的访问顺序是否从0开始编号这些都是细节陷阱。2.7 文件管理与设备管理背诵为主但这些细节别漏文件系统这章相对好拿分核心概念包括文件的逻辑结构顺序文件、索引文件、索引顺序文件、物理结构连续分配、链接分配、索引分配、目录结构单级、两级、树形、无环图、文件存储空间管理空闲表法、空闲链表法、位示图法等。这里有一个考点容易被忽视文件的物理结构与逻辑结构的对应关系。比如考试给你一个文件系统采用索引分配方式问访问某个逻辑块需要几次磁盘I/O很多人不会算。其实解法很简单先查内存中的目录得到文件的索引块地址再读索引块得到数据块地址最后读数据块——最多三次I/O。如果索引块本身也要分级多级索引I/O次数会相应增加王道课件上有详细的表格汇总。设备管理这章的重点包括I/O控制方式程序直接控制、中断驱动、DMA、通道、缓冲技术单缓冲、双缓冲、循环缓冲、磁盘调度算法FCFS、SSTF、SCAN、C-SCAN。磁盘调度类的计算题和调度算法章的计算题思路一致——画出磁道访问序列图按算法规则依次排列。SCAN算法也叫电梯算法要特别注意它的运动方向朝一个方向移动过程中处理该方向上所有请求到端点或没有更远请求时再反向。C-SCAN循环扫描则只朝一个方向服务返回时快速扫过不处理请求。数据在磁盘上的分布方式、磁盘访问时间的三段式寻道时间 旋转延迟 传输时间也是选择题的高频考点不能只背概念要会套公式算。3. 实操过程与核心环节实现3.1 王道课件的高效使用流程很多人拿到王道课件的PDF或视频后第一反应是从头看到尾、再做笔记。这个流程效率并不高——视频里的老师语速不快但信息密度很高如果边看边抄很容易变成“抄课件机器”字写了不少脑子没跟上。我自己实践下来比较高效的流程是“三遍法”。第一遍快速浏览课件标题和各级小标题在笔记上搭出这章的知识框架。比如第二章进程管理标题会包括进程的概念、进程控制、进程同步、进程通信、线程等先在笔记上画出一个树状结构预留好空白。这一步5到10分钟就能完成却能让后面的听课有的放矢。第二遍带着框架去听课或者看课件细节。王道课件的正文部分重点内容一般会有加粗或不同颜色的标注这些是必须完整记录的考点。但要注意课件的例题往往只有题目和答案没有详细的推导过程你需要自己补上“为什么选这个答案”的推理步骤。凡是补不上的地方就是你的知识盲区要回到教材对应章节去查阅。第三遍做完课后习题后回来补充笔记。王道的每章课后习题质量很高做完一遍后把错题涉及的知识点用红笔在笔记上标记出来如果是反复错的某个类型的题在笔记对应位置写上“真题陷阱注意XX”的提醒。这会让笔记越用越厚也越用越贴合你的薄弱点。3.2 笔记的结构设计给每个考点一个“家”一份好笔记不能是知识点的平铺直叙得有层级、有归类、能快速定位。我给这套操作系统笔记设定的结构是四层第一层是“章”完全对应王道课件和教材的章节体系方便和课程、真题对照。第二层是“考点”每个考点用一个短语概括比如“进程状态转换”“LRU页面置换”“银行家算法”等考点的颗粒度大概对应一道选择题或一道小题的考察范围。第三层是“要点”罗列该考点下的核心结论、公式、关键代码片段注意用短句不要整段摘抄。第四层是“错题与补充”记录做题时出现的错误和理解上的误区。举一个具体的例子笔记里“死锁”这一章可以这样组织考点1死锁的定义与产生原因要点死锁是多个进程因竞争资源而互相等待且无法向前推进的状态要点四个必要条件缺一不可——互斥、请求与保持、不可剥夺、循环等待错题补充不要混淆“循环等待”和“所有进程都在等待”——循环等待强调的是资源分配图成环考点2死锁预防要点破坏四个必要条件中的任意一个即可要点互斥条件不能破坏资源的固有属性错题补充资源有序分配法属于破坏“循环等待”不是“请求与保持”这种结构的好处是复习时看到考点名就能在脑中回忆整个知识块考前冲刺时直接翻错题补充解决的都是自己真实踩过的坑。我个人建议用电子笔记Typora或者Obsidian都行来做插入表格和代码块方便后续增删内容也更容易。3.3 信号量PV操作题的实操套路PV操作题对很多人来说是个分水岭跨过去之后整张卷子的信心都会不一样。我用三道经典题来说明自己总结的实操步骤。第一道是生产者消费者问题。这是最基础的。两个信号量empty表示缓冲区空位数量初始为nmutex表示对缓冲区的互斥访问初始为1。生产者流程是“P(empty) → P(mutex) → 放入数据 → V(mutex) → V(full)”消费者是“P(full) → P(mutex) → 取出数据 → V(mutex) → V(empty)”。注意两个P操作的顺序——先对资源信号量P再对互斥信号量P这个顺序不能颠倒。如果先P(mutex)再P(empty)当缓冲区满时消费者还没来得及取走数据生产者已经占用了mutex并在等empty消费者又在等mutex就造成了死锁。第二道是读者写者问题。读读不互斥读写互斥写写互斥。核心是一个count变量记录当前读者数量加一个mutex保护count再加一个rw信号量实现读者写者互斥。这里有一个容易忽略的细节第一个读者进入时需要执行P(rw)加锁最后一个读者离开时要执行V(rw)解锁而不是所有读者都执行这两个操作。第一次写读者写者代码的人几乎都会在这个地方出错。第三道是哲学家进餐问题。直接给每位哲学家拿左右两把叉子会导致五人同时拿左边叉子、然后全部等待右边叉子形成死锁。解决方法有很多最多允许四个哲学家同时拿叉子或者要求哲学家拿叉子时必须一次性拿起两把或者规定奇数号先拿左边、偶数号先拿右边。考试如果考这道题多半是让你写出其中一种解决方法的代码所以至少要熟练掌握一种方案。做这类题我的经验是先写伪代码再写信号量原语最后通过模拟执行的方式检查是否有死锁或忙等。检查时重点看信号量的初始值和各进程对信号量P、V操作的配对数量是否一致。3.4 计算题的失分点复盘内存管理公式与推演过程内存管理章节的计算题失分点往往在小细节上比如单位换算、位偏移计算、页表级数的确定。举一个很典型的例子某系统页面大小为4KB逻辑地址为32位采用二级页表页目录项和页表项各占4字节。问页目录有多少项页表有多少项。这个题目看起来不难但每次做都有人栽跟头。解析过程是这样的页面大小4KB页内偏移占12位那么剩余20位用于页号和页目录号。如果是一级页表页号占20位页表项数就是2的20次方页表大小为4MB。但如果采用二级页表需要将20位拆成两级——比如各占10位。第一级页目录有2的10次方1024项第二级页表也有1024个页表项。拆分的位数不同结果会有差异所以做题时一定要先看清楚题目给的“二级页表”是均分还是其他拆分方式。另外要注意的地方是多级页表的意义在于解决“页表本身占用过大”的问题。一级页表需要连续内存来装页表项而二级页表可以让页表离散存放只将当前需要的部分页表调入内存。考试里常考“为什么引入多级页表”“二级页表访问某个逻辑地址需要几次内存访问”——在没有快表TLB的情况下需要先访问页目录、再访问页表、最后访问数据共三次内存访问。如果有TLB命中只需一次。页面置换类的计算题我给的提醒是画表的时候一定要标注清楚当前内存驻留集的内容。比如用LRU算法处理访问序列“7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1”内存帧数为3从头开始每次访问都按“是否缺页 替换哪一页 更新后的驻留集”三列记录。王道课件上有例题但你不要只看要亲手在草稿纸上推演一遍推完后对照答案找到自己在“最新访问时间更新”上的卡点。3.5 从笔记到真题考研冲刺期的使用姿势笔记整理好了怎么在冲刺期发挥最大价值我的做法是把笔记当“索引”而不是当“教材”再来一遍。冲刺期的第一轮每天花30分钟快速过一遍笔记的考点标题和要点部分能做到“看到考点名就能默写出大致内容”就算过关。这一轮的目的不是学习新知识而是唤醒记忆。第二轮拿着历年真题的题目去笔记里找对应的考点。比如做一道“文件系统采用FAT表”就要立刻定位到文件系统的物理结构部分把链接分配的优缺点、FAT表的作用、FAT表项的大小计算这些相关考点一并复习。这种“以题带点”的方式比漫无目的地翻笔记效率高得多。第三轮把错题和笔记里标记的“易错提醒”做成一张几页纸的浓缩版考前两三天只看这部分。能做到这层基本可以安心上考场了。4. 常见问题与排查技巧实录4.1 概念混淆类总是搞混的几组术语和历届同学交流下来有几组概念是反复被混淆的我把它们整理成一个速查表方便对照记忆。容易混淆的概念关键区别考试常见考法进程 vs 线程进程是资源分配单位线程是调度单位选择题判断分页 vs 分段分页是系统行为一维地址分段是用户行为二维地址选择题特征判断内部碎片 vs 外部碎片内部在分配块内浪费外部在分配块间零散判断哪种分配方式产生哪种碎片死锁预防 vs 死锁避免预防破坏必要条件避免使用银行家算法判断安全性大题中区分策略管程 vs 信号量管程封装共享资源信号量是初级同步原语简答/选择对比阻塞 vs 挂起阻塞等待事件挂起被进程调度移出内存状态转换图判断FCFS vs SJF前者按到达顺序后者按执行时间短者优先调度序列计算这些概念光看表格还不够要在做题中复现。每次做错一道概念题就把这组概念在旁边重新默写一遍直到条件反射般准确为止。4.2 做题与答题时的典型失分原因我总结过往做真题、模拟题时的失分情况主要有三类。第一类是“算对但漏了前提”——比如算FIFO缺页次数时没注意到题目里的“初始内存为空”或“预装入前几页”的设定导致结果差了一页第二类是“过程对但格式乱”——综合题要求写求解过程很多同学只写最终结果被扣了步骤分第三类是“PV操作顺序颠倒”——生产者和消费者问题里P操作的先后顺序写反导致满分题直接归零。针对这三类问题我的建议是平时做题就按考场标准写过程。计算题必须画出表格标明每一步状态变化PV操作题写清楚注释解释每个信号量的用途简答题即使不知道标准答案也要从“是什么、为什么、怎么样”三个角度展开。这些习惯不是考场上临时能有的必须平时反复训练。4.3 实践环节的补充笔记之外可以做点什么操作系统是一门理论与实践结合很紧密的课程如果时间允许强烈建议动手做一些小实验来加深理解。比如用C语言写一个简单的生产者消费者程序用pthread库即可观察多线程下的同步行为在Linux虚拟机里用ps、top、free等命令查看进程和内存的真实状态甚至可以用QEMU加载一个小型Linux系统体验从开机到操作系统的完整启动链。一个足够小的实操起点是在自己的Linux环境里熟练使用这些命令查看进程状态的ps aux查看内存的free -h查看CPU和内核线程的top查看文件系统挂载的df -h查看系统调用追踪的strace ls。这些命令背后的原理就是操作系统课本里讲的内容。当你用strace看到ls执行时产生了哪些系统调用你对“操作系统是应用程序和硬件之间的接口”这句话的理解会从文字变成真实体验。对于考研的同学来说实践不一定要花很多时间但哪怕只做一两个小实验对概念的理解和记忆都有明显的促进作用。尤其是文件系统和进程管理这两个章节实验的收益非常明显。4.4 笔记维护与持续更新最后聊一下笔记的维护。操作系统笔记不是一次性写成的我自己的笔记从第一版到最终版迭代了至少四轮。第一轮是边学边记内容完整但冗余第二轮是做完王道课后题后精简要点、补充错题第三轮是做完408真题后把真题里出现的知识点做特殊标记第四轮是考前两周把最精华的易错点浓缩成几页冲刺纸。每一轮迭代笔记都在变薄——但“变薄”不等于信息变少而是信息密度变高。那些你早已烂熟于心的内容不需要再占笔记空间那些反复出错的点会被越来越高地标记在显眼处。这份笔记最终呈现出来的样子就是你个人知识图谱的高度浓缩。我在实际整理这套操作系统笔记的过程中最大的体会是真正让笔记有价值的不是记录动作本身而是记录背后的思考过程。一道题错了你记下正确答案那只是复制你记下“我为什么错、以后怎么避免”那才是内化。王道的课件给了你完整的知识骨架而你的笔记是在骨架上长出属于你自己的肌肉和血液。希望这套思路能帮你把操作系统这块硬骨头啃下来在考试里稳稳拿到该拿的每一分。