ARTICLE DETAIL

资讯详情

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

操作系统原理课后习题全解:进程、PV操作与调度算法一次拿下

操作系统原理课后习题全解:进程、PV操作与调度算法一次拿下 简介这是一份由陈敏、许雪林、汤龙梅主编的《操作系统原理及应用》课程课后习题参考解答面向正在学习操作系统原理、准备期末复习或考研基础巩固的读者。压缩包内仅有1个docx文档大小约65KB内容集中、便于按章节阅读和打印。目前已有1112人学习下载。解答覆盖第1章概述等核心章节包括操作系统的功能、基本分类、多道程序设计需解决的问题、分时系统与实时系统的差别以及Windows与Linux在系统构成、设计理念、安全性、硬件支持、易用性等方面的对比也对用户程序在操作系统内的处理过程进行了梳理。其中对操作系统分类比较、分时与实时系统差异等高频考点整理得较为系统配有清晰答题要点便于读者自测概念理解、补全知识盲点并掌握常见简答与论述题的答题逻辑提升操作系统课程复习效率。1. 课后答案怎么用一份能直接对着刷的操作系统原理题解操作系统原理这门课最坑的往往不是概念本身而是那些看起来会、一上手就错的手算题进程状态转换绕几圈就懵PV 操作信号量初值设错全盘皆输银行家算法判断到一半不确定系统到底安不安全。这份《操作系统原理及应用》陈敏、许雪林、汤龙梅主编配套的课后习题参考解答把第 1 章概述、第 2 章进程控制、第 3 章处理机调度的问答题和计算题全部给了完整答案包括十几道 PV 操作协调题、资源分配死锁推导以及 FCFS、SJF、时间片轮转、非抢占式优先权四张调度算法计算表。它最适合三类人期末要逐题核对答案的本科生、做专升本或考研 408 基础轮复习的人、想快速找回操作系统核心考点的一线开发者。这份资源不是拿来背的而是要把计算题真正自己重推一遍——它的价值在于把最容易扣分的计算过程完整列出来了。2. 进程与线程为什么先引入进程再引入线程以及 PCB/TCB 那些必考点2.1 概述章先垫底功能、分类、系统调用三件事概述这一章全是概念题真正需要花时间的是三件事。第一操作系统的功能按处理器管理、存储器管理、设备管理、文件管理、用户接口这个骨架来记答题时再往里填控制程序执行、改善人机界面、合理组织计算机工作流程这些修饰语既完整又不丢分。第二分类要能对上场景批处理系统看吞吐量、分时系统看交互性和及时性、实时系统看截止时间和可靠性、嵌入式系统看资源约束网络与分布式系统看节点关系。第三系统调用与一般过程调用的三个区别——运行状态不同用户态调用、系统态被调用、进入方式不同必须通过访管中断/陷入指令、代码层次不同用户级程序与系统级程序。这三个区别是简答题里出现频率最高的考点背的时候按状态、方式、层次三个维度走比逐句背原文稳得多。2.2 为什么先有进程静态程序描述不了动态执行多道程序在执行时需要共享系统资源各程序之间因此出现相互制约程序的执行表现出间断性特征。这些特征都发生在执行过程中是动态的而传统程序只是一组指令的集合是一个静态概念你看不出它何时执行、何时停顿也看不出它与其他执行程序的关系。所以需要引入进程来描述这种动态执行过程进程是可并发执行的程序在一个数据集合上的运行过程。考试问进程与程序的根本区别标准答法就是四个字动态与静态。程序是永久的、可长期保存的软件资料进程是有生命期的、在执行过程中产生和消亡的。2.3 进程三态与转换事件选择题最容易挖的坑进程最基本的状态是运行、就绪、阻塞三种新建和消亡属于辅助状态题目问最基本状态时不要多写。状态转换的事件要记成一张表当前状态触发事件目标状态运行时间片用完就绪运行申请 I/O 或等待某事件阻塞阻塞I/O 完成或事件发生就绪就绪被调度程序选中运行这里最容易踩的坑是阻塞能不能直接到运行——不能必须先进入就绪队列再被调度选中。另一个高频选择题是一个进程执行完毕时、时间片用完时、申请 I/O 被阻塞时分别对应什么转换按表格对号入座即可。2.4 PCB 与 TCB一个是唯一标志一个是管理依据进程控制块 PCB 是进程在内存中存在的唯一标志是操作系统对进程进行控制、管理和调度的依据在进程创建时产生、消亡时删除。线程控制块 TCB 的概念类似主体换成线程用来记录系统中所有线程的信息、唯一标识线程的存在。不要死记 PCB 的字段列表而是要理解标志 管理依据这两层含义。大题里问操作系统靠什么知道一个进程存在答案就是 PCB问进程在内存中的唯一标志是什么答案还是 PCB。课后习题里反复出现这个概念说明它确实是整章的基石。2.5 线程的出现把资源分配和调度两件事拆开进程作为资源分配的基本单位没问题但进程的创建、切换、撤销开销太大限制了并发度的提高。引入线程之后进程仍是资源分配的最小单位线程变成调度的最小单位线程不单独占用系统资源但可以共享所属进程的全部资源。进程与线程的对比是必考辨析题对比维度进程线程调度拥有资源的基本单位调度和分配的基本单位并发性进程之间可并发同一进程内多个线程也可并发资源独立拥有地址空间和资源不拥有系统资源可访问所属进程资源系统开销创建撤销开销大、切换慢开销小、切换快健壮性一个进程崩溃在保护模式下不影响其他进程一个线程死掉等于整个进程死掉另外一句容易被考到的话多线程程序在多处理机环境下能发挥最大性能这也是对称多处理机系统普遍采用线程技术的原因。3. PV 操作与同步互斥信号量初值、排队顺序和四道经典题解3.1 临界资源与临界区先分清概念再动手写代码临界资源是指每次仅允许一个进程访问的资源。属于临界资源的硬件有打印机、磁带机软件有消息缓冲队列、变量、数组、缓冲区等。每个进程中访问临界资源的那段代码称为临界区。经典做法是进程进入临界区之前先检查资源是否正被访问——未被访问则进入并设置正被访问标志正被访问则本进程不能进入。注意同步与互斥的差异互斥只要求不能同时进入临界区不规定先后次序同步则必须严格按照先后次序执行。互斥的各个进程单独执行都能得到正确结果只是交叉执行时可能出问题同步的各个进程单独执行完不成任务必须相互配合。3.2 信号量与 PV 原语S 的三种取值代表三种状态信号量是荷兰数学家 Dijkstra 在 1965 年提出的概念本质是一个整型变量表示系统中某一类可用资源的数量。S 0 表示资源可用数目S 0 表示资源已无可用、也没有进程在等待S 0 表示资源已无可用且 S 的绝对值个进程正在等待使用资源。公用信号量是一组互斥关系的进程间共享的信号量私用信号量是仅供具有同步关系的并发进程各自使用的信号量。PV 操作必须做成不可分割的原语因为 PV 操作涉及系统资源分配如果允许并发执行可能发生资源分配混乱导致操作系统出现严重错误。做题时记住 P 是申请/等待V 是释放/通知。3.3 阅览室与水果盘先找互斥资源再找同步关系阅览室那道题的关键是登入表和登出表各只有一张所以它们是临界资源需要各自用互斥信号量保护。注意标准答案没有单独为 100 个座位设信号量座位约束隐含在登入表登记这个动作里。// 登入表、登出表各一张分别互斥 semaphore intable 1; // 登入表空闲初值1表示无人使用 semaphore outtable 1; // 登出表空闲初值1表示无人使用 // 读者进入阅览室 P(intable); // 申请使用登入表 登记; // 临界区写入登记信息 V(intable); // 释放登入表 进入阅览室; 阅读; // 读者离开阅览室 P(outtable); // 申请使用登出表 签退; // 临界区登记退出时间 V(outtable); // 释放登出表 离开;逻辑说明这里的两个信号量各管一张表初值 1 表示当前没有人使用P 操作占用、V 操作释放。读者进入和离开是两个独立操作段互不嵌套所以不需要第三个信号量。如果你担心座位约束可以在进入时加一个 seat 100 的信号量做 P(seat)离开时 V(seat)但标准答案这样写更简洁考试时按题目要求来。水果盘那道题是同步关系最经典的入门题。果盘一次只能放一个水果所以 mutex 管互斥爸爸和女儿是同步关系妈妈和儿子是同步关系分别用 apple 和 orange 两个信号量通知。semaphore mutex 1; // 果盘互斥初值1表示果盘空闲 semaphore apple 0; // 盘中没有苹果初值0 semaphore orange 0; // 盘中没有橙子初值0 // 爸爸放苹果 P(mutex); // 占用果盘 放一个苹果; V(apple); // 通知女儿盘里有苹果了 // 妈妈放橙子 P(mutex); // 占用果盘 放一只橙子; V(orange); // 通知儿子盘里有橙子了 // 女儿取苹果 P(apple); // 等爸爸通知 取苹果; 吃苹果; V(mutex); // 释放果盘 // 儿子取橙子 P(orange); // 等妈妈通知 取橙子; 吃橙子; V(mutex); // 释放果盘逻辑说明apple 和 orange 初值为 0表示事件还没发生放水果的人 V 是发通知取水果的人 P 是等通知。这里有一个容易写反的细节谁最后使用临界资源谁负责 V(mutex)。女儿和儿子取完水果后必须释放果盘否则爸爸或妈妈下一次 P(mutex) 会永远阻塞。3.4 单缓冲区三进程注意信号量命名的坑A 输入、B 加工、C 输出三个并发进程共用一个缓冲区缓冲区是互斥资源同时 A 与 B、B 与 C 之间有同步关系。标准答案给了三个信号量但命名有迷惑性semaphore empty 1; // 缓冲区无数据A 可以输入 semaphore input 0; // 数据已输入B 可以加工 semaphore output 0; // 数据已加工C 可以输出 // A 进程输入 P(empty); // 等缓冲区空 输入数据; V(input); // 通知 B可以加工了 // B 进程加工 P(input); // 等 A 输入完 加工数据; V(output); // 通知 C可以输出了 // C 进程输出 P(output); // 等 B 加工完 输出数据; V(empty); // 通知 A缓冲区又空了逻辑说明empty 是缓冲区空位信号量input 是已输入信号量output 是已加工信号量。注意 output 在这里的语义是可供输出的数据存在初值 0 表示还没有加工完的数据不是能不能输出的控制开关。我实际做题时会把它改名为 processed语义更直白避免把自己绕进去。参数上记住一个规律生产者方向的信号量初值为 0等待事件缓冲区空位信号量初值为缓冲区大小互斥信号量初值为 1。3.5 两道并发算值题结果可变的根源是与时间有关的错误第 2 章计算题里有两道并发进程算变量值的题。一道是两个优先级相同的进程 P1、P2 用信号量 S1、S2 规定执行顺序x、y、z 的最终值是 x10、y9、z15考点是信号量把关键语句的执行顺序锁死了所以结果确定。另一道是 k 初值为 5P1 先执行两个循环再与 P2 并发执行可能的打印结果是 23、46、47 三组。同样的输入、同样的代码输出却不唯一根因是两个进程都对共享变量 x 做了修改出现了与时间有关的错误。解决办法是严格规定并限制执行顺序保证可再现性。这类题在考试里属于看着简单、算起来全是坑的类型建议按先列信号量限定关系、再枚举执行顺序、最后算变量值三步走。4. 死锁与银行家算法必要条件、资源数推导和安全性三步判断4.1 死锁四必要条件互斥、不可剥夺、部分分配、环路死锁是指系统中存在两个或两个以上进程它们中的每个都占用了某种资源又在等待其他进程所占用的资源导致系统无限期僵持。如果没有外力作用这些进程将永远等待下去。产生死锁的四个必要条件缺一不可互斥资源一次只能被一个进程使用、不可剥夺进程占用的资源在使用完之前不能被抢走、部分分配进程可以每次只申请所需资源的一部分、环路各并发进程对资源的占用和请求形成一个环。注意部分分配这个条件经常被忽略它恰恰是系统能在循环等待中卡住的根因——如果进程必须一次性申请全部资源环路等待根本形不成。4.2 不死锁资源数推导m ≥ (x-1) * n 1 的来路课后题里有一组资源数推导题核心思路是反证法考虑最坏情况n 个进程每个都拿到了 x-1 个资源谁都没法执行完毕。此时如果系统中还有 1 个空闲资源就能保证至少有一个进程补足 x 个资源执行完毕执行完释放它占用的 x 个资源打破僵局。所以系统不产生死锁的资源数关系是m ≥ (x - 1) * n 1套用这个公式3 个进程共享 4 个资源、每个进程最多需要 2 个资源时m ≥ (2-1)*31 4系统满足条件不会死锁。15 个进程竞争 50 个同类资源、每个进程最多用 3 个时满足不死的资源下限是 (3-1)*151 31系统有 50 个资源当然不会死锁。8 台刻录机、N 个进程每个最多申请 3 台时要求 2N1 ≤ 8推出 N ≤ 3也就是最多 3 个进程时系统没有死锁危险。这类题考试时先写公式再代入说明最后给结论三步就能拿满。4.3 银行家算法先试探分配再找安全序列银行家算法的核心不是剩余资源够不够而是分配后系统是否仍处于安全状态。以 5 个进程、A/B/C 三类资源数量分别为 10、5、9 的题为例。T0 时刻判断系统安全性检查剩余资源能否满足某个进程的最大需求能满足就让该进程执行完毕并释放资源反复循环。答案给的是剩余资源可以保证 P2 和 P4 执行完毕所以系统处于安全状态。P2 请求 (1,0,2) 时试探分配后剩余资源仍能保证 P2 跑完系统仍安全所以实施分配。P5 请求 (3,3,0) 时如果满足请求剩余资源变成 (0,0,2) 级别无法保证任一进程执行完毕系统进入不安全状态拒绝。P1 请求 (0,2,0) 同理满足后剩余资源无法保证任何进程完成拒绝。做题格式固定为三步需求是否小于等于剩余、试探分配、循环找能完成的进程并回收资源。找不到安全序列就回答不能分配。4.4 调度算法手算FCFS/SJF/时间片轮转/非抢占优先级处理机调度计算题的核心指标是周转时间完成时刻减提交时刻和带权周转时间周转时间除以执行时间一组作业算完后求平均。以课后题 J1~J5 为例执行时间分别是 11、2、1、4、2优先权分别是 2、1、3、1、4在时刻 0 按顺序进入单 CPU 系统。FCFS 先来先服务就是按到达顺序执行调度顺序 J1→J2→J3→J4→J5作业执行时间开始结束周转时间带权周转时间J111011111J221113136.5J3113141414J441418184.5J5218202010平均周转时间 15.2平均带权周转时间 7.2。SJF 短作业优先按执行时间从短到长J3(1) 先跑然后是 J2(2)、J5(2)、J4(4)、J1(11)作业执行时间开始结束周转时间带权周转时间J310111J221331.5J523552.5J445992.25J111920201.82平均周转时间 7.6平均带权周转时间 1.81。时间片轮转按时间片 2ms 推进调度顺序 J1→J2→J3→J4→J5→J1→J4→J1→J1→J1作业执行时间结束时刻周转时间带权周转时间J11120201.82J22442J31555J4413133.25J52994.5平均周转时间 10.2平均带权周转时间 3.31。非抢占式优先权按数值越大越优先J2 和 J4 优先级都是 1按到达顺序 J2 先执行调度顺序 J2→J4→J1→J3→J5作业执行时间开始结束周转时间带权周转时间J220221J442661.5J111617171.55J3117181818J5218202010平均周转时间 12.6平均带权周转时间 6.41。手算时最容易错的是时间片轮转的第二轮开始时刻后面避坑章会专门讲。5. 避坑与常见问题信号量初值、死锁判断、调度轮次里的典型翻车5.1 互斥信号量初值设成 0一上来就死锁现象照着生产者消费者模型写代码把 mutex 初值写成 0程序一运行第一个进程就在 P(mutex) 处永远阻塞。原因互斥信号量表示临界资源是否空闲初值必须是 1或者资源可用数写成 0 等于告诉系统资源已经被占用第一个申请者把自己挡住了。解决写代码前先给每个信号量加注释说明含义互斥锁初值统一设为 1同步信号量初值设为 0代表事件未发生。检查方法凡是看到初值 0的互斥信号量基本可以判定是翻车现场。5.2 银行家算法只查剩余够不够漏了安全性检查现象判断 P2 请求 (1,0,2) 时发现剩余资源够直接回答可以分配但没验证分配后系统是否还有安全序列。原因银行家算法的分配条件是满足请求后系统仍处于安全状态剩余资源够只是必要条件不是充分条件。解决严格走三步——先判断 Request ≤ Available再试探分配最后循环找能完成并释放资源的进程找不到安全序列就拒绝。我一般会在草稿纸上把试探分配后的 Available 写出来再逐个核对进程 Need避免口头判断出错。5.3 时间片轮转第二轮开始时间算错整列数据全错现象算 J4 第二轮开始时间时写成 9 甚至 12导致后续所有周转时间、平均值全部错误。原因时间片轮转是循环队列每个进程用完一个时间片排到队尾不能把第一轮每个进程的结束时刻当成第二轮的开始时刻。解决画时间轴每个时间片的结束时刻等于开始时刻加时间片长度进程完成后移出队列未完成排到队尾。自查方法最后一个进程的结束时刻应该等于总执行时间之和本组作业 11214220ms如果对不上一定哪里算错了。5.4 PV 操作里 V 的顺序写反进程永远等不到现象女儿取完苹果后先 V(apple) 再 V(mutex)下一次爸爸或妈妈 P(mutex) 时发现果盘被占或者儿子 P(orange) 后拿不到果盘。原因同步信号量的 V 是发通知互斥信号量的 V 是释放临界资源顺序反了会导致通知发出了但资源没释放后续进程卡在互斥信号量上。解决记住口诀——谁最后使用临界资源谁负责 V(mutex)生产者在生成资源后发同步信号消费者在消费完成后释放互斥信号。按下先 P 同步、后 V 互斥的顺序检查每条路径。5.5 概念题只背答案不背逻辑Windows 与 Linux 十个维度记不全现象默写Windows 与 Linux 的区别时写完开源/闭源、软件生态、设计哲学就卡住文件名扩展、可执行权限、重新引导这几个点总漏。原因这道题的答案有九到十个维度逐句背诵很容易中途断档。解决按维度记忆——开源构成、软件兼容、内核哲学、系统更新、安全性、设计定位、重新引导、文件名扩展、硬件支持、易用性答题时先列这十维再逐条填内容。实际操作是先把答案里的每个答改写成考点 一句话结论复习时只看提示词能说出来就算过。6. 把这份答案变成自己的复习脚本三遍刷题法与公式速查6.1 第一遍遮答案第二遍刷错题第三遍只过考前一天这份答案的正确打开方式不是通读而是当成自测脚本。第一遍把每道计算题遮住答案自己写概念题在纸上口述要点写不完整的标星号这个过程会暴露大量看着会、写不出的盲区。第二遍只刷标星号的题重点不是记住结论而是把解题步骤拆开重推一遍比如 PV 操作题重新画信号量关系、调度题重新排时间轴。第三遍放在考前最后一天只过一遍错题和下面那张公式表不再碰新题。6.2 一张表记住最容易丢分的四个结论考点结论使用前提死锁不产生条件m ≥ (x-1) * n 1n 个进程共享 m 个同类资源每个最多申请 x 个平均周转时间(完成时间 - 提交时间) 之和 / 作业数调度算法计算题通用平均带权周转时间周转时间 / 执行时间再取平均同上信号量初值互斥为 1同步为 0资源计数为资源数写 PV 操作前先列信号量含义怎样验证自己真会了把每道计算题的答案盖住在稿纸上完整推一遍再与参考解答逐行对比。如果过程完全一致说明这题过关如果只有结论对、过程跳步考试时大概率被扣过程分。我自己当年期末考 PV 操作大题吃过亏平时只看答案觉得每一步都能看懂结果考场上信号量初值写错、V 操作顺序颠倒一道 15 分大题只拿了 4 分。从那以后每次考前我都强制自己把答案里每道计算题当作新题重推一遍推到步骤和参考解答一致才放过。这份课后习题参考解答也一样你拿它刷题、核对、避坑但最后留在脑子里的应该是你亲手推过的过程而不是印在纸上的结论。希望帮到你。本文还有配套的精品资源点击获取
返回列表