操作系统课后习题答案精讲:进程、调度与存储核心概念解析
简介这份资源是《计算机操作系统第三版》课后习题的参考答案文档面向高校计算机专业学生、考研复习者以及准备操作系统课程考核的学习者用于对照教材章节核对习题思路、梳理核心考点。内容覆盖操作系统引论、分时系统、进程管理、进程控制块、进程状态转换与并发编程等章节对设计目标、OS作用、分时系统关键问题、进程与程序的区别、PCB作用及信号量机制等典型题目均给出条理清晰的解答便于读者逐章自测与查漏补缺。资源包共1个文件为doc格式文档整体约170KB体积轻便适合直接打开查阅或打印复习。目前已有512人学习下载可作为课程同步练习与期末、考研复习阶段的辅助参考资料。1. 操作系统到底在管什么从“课后答案”说起很多人第一次翻开操作系统教材看到“并发性、共享性、虚拟性、异步性”这四个词脑子里冒出来的不是理解而是一串问号这到底在说啥其实可以把操作系统想成一家大型餐厅的“总调度”厨房、服务员、餐桌、排队取号的顾客全归它协调。你点菜时不用关心后厨谁在炒、灶台怎么分配操作系统也一样它把硬件藏在自己身后给用户和程序一个“看起来很好用”的界面。这份《计算机操作系统第三版课后习题答案》整理的正是围绕这套调度逻辑展开的核心问答从引论、进程管理到调度、存储、设备把教材里那些绕口的定义一条条拆开。搞懂它你再看“进程”“死锁”“缺页”这些词就不会觉得是玄学。2. 操作系统引论四个目标和三大作用到底在说什么2.1 设计现代操作系统的四个目标教材里给出的四个目标是方便性、有效性、可扩充性和开放性。这四个词单看都认识连起来却容易背完就忘。通俗地说方便性解决的是“人怎么用机器”——没有操作系统你得自己对着硬件发号施令有效性解决的是“机器怎么不闲着”让 CPU 和 I/O 设备尽量并行干活可扩充性解决的是“以后加新功能方不方便”系统结构要能长出新模块开放性解决的是“能不能和外面的世界对接”遵循统一标准别家写的程序也能跑。打个比方一家餐厅要开得久得让顾客点菜方便方便性、后厨出菜快有效性、以后加新菜系不用推倒重来可扩充性、还能接入外卖平台开放性。四个目标之间有时会打架比如追求方便可能牺牲一点效率所以操作系统设计从来不是单选题而是权衡。2.2 操作系统的三大作用答案里把 OS 的作用归为三条作为用户与计算机硬件系统之间的接口、作为计算机系统资源的管理者、实现了对计算机资源的抽象。这三条其实是同一个意思的三个侧面。接口说的是“你通过它跟硬件打交道”管理者说的是“它决定谁先用、谁后用、用多少”抽象说的是“它把复杂的硬件细节包装成简单概念”。拿文件来举例最直观。硬盘上本来是一堆扇区、磁道、柱面操作系统把它抽象成“文件”和“目录”你双击一个文档就能打开完全不用管数据落在哪块盘片上。这就是抽象的价值把复杂留给自己把简单留给用户。资源管理则体现在你同时开十个程序系统要决定 CPU 时间怎么分、内存怎么让、谁先打印背后全是调度。2.3 分时系统的关键问题与解决办法分时系统要解决的核心问题是“及时交互”用户在终端敲一条命令系统得赶紧接收、赶紧处理、赶紧把结果送回来。答案里给的方案很具体——及时接收靠多路卡让主机能同时接收多个终端的数据每个终端再配一个缓冲区暂存命令及时处理靠让所有用户作业直接进内存并给每个作业分配时间片只在自己的时间片里运行。这里的时间片可以理解成“轮流发言的时长”。每个人说一小会儿就换下一个人轮一圈下来时间很短每个用户都感觉自己独占了一台机器。这正是分时系统“看起来公平”的秘诀也是它和实时系统最容易混淆的地方后面会专门拆开讲。3. 进程管理为什么程序一“跑起来”就变了样3.1 进程和程序的区别静态图纸与施工队教材里反复强调程序是一组有序指令的集合是静态实体进程是程序的一次执行有创建、调度、暂停、消亡的生命期。用盖房子打比方程序是图纸进程是拿着图纸干活的施工队。图纸可以复印很多份但每支施工队都有自己的进度、自己的材料占用、自己的停工原因。答案从动态性、并发性、独立性三个角度做了比较。动态性是进程最基本的特性它“活”着会走走停停并发性是说多个进程能在一段时间内交替推进而单个程序本身做不到独立性是说进程是独立获得资源和独立调度的基本单位。理解这三条后面学 PCB、状态转换、同步互斥就都有了落脚点。3.2 PCB进程存在的唯一标志PCB进程控制块是操作系统里最重要的记录型数据结构之一。答案说得很明确系统是根据 PCB 而不是别的什么来感知进程存在的所以 PCB 是进程存在的唯一标志。你可以把 PCB 想成每个进程的“档案袋”里面记着它是谁、现在什么状态、占用了哪些资源、程序和数据在哪、优先级多少。进程的整个生命周期里系统都是通过 PCB 对它进行控制的。创建进程本质上是建立 PCB撤销进程本质上是回收 PCB。这也解释了一个常见困惑为什么说“进程实体”由程序段、数据段和 PCB 组成因为光有代码和数据系统根本不知道有这么个东西在跑必须有档案袋登记在册。3.3 三种基本状态与挂起状态进程的三个基本状态是就绪、执行、阻塞。转换原因答案列得很清楚就绪的进程被调度程序分配了处理机就变成执行执行中的进程因某事件无法继续比如申请的资源被占用就变成阻塞时间片用完又从执行回到就绪。这三者构成一个循环是理解调度的基础。挂起状态则是另一层概念。引入它主要有四种需要终端用户请求、父进程请求、负荷调节、操作系统自身需要。被挂起的进程处于静止状态不能直接被处理机调度。打个比方就绪和阻塞是“在候车厅等车”挂起是“被请出候车厅先到旁边待着”位置还在但暂时不参与排队。这个区别在讲对换和虚拟存储时会反复用到。3.4 同步与互斥临界区为什么要“进门登记、出门销号”多个进程抢同一个资源就必须有规矩。答案里提到同步机构应遵循四条准则空闲让进、忙则等待、有限等待、让权等待。前两条好理解后两条是防止“饿死”和“空转浪费 CPU”。临界区之前要执行进入区代码检查资源是否被占用退出前要执行退出区代码恢复访问标志让别的进程能进来。记录型信号量的 wait 和 signal 是这套规矩的具体实现。wait 时如果资源还有S.value0就减一占用如果没有S.value0就阻塞自己并挂到信号量链表上。signal 时先加一释放资源如果加完还小于等于零说明链表里还有人在等就唤醒一个。这里的关键是信号量的值不只是计数负数还代表等待进程的数量这个设计很巧妙。3.5 生产者—消费者问题里的经典翻车点答案里有两道题特别值得琢磨。第一道如果缺少 signal(full) 或 signal(empty) 会怎样缺 signal(full)消费者会一直以为缓冲区是空的永远等下去缺 signal(empty)生产者把缓冲区塞满后就再也申请不到空位同样卡死。第二道如果把 wait(full) 和 wait(mutex) 互换位置可能死锁。原因是生产者先拿到互斥锁再去等空位空位没有就阻塞而它握着锁不放消费者进不来谁也动不了。这类题之所以经典是因为它把“顺序”这件事讲透了。同步信号量和互斥信号量的 wait 顺序不能随便换血泪经验就是先等资源条件再拿互斥锁。答案里还提到 signal(mutex) 和 signal(full) 互换只影响释放次序不会死锁这个对比正好帮人分清“哪些顺序要命、哪些顺序只是风格”。4. 调度、死锁与存储几个最容易背混的概念4.1 常见误区这些概念长得像用起来差很远易混点一分时系统与实时系统。为什么混两者都讲“及时”。怎么区分分时系统的及时是“人能接受的等待”追求交互体验实时系统的及时是“控制对象要求的截止时间”追求确定性。答案明确说实时系统对可靠性要求更高交互能力反而不如分时系统。易混点二进程与线程。为什么混都跟“执行”有关。怎么区分传统系统里进程既是资源拥有单位又是调度分派单位引入线程后线程是调度分派单位进程退居资源拥有单位。线程基本不拥有资源但能访问所属进程的资源创建和切换开销明显小于进程。易混点三分页与分段。为什么混都是离散分配都要地址变换。怎么区分页是物理单位大小固定由系统定目的是减少内存外碎片段是逻辑单位长度不定由程序定目的是满足用户模块化需要。分页地址空间是一维的分段是二维的这个差别在算地址时特别容易翻车。易混点四死锁的四个必要条件与预防手段。为什么混四个条件背得滚瓜烂熟一到“摒弃哪个”就乱。怎么区分互斥条件通常不动请求和保持靠“一次性申请全部资源”来破不剥夺靠“拿不到就释放已有”来破环路等待靠“资源按序申请”来破。答案里说预防死锁最容易实现但资源利用率低检测和解除则相反这个取舍要记牢。易混点五Belady 现象与抖动。为什么混都跟缺页有关。怎么区分Belady 现象是 FIFO 算法下“物理块增多、缺页反而增多”的反常抖动是内存紧张导致页面频繁换进换出系统大部分时间耗在换页上。前者是算法特性后者是系统状态答案里那道 M3 缺页 9 次、M4 缺页 10 次的题就是 Belady 现象的典型例子。4.2 调度算法与死锁处理的选择逻辑高级调度决定哪些作业从外存进内存低级调度决定就绪队列里谁拿处理机中级调度则是为了提高资源利用率和吞吐量而引入的“中间层”。FCFS 和 SPF 的对比很直白前者有利于长作业、不利于短作业后者反过来。答案没有堆公式而是把“谁受益、谁受损”讲清楚了这比背平均周转时间公式更有用。死锁处理有四类办法预防、避免、检测、解除。预防是提前破坏必要条件简单但限制严避免是银行家算法那样边分配边判断安全性检测和解除则是先让它发生再收拾。答案里那道银行家算法题判断安全序列是 而 P2 请求 (1,2,2,2) 后系统进入不安全状态所以不能分配。这类题的关键不是算得快而是理解“安全状态”不等于“不会死锁”只是“存在一条让所有进程都能完成的路径”。4.3 存储管理连续与离散的取舍连续分配给一个程序一整块连续空间简单但容易产生碎片离散分配把程序打散到不相邻的分区分页、分段、段页式都属于这一类。答案对四种分区分配算法的优缺点列得很细首次适应保留高址大空闲区但低址碎片多循环首次适应分布均匀但缺大分区最佳适应留下大量小碎片最坏适应碎片少但缺大分区。这些结论不用死记抓住“碎片大小”和“查找开销”两个维度就能推出来。虚拟存储器的特征答案给了四个离散性、多次性、对换性、虚拟性并指出最本质的是离散性、最重要的是虚拟性。实现它需要页表机制、缺页中断机构和地址变换机构这些硬件支持。请求分页的三种物理块分配策略——固定分配局部置换、可变分配全局置换、可变分配局部置换——名字长但拆开看就是“块数变不变”和“置换范围全局还是局部”两个维度的组合。5. 设备管理与 I/O什么时候该用这套答案什么时候别硬套5.1 四种 I/O 控制方式的适用边界答案把 I/O 控制方式分成程序 I/O、中断驱动、DMA、I/O 通道四类。程序 I/O 适合早期无中断系统CPU 全程盯着效率最低中断驱动让 CPU 不用干等设备完成时打断一下现代系统普遍使用DMA 适合块设备成批传数据CPU 只在开始和结束时介入I/O 通道更进一步用一组数据块为单位需要专门的通道硬件。选择逻辑其实就一句话数据量越大、设备越多就越需要把 CPU 从搬运工的角色里解放出来。单缓冲和双缓冲的处理时间公式也值得说清楚。单缓冲下设备输入时间 T 和 CPU 计算时间 C 可以并行但缓冲区数据传到用户区的时间 M 通常不能完全重叠所以整块处理时间约为 max(C,T)M。双缓冲下输入和传送也能并行近似为 max(C,T)。这里的 M 是内存内“搬家”的耗时通常很短所以常被忽略。理解这个推导比背公式更能应对变体题。5.2 设备独立性与虚拟设备设备独立性是指应用程序不直接绑定具体物理设备而是用逻辑设备名申请由系统通过逻辑设备表 LUT 映射到物理设备。好处是分配灵活、容易实现 I/O 重定向。答案里分配独占设备的步骤有六步从逻辑设备名查到物理设备再依次检查设备、控制器、通道是否空闲三者都成功才算分配成功。这个“逐层检查”的思路和前面进程状态转换一样都是操作系统里常见的分层控制。虚拟设备则是用 SPOOLing 技术把一台独占设备变成多台逻辑设备典型例子是后台打印。多个进程同时请求打印系统先把输出存到磁盘的输出井再由输出进程排队真正送打印机。用户感觉自己独占了一台打印机实际上是在共享。这里的关键技术就是 SPOOLing它把“独占”变成了“排队共享”。5.3 什么时候用这份答案什么时候别只靠它这份课后习题答案最适合的场景很明确你在学操作系统课程刚看完一章需要对照检查自己有没有把概念理解偏或者你在准备考试想快速回顾每章的高频问答题和典型计算题。它的价值在于把教材里散落的定义、比较、算法步骤整理成可直接对照的问答尤其是进程同步、银行家算法、页面置换这类容易出计算题的地方答案给了完整的推演过程。但它也有边界。第一它是对教材习题的解答不是从零讲起的教程如果你连“进程”和“线程”都没分清直接看答案会越看越懵最好先过一遍教材对应章节。第二答案里的代码和算法描述偏伪代码风格比如信号量的 wait/signal、前趋图的 parbegin/parend直接复制去跑并不现实理解逻辑比照抄更重要。第三操作系统这门课不同教材、不同版本的术语和侧重点有差异这份答案对应的是第三版的内容遇到对不上的地方以你手头的教材为准别硬套。我自己的习惯是每看完一章教材先自己把课后题做一遍卡住的地方再翻这份答案对照重点看“它为什么这么答”而不是“答案是什么”。尤其是死锁和页面置换那几道计算题第一遍算错很正常对着答案把每一步的中间状态写出来比只看结论有用得多。从那以后我每次复习操作系统都会先把每章的典型题手推一遍再对答案避免“看懂了但写不出”的错觉。希望这份整理也能帮到你把那些绕口的概念真正变成自己的东西。本文还有配套的精品资源点击获取