简介:这份资源是《计算机操作系统(第三版)》课后习题的参考答案文档,面向高校计算机专业学生、考研复习者以及准备操作系统课程考核的学习者,用于对照教材章节核对习题思路、梳理核心考点。内容覆盖操作系统引论、进程管理、并发编程等主线,对设计现代OS的主要目标、分时系统与实时系统的比较、进程与程序的动态性/并发性/独立性差异、PCB的作用与唯一标志地位、三态转换的典型原因、记录型信号量wait与signal的物理含义等经典题目均给出条理清晰的解答,便于读者在复习时快速定位知识点并理解答题逻辑。资源包共1个doc文件,大小约170KB,轻量易取,可直接在本地打开查阅。目前已有512人学习下载,适合作为课程同步练习与期末、考研冲刺阶段的对照参考。
1. 从一道“送分题”翻车说起:操作系统第三版答案到底考什么
“OS 具有哪几大特征?最基本特征是什么?”——这题在课后习题里出现频率极高,答案就四个词:并发、共享、虚拟、异步,最基本的是并发和共享。可每年都有人在这里丢分,不是背不下来,而是把“最基本”答成“最重要”,把“并发性”和“共享性”的顺序写反,甚至把“异步性”解释成“程序运行速度慢”。这类题看着像送分,实际是考官用来筛人的第一道门槛:你能不能在 30 秒内把定义、条件、因果链说清楚。
这份《计算机操作系统(第三版)课后习题答案》覆盖引论、进程管理、处理机调度与死锁、存储器管理、设备管理五大模块,题目以概念辨析、状态转换、算法推演为主,答案给的是“标准表述”,但考试和面试不会原样念答案。真正拿分的做法是:先记住考点骨架,再练“为什么这么答”,最后避开那些年年有人踩的坑。适合正在刷课后题、准备期末或复试专业课的人,也适合面试前想快速把 OS 高频考点过一遍的人。下面按考点分布拆开讲,每章都落到能直接背、直接练的题上。
2. 引论与进程管理:四个特征、三态转换、PCB 与信号量
2.1 引论高频考点:OS 目标、分时与实时、四大特征
引论部分题目不多,但概念题密度高,考法集中在“比较”和“因果”两类。设计现代 OS 的主要目标,标准答案是方便性、有效性、可扩充性和开放性,四个词要能各配一句解释:方便性指用户接口友好,有效性指提高资源利用率和系统吞吐量,可扩充性指结构上便于增加新功能,开放性指遵循标准、兼容外部设备。OS 的作用则分三层:用户与硬件的接口、系统资源的管理者、对计算机资源的抽象。这三层经常被合并成一道简答题,答题时按“接口—管理—抽象”的顺序写,每层补一个例子,比如接口层对应命令接口和系统调用,管理层对应处理机、存储器、设备、文件管理。
分时系统和实时系统的比较是引论里最容易答偏的题。交互性上,分时系统面向终端用户程序,交互能力更强;实时系统也有交互,但交互能力不及分时。及时性上,分时系统以“人所能接受的等待时间”衡量,实时控制系统则以“控制对象要求的开始截止时间和完成截止时间”衡量,所以实时系统的及时性要求更高。可靠性上,实时系统要求明显高于分时系统。这三条要按“交互性—及时性—可靠性”的顺序答,每条先给结论再给理由,不要只写“实时更好”。
分时系统的关键问题也常考:使用户能与自己的作业交互,即终端键入命令时系统及时接收、及时处理并返回结果。解决办法分两半:及时接收靠多路卡同时接收各终端输入,并为每个终端配缓冲区暂存命令;及时处理靠所有用户作业直接进入内存,并为每个作业分配时间片,只在自己的时间片内运行。这里“多路卡 + 缓冲区”和“全部进内存 + 时间片”是两组关键词,漏一组就少一半分。
OS 的四大特征是并发性、共享性、虚拟性、异步性,最基本特征是并发和共享,最重要的特征是并发性。异步性的成因要能展开:多道程序环境下多个进程并发执行,受资源限制走走停停,何时执行、何时暂停、推进速度、完成时间都不可预知,所以作业完成次序与进入内存次序不一致;但在进程控制和同步机制支持下,相同运行环境下多次运行结果相同,因此异步执行是系统允许的。这段“不可预知但结果可再现”是答题的得分点,只写“异步就是不同步”会被判没答到本质。
2.2 进程管理真题演练:前趋图、PCB、三态与信号量
进程管理是整份答案里题量最大的一章,考法从画图到写程序都有。先看前趋图题:S1: a:=x+y; S2: b:=z+1; S3: c:=a-b; S4: w:=c+1。四条语句的依赖关系是 S1 和 S2 可并行,S3 依赖 S1,S4 依赖 S3。答题时先画结点再连边:S1→S3→S4,S2 独立。如果要求用信号量描述,就按“每个前趋边一个信号量、初值 0”的套路写:
// 前趋图 S1→S3→S4,S2 独立 semaphore a1 = 0; // S1 完成信号,供 S3 等待 semaphore a2 = 0; // S3 完成信号,供 S4 等待 void S1() { a = x + y; signal(a1); } void S2() { b = z + 1; } void S3() { wait(a1); c = a - b; signal(a2); } void S4() { wait(a2); w = c + 1; }这段代码的关键不是语法,而是“wait 放在依赖方开头、signal 放在被依赖方结尾”。参数上,每个信号量对应一条前趋边,初值必须为 0,表示“事件尚未发生”;如果初值写成 1,S3 可能在 S1 之前执行,前趋关系就失效了。考试里常要求“写出信号量初值和各进程代码”,初值那一行单独占分,别漏。
PCB 的作用是必背题:PCB 是进程实体的一部分,是 OS 中最重要的记录型数据结构,记录描述进程情况和控制运行所需的全部信息,使多道程序环境下不能独立运行的程序成为能独立运行、能与其他进程并发执行的基本单位。为什么说 PCB 是进程存在的唯一标志?因为进程整个生命周期中系统总是通过 PCB 控制进程,系统是根据 PCB 而不是别的什么感知进程存在。答题时把“记录信息—成为独立单位—唯一标志”三层写全,只写“PCB 是进程控制块”拿不到分。
三态转换的典型原因要按“就绪→执行、执行→阻塞、执行→就绪”三条写:就绪进程被调度程序分配处理机后变执行;执行进程因某事件无法执行(如访问被占用的临界资源)变阻塞;执行进程因时间片用完被暂停变就绪。注意“阻塞→就绪”不是进程自己完成的,而是事件发生后由系统唤醒,这条常被漏掉。挂起状态的原因有四个:终端用户请求、父进程请求、负荷调节需要、操作系统需要;性质是被挂起的进程处于静止状态,不能直接被处理机调度。这里“静止”和“不能被调度”是两个得分点。
信号量的物理概念题也高频。wait(S):S.value>0 表示资源可用,执行后 S.value 减 1,进程获得一个单位资源;S.value<0 表示资源分配完毕,进程调用 block 原语自我阻塞,放弃处理机并插入 S.L 链表。signal(S):释放一个单位资源,S.value 加 1;若加 1 后 S.value≤0,说明链表中仍有等待进程,调用 wakeup 唤醒 S.L 第一个等待进程。答题时把“值的变化”和“原语动作”对应起来写,只写“wait 是 P 操作、signal 是 V 操作”太薄。
生产者—消费者问题是这一章的综合题。缺少 signal(full) 时,full 一直为 0,消费者执行 wait(full) 会认为缓冲区为空而一直等待;缺少 signal(empty) 时,empty 一直为 0,生产者投满后再申请空缓冲区会被阻塞。两个 wait 互换位置(wait(full) 和 wait(mutex) 互换)可能引起死锁:缓冲区全满时生产者先拿到 mutex,再执行 wait(empty) 失败阻塞,它不释放 mutex,消费者和其他生产者全被挡在临界区外。signal(mutex) 和 signal(full) 互换只影响释放次序,不会死锁。这道题答题模板是“先判断是否死锁,再描述阻塞链,最后给结论”,不要只写“会死锁”三个字。
2.3 进程与线程、通信工具的比较题怎么答
进程和程序的比较从动态性、并发性、独立性三方面写:动态性是进程最基本的特性,有创建、调度、暂停、撤销的生命期,程序只是有序指令的静态集合;并发性是进程的重要特征,引入进程正是为了让程序能与其他进程并发执行,程序本身不能并发;独立性指进程实体是独立运行、独立获得资源和独立调度的基本单位,未建立进程的程序不能作为独立单位运行。这三条要按“动态—并发—独立”顺序,每条先给结论再对比。
进程和线程的比较从调度性、并发性、拥有资源、开销四方面写:调度性上,传统 OS 中进程是拥有资源和独立调度分派的基本单位,引入线程后线程是调度分派单位、进程是资源拥有单位;并发性上,线程引入后不仅进程间可并发,同一进程内多个线程也可并发;拥有资源上,进程始终是资源拥有基本单位,线程只拥有一点运行必不可少的资源,但可访问所属进程的资源;开销上,创建撤销进程要分配回收资源,切换要保存设置现场信息,开销显著大于线程。这道题面试常问,答题时把“调度分派单位”和“资源拥有单位”这组对立词说清楚,基本就稳了。
低级通信工具和高级通信工具的比较:低级工具效率低、对用户不透明、所有操作由程序员实现;高级工具提供一组通信命令,高效传送大量数据。引入线程的原因也要能答:引入进程是为了多个程序并发执行、提高资源利用率和吞吐量,再引入线程是为了减少并发执行的时空开销、获得更好的并发性。这两道题经常合并成一道“为什么引入线程”,答题时先讲进程的贡献,再讲进程的代价,最后落到线程补什么。
3. 调度与死锁:三级调度、FCFS 与 SPF、银行家算法手算
3.1 三级调度与实时调度分类
高级调度(作业调度)的任务是从外存后备队列中选择作业调入内存,创建进程、分配必要资源,插入就绪队列准备执行;低级调度(进程调度)的任务是从就绪队列中选择哪个进程获得处理机,再由分派程序执行分配操作。引入中级调度的目的是提高系统资源利用率和系统吞吐量,做法是把暂时不运行的进程换出到外存、把具备运行条件的换入内存。三级调度常考“谁选谁、选到哪”,答题时用“外存后备队列→内存就绪队列→处理机”这条链把三级串起来,比单独背定义更稳。
FCFS 和 SPF 的比较:相同点是两者都既可用于作业调度也可用于进程调度;不同点在选择依据,FCFS 每次选最先进入队列的作业/进程,有利于长作业、不利于短作业,SPF 每次选估计运行时间最短的,有利于短作业、不利于长作业。答题时补一句“FCFS 对短作业不利是因为短作业要等长作业跑完,SPF 对长作业不利是因为长作业可能一直排不到”,这句解释是拉开分差的地方。
实时调度按调度方式分非抢占调度算法和抢占调度算法两种。这题短,但常和“实时系统及时性怎么保证”连问,答题时把“非抢占用于对切换开销敏感的场景、抢占用于对截止时间要求严格的场景”补上,显得不是死背。
3.2 死锁真题:四个必要条件、预防途径、银行家算法
死锁的定义是多个进程因竞争资源造成的僵局,无外力作用则永远不能向前推进。产生原因有二:竞争资源、进程推进顺序非法。必要条件是互斥条件、请求和保持条件、不剥夺条件、环路等待条件。这四个条件要能各配一句解释,比如请求和保持指进程已保持至少一个资源又请求新资源,且对已保持资源不放。答题时先写定义再写原因最后写条件,顺序乱了容易被判“概念不清”。
解决死锁的方法里,预防死锁最容易实现,但限制条件过严,会降低资源利用率和系统吞吐量;检测和解除死锁能让系统获得较好的资源利用率和吞吐量。预防死锁的三条途径对应摒弃三个条件:摒弃请求和保持,规定进程运行前一次性申请全部资源,只要有一种不能满足就整体等待;摒弃不剥夺,进程逐个申请,已保持资源的进程再申请不能立即满足时必须释放已保持的全部资源,以后重新申请;摒弃环路等待,所有资源按类型线性排序并赋序号,进程必须严格按序号递增次序请求。答题时把“摒弃哪个条件—具体规定—效果”三列对齐写,比大段叙述清楚。
银行家算法是这一章唯一需要手算的题。题目给 Allocation、Need、Available 三张表,第一问判断状态是否安全,做法是找安全序列:从 Available 出发,逐个检查 Need 是否小于等于当前 Work,满足则假设进程完成并回收其 Allocation,Work 增加,标记 Finish,重复直到所有进程完成或找不到可满足进程。答案给出的安全序列是 P0、P3、P4、P1、P2,答题时要把每一步的 Work、Need、Allocation、Work+Allocation 列成表,只写“安全”不写过程拿不到过程分。
第二问 P2 请求 Request(1,2,2,2),先做两步检查:Request 是否小于等于 Need(1≤2、2≤3、2≤5、2≤6,满足),是否小于等于 Available(1≤1、2≤6、2≤2、2≤2,满足)。然后试分配:Available 变为 (0,4,0,0),Need 变为 (1,1,3,4),Allocation 变为 (2,5,7,6)。此时系统无法满足任何进程的请求,进入不安全状态,所以不能分配。答题时把“两步检查—试分配—安全性检查—结论”四步写全,尤其第二步试分配后的 Available 要写对,这是最容易算错的地方。
3.3 易错点:这五处年年有人丢分
错在把“最基本特征”答成“最重要特征”。为什么错:题目问的是基础性,并发和共享是虚拟和异步的前提,最重要特征才是并发性。怎么答对:先答“最基本特征是并发和共享”,再补一句“最重要的特征是并发性”,两个问法分开记。
错在分时与实时比较只写“实时更快”。为什么错:及时性的衡量标准不同,分时看人的等待时间,实时控制看控制对象的截止时间,不是单纯比速度。怎么答对:按交互性、及时性、可靠性三条分别给结论和理由,及时性那条点出“衡量标准不同”。
错在信号量 wait/signal 只写值加减、不写阻塞唤醒。为什么错:记录型信号量的核心是 S.value<0 时 block、加 1 后 S.value≤0 时 wakeup,漏掉原语动作等于没答物理概念。怎么答对:按“值变化—原语动作—链表操作”三句写,wait 和 signal 各三句。
错在生产者—消费者互换 wait 位置时只说“会死锁”不描述阻塞链。为什么错:死锁题的分在推理过程,不在结论。怎么答对:按“谁先拿到 mutex—谁在 wait(empty) 阻塞—谁因此进不了临界区—形成循环等待”四步写。
错在银行家算法试分配后忘记更新 Need 和 Allocation。为什么错:安全性检查用的是试分配后的新状态,只改 Available 会导致后续判断全错。怎么答对:试分配时三张表一起改,改完再跑安全序列,每一步 Work 都写出来。
4. 存储器管理:装入链接、分页分段、页面置换与抖动
4.1 装入、链接与分区分配策略
配置层次式存储器的原因有三:多个存储器使两端硬件能并行工作;多级存储特别是 Cache 是减轻存储器带宽对系统性能影响的最佳结构方案;微处理机内部设缓冲存储器、增加 CPU 寄存器数量可缓解存储器压力。这题答题时把“并行—带宽—压力”三个词各带一句解释即可。
程序装入内存的方式有绝对装入、重定位装入、动态运行时装入。绝对装入适用于单道程序环境,重定位装入和动态运行时装入适用于多道程序环境。静态链接是运行前把目标模块和库函数链接成完整装配模块、以后不再拆开;装入时动态链接是边装入边链接,装入一个模块时若发生外部模块调用就去找到并装入、修改相对地址;运行时动态链接是把某些模块的链接推迟到执行时,发现被调用模块未装入才由 OS 装入并链接。三种链接的区分点是“链接发生的时机”,答题时用“运行前—装入时—运行时”三个时间点串起来。
引入动态重定位是因为程序运行中经常要在内存中移动位置,为保证移动后还能正常执行必须修改地址。实现靠硬件地址变换机构,系统中增设重定位寄存器存放程序在内存的起始地址,执行时真正访问的地址是相对地址与重定位寄存器地址相加。答题时“为什么要重定位”和“怎么实现”分开写,后者必须点出重定位寄存器。
分区存储管理的四种分配策略要能比较优缺点:首次适应保留高址大空闲区、利于大作业,但低址不断被划分留下小空闲区、每次从低址查找增加开销;循环首次适应使空闲分区分布均匀、减少查找开销,但缺乏大空闲分区、装不下大作业;最佳适应每次分配最合适的分区,但留下许多难以利用的小空闲区;最坏适应剩下的空闲区不至于太小、产生碎片几率最小,但缺乏大空闲区、不利于大文件。答题时按“优点—缺点”两列写,四种策略的缺点里“小空闲区”和“缺大空闲区”是两组关键词,别混。
引入对换的好处是把暂不运行的进程或暂不用的程序数据换到外存,腾出内存给具备运行条件的进程或数据,提高内存利用率。以进程为单位对换时并非每次换出整个进程,因为 PCB 总有部分或全部常驻内存不被换出,程序段和数据段可能正被若干进程共享也不能换出。这题常被答成“每次都换出整个进程”,错在忽略 PCB 常驻和共享段。
4.2 分页与分段:硬件支持、共享保护、区别对比
实现分页存储管理需要页表机制和地址变换机构的硬件支持。分段系统比分页系统更易于实现信息共享和保护,因为分页的页面分散存储,共享和保护要页面一一对应、建立大量页表项;分段每个段从 0 开始编址、采用连续地址空间,共享和保护只需为要共享保护的程序设一个段表项,基址与内存地址对应即可。答题时把“页表项数量”和“段表项数量”的对比写出来,比只说“分段更灵活”有说服力。
分页和分段的区别三条:功能上,页是物理单位,分页是为离散分配、消减内存外零头、提高利用率,满足系统管理需要;段是逻辑单位,含一组意义相对完整的信息,满足用户需要。大小上,页大小固定由系统确定,段长度不固定由用户程序决定。地址空间上,分页作业地址空间是一维的,分段是二维的。这三条是标准答案,答题时每条先给“页如何、段如何”,不要只写一半。
连续分配和离散分配的比较要分两层:连续分配包括单一连续分配和分区式分配,单一连续分系统区和用户区、只能用于单用户单任务系统;分区式分固定分区和动态分区,固定分区大小固定必然浪费,动态分区按实际需要分配,常用首次适应、循环首次适应、最佳适应三种算法,各自缺点如上。离散分配把进程分散到不相邻分区,分页提高内存利用率、满足系统管理需要,分段满足用户需要、共享保护优于分页,段页式结合两者优点、既便于共享保护动态链接又能解决外部碎片。答题时先分“连续/离散”两大类,再在类内列子类,层次清楚才不丢分。
虚拟存储器的特征是离散性、多次性、对换性、虚拟性,最本质特征是离散性,最重要特征是虚拟性。实现虚拟存储器需要页表机制、缺页中断机构、地址变换机构(请求分页系统),或段表机制、缺段中断机构、地址变换机构(请求分段系统)。这两题经常连着考,答题时把“特征四个词”和“硬件三件套”分开记,别把“最本质”和“最重要”写反。
4.3 页面置换计算题:FIFO、Belady 现象与改进型 Clock
请求分页系统的物理块分配策略有三种:固定分配局部置换、可变分配全局置换、可变分配局部置换。这题是纯记忆题,答题时各配一句“固定指每个进程物理块数不变,局部指只在进程自己的页面里选换出页”,三个词两两组合就记住了。
FIFO 页面置换计算是这一章最典型的计算题。页面走向 4、3、2、1、4、3、5、4、3、2、1、5,物理块 M=3 时缺页 9 次、缺页率 75%;M=4 时缺页 10 次、缺页率 83%。答题时画表:每列一个页面访问,每行一个物理块,命中不换、缺页按 FIFO 换出最早进入的页。M=3 的换页过程是 4、3、2 装入,访问 1 换出 4,访问 4 换出 3,访问 3 换出 2,访问 5 换出 1,访问 4、3 命中,访问 2 换出 5,访问 1 换出 4,访问 5 换出 3,共 9 次缺页。M=4 时反而 10 次,这就是 Belady 现象:增加物理块数缺页次数反而增加。答题时结论要写“FIFO 存在 Belady 现象,说明它不是好的置换算法”,只写数字不写现象名会丢分。
改进型 Clock 置换算法的基本原理:换出页面时如果该页被修改过要写回磁盘,未修改则不必写回;所以选择换出页时既要是未使用过的,又要是未被修改过的。实现上给每个页面加一个访问位和一个修改位,扫描时优先找“未使用未修改”的页,找不到再找“未使用已修改”的页。答题时把“访问位 + 修改位”两个因素和“优先换出未使用未修改”的规则写出来,比只写“改进 Clock 考虑修改位”完整。
抖动是指内存无空闲空间又发生缺页时,需要调出一页送磁盘对换区,如果算法不当,刚换出的页很快被访问又要调入,再选一页调出又被很快访问,频繁换页使系统大部分时间花在换进换出上、几乎不能完成有效工作。产生原因是 CPU 利用率和多道程序度的矛盾:提高多道程序度可提高 CPU 利用率,但单纯提高会造成缺页率急剧上升、CPU 利用率下降,调度程序又继续提高多道程序度,形成恶性循环。答题时把“频繁换页—有效工作少”和“多道程序度—缺页率—CPU 利用率”两条因果链写清楚。
5. 设备管理与答题技巧:通道、I/O 控制、缓冲与最后一遍检查
5.1 设备管理高频考点:通道、I/O 控制方式、缓冲与设备独立性
字节多路通道含许多非分配型子通道,连接低中速 I/O 设备,子通道按时间片轮转共享主通道,按字节传送,一个子通道交换完一个字节就腾出主通道给下一个。数组选择通道只含一个分配型子通道,一段时间只能执行一道通道程序、控制一台设备按数组传送,通道被占用后一直独占直到传完,利用率较低,主要用于多台高速设备。数组多路通道结合两者优点,含多个非分配型子通道连接高中速设备,按时间片轮转共享主通道、按数组传送,既有高速率又有满意的通道利用率。三种通道的区分点是“子通道类型”和“传送单位”,答题时用“字节/数组 × 多路/选择”的矩阵记。
解决通道不足的瓶颈问题,最有效方法是增加设备到主机间的通路而不是增加通道,即把一个设备连到多个控制器、一个控制器连到多个通道。多通路不仅解决瓶颈,还提高可靠性,个别通道或控制器故障不会使设备与存储器之间无法建立通路。这题常被答成“增加通道”,错在方向反了,答题时先写“增加通路”再解释“多控制器多通道”。
I/O 控制发展的推动因素有三:尽量减少 CPU 对 I/O 控制的干预,把 CPU 从繁杂 I/O 控制中解脱出来;缓和 CPU 高速性与设备低速性的矛盾,提高 CPU 利用率和系统吞吐量;提高 CPU 与 I/O 设备操作的并行程度,使两者都处于忙碌状态。四种 I/O 控制方式是程序 I/O、中断驱动 I/O、DMA I/O、I/O 通道控制。程序 I/O 适用于早期无中断系统,中断驱动适用于现代计算机系统,DMA 适用于块设备与主机交换数据,通道控制适用于一组数据块交换、要求配置通道及通道控制器。答题时把“方式—适用场合”一一对应,别把 DMA 和通道的适用场合写反。
单缓冲下系统对一块数据的处理时间为 max(C,T)+M:设备输入到缓冲区时间 T,OS 把缓冲区数据传到用户区时间 M,CPU 计算时间 C;设备输入和 CPU 处理可并行,所以取 max(C,T) 再加 M。双缓冲下为 max(C,T):设备输入第一缓冲区装满转向第二缓冲区,OS 从第一缓冲区移出数据送用户进程,CPU 再计算;设备输入与 CPU 处理并行,设备输入与数据传送也并行,耗时约 max(C+M,T),M 是内存内数据块搬家、非常短暂可省略,近似为 max(C,T)。这两题答题时先写公式再解释每个字母,只写公式不解释 T、M、C 各指什么会被扣分。
引入设备独立性可使应用程序独立于具体物理设备,使设备分配具有灵活性,也容易实现 I/O 重定向。实现方法是在设备驱动程序之上设一层设备独立性软件,执行所有 I/O 设备的公用操作并向用户层提供统一接口,关键是设置逻辑设备表 LUT 做逻辑设备到物理设备的映射,每个表目含逻辑设备名、物理设备名、驱动程序入口地址。考虑设备独立性分配独占设备的步骤是:进程以逻辑设备名提出请求;查 LUT 获得对应类型物理设备在系统设备表中的指针;顺序检索系统设备表找空闲可用且安全分配的设备控制表,找不到就挂到该类型设备等待队列;找到后查控制器控制表,忙则挂控制器等待队列,否则分配控制器;再查通道控制表,忙则挂通道等待队列,否则分配通道;设备、控制器、通道三者都分配成功才算分配成功,然后启动设备传送。这六步是标准流程,答题时按“逻辑名—LUT—设备—控制器—通道—启动”顺序写,漏掉“三者都成功才算成功”这句会丢关键分。
虚拟设备是通过虚拟技术把一台独占设备变换成若干台逻辑设备供多个用户同时使用,实现依赖的关键技术是 SPOOLing 技术。后台打印时 SPOOLing 系统为请求 I/O 的进程提供的服务包括:输出进程在输出井中申请空闲盘块区、把要打印的数据送入其中,等等。这题答题时先给虚拟设备定义,再点 SPOOLing,最后按“申请盘块—送数据—排队—输出进程打印”的流程补服务内容。
5.2 答题技巧:先骨架后细节,计算题写过程
这份答案的题量大,但考法有规律。概念题按“定义—条件—原因—影响”四段答,比如死锁先定义再原因再必要条件最后处理方法;比较题按“相同点—不同点—适用场景”三段答,比如 FCFS 与 SPF、分页与分段、进程与线程;计算题按“列表—逐步推演—结论”三段答,比如银行家算法和 FIFO 缺页计算。答题时先把骨架写出来再填细节,比想到哪写到哪稳得多。
下面这张表把五章的高频题型和答题落点对齐,考前过一遍能快速定位:
| 章节 | 高频题型 | 答题落点 |
|---|---|---|
| 引论 | 四大特征、分时与实时比较 | 特征四词 + 最基本/最重要分开;比较按交互、及时、可靠三条 |
| 进程管理 | PCB、三态转换、信号量、生产者消费者 | PCB 三层作用;三态三条原因;wait/signal 值变化加原语;互换 wait 描述阻塞链 |
| 调度与死锁 | 三级调度、FCFS/SPF、银行家算法 | 三级用队列链串;比较给利弊解释;银行家四步走、三张表一起改 |
| 存储器管理 | 分页分段区别、FIFO 缺页、抖动 | 三条区别各写页和段;FIFO 画表并点 Belady;抖动写两条因果链 |
| 设备管理 | 三种通道、I/O 控制方式、设备独立性 | 通道用字节/数组乘多路/选择;控制方式对应场合;独立性六步分配 |
计算题最容易翻车的地方是“只写答案不写过程”。银行家算法要写安全序列表,FIFO 要画物理块变化表,单缓冲双缓冲要写公式再解释字母。阅卷和面试官看的是推理链,答案对但过程跳步,分照样扣。反过来,过程写全但最后结论写错,还能拿过程分。
5.3 押题思路:三类题最可能再考
第一类是“特征 + 原因”组合题,比如 OS 四大特征及异步性成因、虚拟存储器特征及最本质特征、抖动原因。这类题答案固定但问法灵活,准备时把每个特征的“是什么—为什么—有什么影响”三句话背熟,换问法也能拆开用。
第二类是“比较 + 适用”题,比如分时与实时、FCFS 与 SPF、分页与分段、进程与线程、低级与高级通信工具。这类题答题模板是“相同点一句、不同点分条、适用场景一句”,不同点每条先给结论再给理由,理由里带一个具体例子。
第三类是“算法 + 手算”题,银行家算法和 FIFO 页面置换是两大常客。银行家算法记四步:检查 Request≤Need、检查 Request≤Available、试分配改三张表、跑安全序列。FIFO 记画表法:每列一个访问、每行一个物理块、命中不换、缺页换最早进入的,最后数缺页次数算缺页率,再补一句 Belady 现象。
面试场景下,考官更爱问“为什么”而不是“是什么”。比如问“为什么 PCB 是进程存在的唯一标志”,不要背定义,先说系统通过 PCB 感知和控制进程,再说 PCB 记录全部描述和控制信息,最后落到“没有 PCB 系统就不知道这个进程存在”。问“为什么引入线程”,先说进程并发提高了资源利用率和吞吐量,再说进程创建撤销切换开销大,最后说线程作为调度分派单位减少时空开销、获得更好并发性。这种“先贡献、再代价、最后补什么”的三段式,面试里比背课本原话管用。
我自己的习惯是:每道题先写骨架关键词,再补解释,最后检查有没有漏掉“原因”和“影响”。早些年我答死锁题只写四个必要条件,被追问“为什么这四个是必要条件”时卡住,从那以后我每次答条件题都强制走一遍“定义—原因—条件—每条一句解释”的流程,再没在追问上翻过车。希望帮到你。
本文还有配套的精品资源,点击获取