ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

408操作系统复习:抓住资源管理主线,攻克进程与内存高频考点

408操作系统复习:抓住资源管理主线,攻克进程与内存高频考点 准备408统考的同学操作系统这科很特别。它不像数据结构那样需要大量写代码也不像组成原理那样细节密集但它是四科里最容易让人“看懂了却做不对”的一门。很多人把操作系统知识点过了一遍合上书发现脑子里只有进程、线程、页表几个词。其实操作系统的复习主线很清楚资源管理。CPU、内存、文件、IO归结起来就是这四块资源怎么分配、怎么调度、怎么避免冲突。这篇文章不写空话直接按408考察范围拆一遍操作系统知识点并且把常考、易错、需要动手算的地方标出来。如果你正在备考408或者刚把操作系统教材翻完但做题还懵建议把这篇当复习清单用。1. 操作系统在408统考中的定位与复习主线1.1 为什么说操作系统是最容易丢分的一科408统考一共四科数据结构、计算机组成原理、操作系统、计算机网络。操作系统大概占35分左右题型有选择题、综合应用题。它的特点可以总结成三个字多、杂、连。“多”是指概念多。进程、线程、同步、互斥、死锁、分区、分页、分段、虚拟内存、文件系统、设备管理每个章节都有大量概念。概念之间还互相交叉比如分页与计组里的地址线相关文件系统与磁盘调度相关。“杂”是指考察方式混乱。同一块知识点可以考选择题也可以考大题。PV操作可能出15分大题银行家算法可能出8分页面置换计算也可能单独出大题。你很难用死记硬背应付所有题。“连”是指题目往往把多个知识点串在一起。比如给你一个进程访问地址的序列让你计算页表项、快表、缺页次数、页面置换甚至还要你判断是否支持虚拟内存。这种综合题如果只看单点知识做起来会很吃力。所以在复习操作系统时我的建议是不要按教材的章节顺序死看先把整棵树的骨架搭起来再往里填枝叶。否则很容易陷入“每个字都认识题目不会做”的状态。1.2 用“资源管理”串起所有章节操作系统的本质可以理解成一组资源管理程序。它管理的不外乎四类资源CPU、内存、外存、输入输出设备。所有章节其实都是围绕这四条线展开的。CPU资源对应进程与线程。谁占用CPU怎么切换怎么调度怎么避免多个进程抢资源时出问题这就是进程管理的内容。内存资源对应内存管理。程序要运行代码和数据必须加载到内存。怎么分配内存怎么把逻辑地址转换成物理地址怎么让有限内存运行更大程序这就是内存管理的核心。外存资源对应文件管理。文件怎么组织目录怎么建磁盘空间怎么分配一个文件能有多大这就是文件系统的内容。设备资源对应IO管理。键盘、鼠标、磁盘、网卡怎么和CPU交互系统怎么屏蔽设备差异怎么提高数据传输效率这就是IO管理的重点。你只要抓住“资源”两个字再去看每个章节就会发现很多知识点的目的都一样提高资源利用率提高系统吞吐量保证并发执行的正确性。带着这个视角去复习不容易迷失细节。1.3 与数据结构、计组、网络的关系408四科不是完全独立的。操作系统里的调度算法会用到数据结构里的队列、堆栈进程同步问题本质是逻辑条件判断内存地址转换涉及计组里的地址计算文件系统的目录结构可以看成一棵树而网络数据传输时也要考虑缓冲区。但这不代表你要先精通其他科目才能复习操作系统。我建议按天然顺序先复习计组再复习操作系统。原因很简单内存管理里的逻辑地址、物理地址、页表、块号这些概念和计组里的主存地址、Cache、存储系统有很强的关联。如果你连“地址”的概念都归不清做操作系统的地址转换题会很痛苦。数据结构不一定要先复习完。操作系统里用到树和图的地方主要是文件目录和磁盘调度掌握基础概念就够了。计算机网络相对独立放在最后复习也可以。2. 操作系统核心知识点梳理四大管理模块2.1 进程与线程状态转换、调度算法、同步互斥、死锁进程管理是操作系统的灵魂也是408考察频率最高的模块。需要掌握的点很多我用清单方式列出来你按这个去自查。进程状态转换。最常考的是三态模型运行态、就绪态、阻塞态。运行态可以回到就绪态时间片用完运行态可以变成阻塞态等待资源阻塞态只能在相应事件发生后就绪态不能直接到运行态。五态模型会增加创建态和终止态。考试时经常问“某事件发生进程从什么状态变到什么状态”这时要紧扣“只有等待的事件完成后才能进就绪”这个原则。进程控制块。PCB是进程存在的唯一标志。它保存了进程标识符、程序计数器、CPU寄存器、内存指针、IO状态等信息。题目可能问“PCB中不包含什么”要能区分哪些是进程属性哪些不是。调度算法。先来先服务适合长作业短作业优先能降低平均等待时间时间片轮转保证交互性多级反馈队列兼顾长短作业。算法题常考给定到达时间和服务时间计算周转时间、带权周转时间、平均等待时间。这类题按表格计算就能得分关键是理解“抢占式”和“非抢占式”的区别。短作业优先的抢占版本是“剩余时间最短优先”要特别注意。同步与互斥。互斥是同一时刻只允许一个进程访问临界资源。同步是若干进程之间按某种先后顺序执行。信号量和PV操作是重点。生产者消费者、读者写者、哲学家进餐是典型例题。这一块适合出大题后面单独讲。死锁。死锁产生条件互斥、占有并等待、不可剥夺、循环等待。处理策略有预防、避免、检测和解除。预防是破坏四个条件之一避免最常用银行家算法检测和解除考得相对少但也出现过选择题。要会判断一个系统是否处于死锁会用银行家算法计算安全序列。线程和进程的区别也是高频选择题。线程是CPU调度的基本单位进程是资源分配的基本单位。线程切换开销小同属一个进程的线程共享资源。用户级线程对内核透明内核级线程由内核管理。2.2 内存管理连续分配、分页分段、虚拟内存、页面置换内存管理的目标是让多个进程同时装入内存并安全高效地运行。这部分是除了进程管理外的另一个大题来源。内存分配方式。连续分配有单一连续、固定分区、动态分区。动态分区分配算法有首次适应、最佳适应、最坏适应。这道题可能出现选择题问你哪种算法会产生外部碎片。首次适应性能好最佳适应容易产生大量小碎片。分页存储把内存和进程都分成固定大小的块页表记录页号和块号对应关系不会产生外部碎片。分段存储按逻辑单位分段便于共享和保护但会产生外部碎片。段页式综合两者先分段再分页但地址转换更复杂。地址转换。逻辑地址到物理地址的计算是必考项。分页系统下逻辑地址前几位是页号后几位是页内偏移量。物理地址 物理块号 × 块大小 页内偏移量。如果引入快表TLB要先查快表命中则直接得到物理块号未命中再访问内存查页表。考大题时画一个地址转换流程表分数就稳了。虚拟内存。虚拟内存基于局部性原理允许程序的部分装入内存就能运行。依赖请求调页和页面置换。常见置换算法OPT、FIFO、LRU、Clock。OPT不可实现但考试会给你序列往后看。FIFO最直观但可能产生Belady异常。LRU根据最近最久未使用思想用栈或数组实现。Clock是近似LRU给页面加访问位。这些算法会考缺页次数计算。计算时要明确物理块数按访问序列逐条分析。缺页中断。缺页中断发生时进程从用户态陷入内核执行缺页处理。它与普通中断的区别是缺页中断在指令执行期间产生而且处理完后会重新执行被中断的指令。选择题常考这一点。页面走向序列和物理块数会给你要能列出每一时刻的驻留集。2.3 文件管理目录结构、文件分配、磁盘调度文件管理在408中分值不如前两个模块但选择题频次很高偶尔出大题。文件和目录。文件是通过FCB文件控制块管理的FCB里包含文件名、类型、权限、物理位置等信息。目录其实就是FCB的集合。多级目录结构是一棵树路径名从根目录开始要区分绝对路径和相对路径。文件的物理结构。连续分配适合顺序访问但不便于扩展链接分配可以解决连续分配的碎片问题但只能顺序访问索引分配能随机访问还能扩展。索引分配会考最大文件大小计算比如盘块4KB盘块号占4B每个索引块能存1024个盘块号。直接索引块指向若干个数据块一级间接索引指向一个索引块二级间接指向索引块的索引块。这类计算题要细心别漏掉间接层和初始直接索引块数。空闲空间管理。位示图法很常考。比如盘块号从0开始字号从0开始位号从0开始给定盘块号计算它在位示图的哪一行哪一列。反过来给定字号和位号计算盘块号。要注意题目说的编号起始值是0还是1很容易错。磁盘调度。先来先服务、最短寻道时间优先、扫描算法SCAN、循环扫描C-SCAN。给定磁头当前的位置和请求队列让你按不同算法给出访问顺序并计算总寻道长度。这类题只要按规则模拟就行。不过要看清是“单向扫描”还是“双向扫描”有没有规定向哪个方向移动。2.4 IO管理IO控制方式、设备独立、缓冲、SPOOLingIO管理在选择题里会涉及大题出现频率较低但必须拿下基础点。IO控制方式。程序直接控制方式、中断驱动方式、DMA方式、通道控制方式。要能判断各自特点程序直接控制需要CPU轮询效率低中断驱动可以释放CPU但每传输一个数据都要中断一次DMA以数据块为传输单位通过DMA控制器直接与内存交换数据CPU只需在开始和结束时干预通道是专门处理IO的处理器能执行通道程序。设备独立性。用户程序使用逻辑设备名系统通过设备映射表映射到物理设备。好处是用户程序与物理设备解耦增加设备时不影响应用。相关概念有逻辑设备、物理设备、设备控制块DCB。缓冲技术。缓冲解决CPU与设备速度不匹配的问题。单缓冲、双缓冲、循环缓冲、缓冲池。题目有时让你计算处理一块数据的总时间。单缓冲时设备输入数据到缓冲区的时间、缓冲区到用户区的时间、CPU处理时间三者之间可能存在重叠。这个要画时间轴。SPOOLing。假脱机技术将低速独占设备改造成共享设备。经典例子是打印机。输入井和输出井是磁盘上的缓冲区。进程要打印时先把数据写入输出井然后SPOOLing程序负责把数据真正送到打印机。这样进程不直接占用打印机。选择题可能会问“SPOOLing系统由哪几部分组成”。3. 高频考点与易错点这些坑别踩3.1 进程状态转换中的细节进程状态转换是选择题重灾区。很多人容易记错“阻塞”和“就绪”的触发条件。这里有一个通用判断方法一个进程从运行态变成阻塞态一定是它等待某事件发生比如等待IO完成、等待信号量。一个进程从阻塞态变成就绪态一定是它等待的事件已经完成。而不是直接被调度器选中。调度器只能从就绪队列里选进程进入运行态。没有“从阻塞态直接变运行态”的路径。因为进程即使事件完成也可能没有空闲CPU必须先进入就绪队列排队。同样“从挂起态”相关概念如果教材里提到了也要注意状态转换的中间环节。考试时如果给你一个场景比如“进程请求打印机打印机正在忙”此时进程进入阻塞态。等打印机空闲后分配给该进程进程进入就绪态。有同学误以为打印机可用后进程直接运行这是不对的。3.2 信号量与PV操作的解题套路PV操作是408大题的“常青树”。很多人觉得难是因为没有套路。我总结一个固定流程。第一步找出题目中所有的资源以及每个资源的初始数量。注意“临界资源”和“资源队列”是两回事。第二步定义信号量。互斥信号量通常初始化为1保护临界资源。同步信号量初始值看资源数量比如空缓冲区初值为N满缓冲区初值为0。第三步确定P、V的位置。原则是申请资源前P释放资源后V。如果同时涉及互斥和同步顺序不能乱。以经典生产者消费者为例有界缓冲区大小为n。设互斥信号量mutex1空槽信号量emptyn满槽信号量full0。生产者生产一个产品; P(empty); P(mutex); 把产品放入缓冲区; V(mutex); V(full);消费者P(full); P(mutex); 从缓冲区取一个产品; V(mutex); V(empty); 消费产品;这个顺序很关键。先P(empty)再P(mutex)是防止缓冲区满时生产者占着mutex等待消费者取走产品而消费者需要mutex才能取造成死锁。互斥信号量P操作必须放在同步信号量之后这是经验也是考点。哲学家进餐问题也是常考。如果只定义一个互斥信号量可能会导致死锁。经典解法是限制最多4个人同时拿筷子或者让哲学家拿筷子的顺序不一样。考试时如果题目让你写出不会产生死锁的PV操作你得能说明为什么不会死锁。读者写者问题更复杂常用信号量集合。这里要掌握“读者优先”和“写者优先”两种模式的差别。408真题里出现过类似改造题型。3.3 死锁判定与银行家算法误区死锁判定问题很多人只看“循环等待”就判断死锁这是不对的。循环等待是死锁的必要不充分条件。系统存在循环等待不一定就死锁比如最后一个进程能释放资源打破环。所以考试时如果给资源分配图要判断是否能化简。资源分配图中没有循环是绝对不死锁有循环且每个进程只有一个资源请求时必然死锁有循环且进程有多种资源请求时需要尝试化简。银行家算法是经典避免死锁算法。算法核心是安全性检查。给定最大需求矩阵Max、已分配矩阵Allocation、需求矩阵Need、可用资源向量Available。你要能计算NeedMax-Allocation然后找满足Need[i]Available的进程假设分配给它后回收其资源继续找下一个。若所有进程都能在某一序列下完成则系统安全否则不安全。这里有个常见的误区安全性检查时必须“找一个能完成的进程然后推进”不能随便选一个当前Available能满足的进程然后立刻判断安全。要找完整序列如果中间某一步所有进程的Need都大于Available那就死锁。考试时建议先列出每个进程的Need再按表格填避免漏项。题目还可能问“某个进程请求资源是否立即分配”。这时要先将请求量临时加入AllocationAvailable减去请求量Need更新然后做安全性检查。如果不安全就不能分配。3.4 虚拟内存中缺页中断和页面置换的计算虚拟内存的页面置换计算题每年总会有同学算错缺页次数。原因往往是表没画清晰。首先要明确物理块数。缺页次数 置换次数 初始未命中次数。如果物理块是空的第一轮访问也会缺页要算进去。其次是算法差异。FIFO只要看页面进入内存的先后顺序谁先进来先淘汰谁。LRU要看最近访问时间时间最久远的淘汰。Clock算法用访问位标志遍历时如果访问位为0就淘汰为1就置0并继续。举个例子页面访问序列是 1 2 3 4 1 2 5 1 2 3 4 5物理块数3。FIFO缺页次数是9次LRU是10次。如果你算出来相差很大检查一下有没有把初始缺页算进去。有时候题目问“缺页率”要用缺页次数除以访问次数。还有一个易错点缺页中断时如果内存有空闲块但页表还没有映射只需要调入页面并更新页表如果内存已满才需要置换。很多题目不会明确说内存是否满你自己要根据物理块数和驻留集判断。3.5 文件系统索引节点与空闲空间管理文件系统的索引结构计算题容易在间接索引层数上出错。设物理盘块大小4KB盘块号占4B。一级间接索引块可以存放1024个盘块号所以通过一级间接索引能访问的最大文件大小是10244KB4MB。如果是二级间接索引能访问10485764KB4GB。如果一个文件使用了直接索引5个块、一级间接1个块、二级间接1个块那么最大文件大小要分开算再加起来。位示图法计算题也需要练习。比如某系统盘块号从0开始字长16位每个字的位号从0到15。盘块号b映射到字号i、位号j的公式是i (b - 1) / 16 或 b / 16取决于盘块号起始。很多题目给的是盘块号从0开始那么盘块号0对应字号0位号0。考场上先看题目有没有特别说明不能凭经验。空闲空间用成组链接法时把空闲盘块分组组内用链表和栈结构管理。这一块命题难度不高但偶尔在选择题中出现。理解“先进后出”的管理方式即可。4. 实操复习方法怎么把知识点变成得分能力4.1 先画出知识框架再填细节我见过太多同学一上来就抱着教材从第一章看到最后一章看到第三周发现前面忘光了。操作系统章节之间联系紧密更推荐用框架式复习。拿出一张A4纸横向分成四列进程管理、内存管理、文件管理、IO管理。每列往下分两级第一级写大章节名第二级写关键考点。比如进程管理下面写状态转换、调度算法、同步互斥、死锁。然后每天做题时遇到一个“坑”就在对应分支下用红笔补一个简短的提示比如“FIFO可能有Belady异常”。这样做的好处是你复习到后期能看着框架图自己把每个考点讲一遍。能讲出来才算真正掌握了。框架图不是抄关键词而是把你脑子里的知识结构外化出来。4.2 把真题当主训练不要只沉迷模拟题408历年真题是最好的题库。我建议从近10年真题入手把其中操作系统部分全部挑选出来按照知识点分类整理。可以按年份刷也可以按知识点刷。第一次按知识点刷时重点看考点分布。你会发现PV操作几乎每年必考页面置换也频繁出现磁盘调度偶尔出现SPOOLing和通道则是选择题常客。知道这些之后复习时间分配会更有方向。第二次按年份整套刷时要掐时间。操作系统选择题建议控制在20分钟内大题控制在35分钟左右。如果超过这个时间说明某个知识点不够熟。不要急着对答案先把自己卡住的点写下来。冲刺阶段可以用模拟题找找手感但不要本末倒置。模拟题的出题方向和真题有时有偏差尤其是一些超纲知识点不值得深挖。4.3 PV操作题需要动手写不能只看答案同步互斥题很多人看答案觉得很简单但自己去写就不知道信号量怎么定义。解决这个问题只有一个办法多动手而且按照固定模式练。第一遍先把生产者消费者、读者写者、哲学家进餐三种经典问题各自写一遍。写完后对照标准答案检查是不是出现了“死锁风险”。第二遍把经典问题做一些变形。比如把单缓冲区改成多缓冲区把单个生产者改成多个生产者把读者优先改成写者优先。第三遍可以自己设计场景练手比如模拟“公交车司机与售票员”这种同步问题。练的时候要注意信号量名要有意义不要混用。P操作和V操作最好配对书写中间不要省略。如果PV操作跨进程两个进程的P、V顺序必须严格对应。比如生产者执行P(empty)后消费者必须执行V(empty)。这个对称性要养成习惯考场上容易快速检查。4.4 结合计算机组成原理一起复习地址计算内存管理的地址转换题如果你学过计组的Cache、主存、磁盘寻址就会有天然的亲切感。操作系统里的逻辑地址由页号和页内偏移量构成对应计组里的高位和低位物理地址由物理块号和页内偏移量构成其实就是主存地址的一部分。考试遇到这类题先写出已知条件再套公式。不要把页号和偏移量的位数算错。例如某系统页大小为4KB逻辑地址16位那么页内偏移量占12位页号占4位。如果某进程页表内容是页号0对应物理块号2页号1对应物理块号3逻辑地址0x1000页号是1偏移量是0物理地址是3*4096012288。这类题分数基本是白送的前提是你熟悉进制转换和位运算。建议把十六进制、二进制、十进制换算练熟练考试时少用计算器。4.5 定期做“口述复习”检验自己一个很有效的复习方法是每周抽20分钟不看资料用口头或者笔头把操作系统知识点框架讲一遍。从进程管理讲到IO管理每个大点下面说出3个小点。比如说到内存管理你要能说出“连续分配、分页分段、虚拟内存、页面置换、局部性原理”这些关键词并简要解释。如果某个分支卡住了说明那个位置需要重点补。这种口述复习比刷题更能暴露知识漏洞。因为刷题时你可能靠着选项提示想起知识点而口述是没有任何提示的主动召回。408统考越来越重视综合能力能用知识关联去解决问题才是高分的关键。5. 常见复习误区和资源建议5.1 别把“看完”当成“学完”动手做比看十遍强很多同学复习操作系统的状态是看视频时觉得都会做题时发现都不会。这在操作系统这门课上尤其明显。因为视频里的老师会把推导过程讲得很顺而轮到你自己做题时需要自己想到那一层。比如PV操作你看别人写感觉很简单但自己写的时候第一个P是放在mutex之前还是之后可能就会犹豫。我的建议是看视频或教材时遇到核心题先暂停自己试着做一遍再继续往下看。哪怕做错了也会记得更牢。把“看”的过程压缩把“做”的过程拉长。做题时如果卡壳超过10分钟就直接看答案看明白后合上答案自己重新写一遍。这一步很关键能避免“眼高手低”。5.2 知识点要分主次不要平均用力408考试范围虽然广但知识点权重差距很大。操作系统必须主攻的题型包括PV操作与同步互斥题银行家算法内存地址转换页面置换算法磁盘调度算法文件索引结构计算这些几乎每年换着花样考必须熟练到能稳拿分。次级重要考点包括进程调度算法、空闲空间管理、IO控制方式、设备分配、缓冲技术、SPOOLing。这些更多出现在选择题熟悉概念即可。至于一些更偏的点比如“成组链接法”的详细流程知悉原理就行不必死抠每个步骤。我在复习时会做一个知识点分级表把所有考点按“必须会算”“必须会答”“了解即可”三档标记。每次做题如果遇到“了解即可”的题错了一道我也不会花太多时间。精力要放在性价比高的知识点上。5.3 学习资源和阶段时间分配建议零基础或跨考同学建议从教材《计算机操作系统》汤小丹版入手。先通读前六章理解进程、内存、文件、IO的宏观流程不需要太深入。然后配合考研辅导书或课程学习。如果基础较好可以直接看强化课程用教材当词典。真题方面《王道考研操作系统》或《天勤操作系统》都可以但不要贪多。一本习题册刷透比买五本做一半强得多。真题是最高优先级往年考过的题会变着花样重新出现。时间规划上我建议基础阶段暑假前完成教材阅读和课后题理解核心概念。强化阶段9-10月集中练习PV操作、地址转换、页面置换、银行家算法等核心题型开始刷真题。冲刺阶段11-12月整套真题限时训练错题三刷。如果你是在职考研每天能用的时间少那就把碎片时间放在选择题上周末整块时间做计算题。选择题适合用手机刷题库计算题必须用纸笔不能只靠眼睛看。5.4 针对不同基础的复习方案科班基础好的同学可能已经学过操作系统课程。但本科课程往往偏理论和408考试的题型差异很大。不要因为学过就跳过基础至少做一套真题摸底。如果选择填空正确率不错可以直奔强化训练。跨考或基础一般的同学不要急着刷真题。先把教材里的“状态转换图”“地址转换流程”“PV操作”这几个模块啃透。可以用比喻帮助理解进程就像排队打饭的人CPU就像一个打饭窗口内存就像食堂的座位文件就像菜谱。这样类比可以让概念具象化但做题时还是得回归严谨定义。二战或者复习多次的同学大概率已经过完一遍知识点此时最容易犯的错是“刷老题惯性”。我建议把题目条件改一改再练。比如把银行家算法里的资源数从3改成5把页面置换序列换掉重新算一遍。这样能检验你是不是真的理解而不是记住了答案。结尾操作系统复习最怕的是“散”。散在概念里散在算法里散在看懂的错觉里。只要抓住资源管理这条主线把四大模块的框架立起来再把高频题型的解题套路练到条件反射拿分并没有那么难。我个人更建议在复习中后期把每个常见题型的解题模板自己写一遍比如PV操作固定四步、地址转换固定画表、银行家算法固定找安全序列。这些模板不是死记硬背而是你做过很多题之后自然形成的经验。真正到了考场能写出来的才是你的。
返回列表