操作系统概念第七版79章课后题答案中文版.docx
- 文档编号:12273935
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:19
- 大小:29.02KB
操作系统概念第七版79章课后题答案中文版.docx
《操作系统概念第七版79章课后题答案中文版.docx》由会员分享,可在线阅读,更多相关《操作系统概念第七版79章课后题答案中文版.docx(19页珍藏版)》请在冰豆网上搜索。
操作系统概念第七版79章课后题答案中文版
7.1
假设有如图7.1所示的交通死锁。
a.证明这个例子中实际上包括了死锁的四个必要条件。
b.给出一个简单的规则用来在这个系统中避免死锁。
a.死锁的四个必要条件:
(1)互斥;
(2)占有并等待;(3)非抢占;(4)循环等待。
互斥的条件是只有一辆车占据道路上的一个空间位置。
占有并等待表示一辆车占据道路上的位置并且等待前进。
一辆车不能从道路上当前的位置移动开(就是非抢占)。
最后就是循环等待,因为每个车正等待着随后的汽车向前发展。
循环等待的条件也很容易从图形中观察到。
b.一个简单的避免这种的交通死锁的规则是,汽车不得进入一个十字路口如果明确地规定,这样就不会产生相交。
7.2
考虑如下的死锁可能发生在哲学家进餐中,哲学家在同个时间获得筷子。
讨论此种情况下死锁的四个必要条件的设置。
讨论如何在消除其中任一条件来避免死锁的发生。
死锁是可能的,因为哲学家进餐问题是以以下的方式满足四个必要条件:
1)相斥所需的筷子,2)哲学家守住的筷子在手,而他们等待其他筷子,3)没有非抢占的筷子,一个筷子分配给一个哲学家不能被强行拿走,4)有可能循环等待。
死锁可避免克服的条件方式如下:
1)允许同时分享筷子,2)有哲学家放弃第一双筷子如果他们无法获得其他筷子,3)允许筷子被强行拿走如果筷子已经被一位哲学家了占有了很长一段时间4)实施编号筷子,总是获得较低编号的筷子,之后才能获得较高的编号的筷子。
7.3
一种可能以防止死锁的解决办法是要有一个单一的,优先于任何其他资源的资源。
例如,如果多个线程试图访问同步对象A•…E,那么就可能发生死锁。
(这种同步对象可能包括互斥体,信号量,条件变量等),我们可以通过增加第六个对象来防止死锁。
每当一个线程希望获得同步锁定给对象A•••E,它必须首先获得对象F的锁.该解决方案被称为遏制:
对象A•••E的锁内载对象F的锁。
对比此方案的循环等待和Section7.4.4的循环等待。
这很可能不是一个好的解决办法,因为它产生过大的范围。
尽可能在狭隘的范围内定义死锁政策会更好。
7.4
对下列问题对比循环等待方法和死锁避免方法(例如银行家算法):
a.运行费用
b.系统的吞吐量
死锁避免方法往往会因为追踪当前资源分配的成本从来增加了运行费用。
然而死锁避免方法比静态地防止死锁的形成方法允许更多地并发使用资源。
从这个意义上说,死锁避免方案可以增加系统的吞吐量。
7.5
在一个真实的计算机系统中,可用的资源和进程命令对资源的要求都不会持续很久是一致的长期(几个月)。
资源会损坏或被替换,新的进程会进入和离开系统,新的资源会被购买和添加到系统中。
如果用银行家算法控制死锁,下面哪些变化是安全的(不会导致可能的死锁),并且在什么情况下发生?
a.增加可用资源(新的资源被添加到系统)
b.减少可用资源(资源被从系统中永久性地移出)
c.增加一个进程的Max(进程需要更多的资源,超过所允许给予的资源)
d.减少一个进程的Max(进程不再需要那么多资源)
e.增加进程的数量
f.减少进程的数量
a.增加可用资源(新的资源被添加到系统):
这个可以在没有任何问题的情况下安全地改变
b.减少可用资源(资源被从系统中永久性地移出):
这可能会影响到系统,并导致可能性死锁因为系统的安全性假定其拥有一定数量的可用资源
c.增加一个进程的Max(进程需要更多的资源,超过所允许给予的资源):
这可能会影响到系统,并可能导致死锁
d.减少一个进程的Max(进程不再需要那么多资源):
这个可以在没有任何问题的情况下安全地改变
e.增加进程的数量:
如果允许分配资源给新进程,那么该系统并没有进入一个不安全的状态。
f.减少进程的数量:
这个可以在没有任何问题的情况下安全地改变
7.6
假设系统中有四个相同类型的资源被三个进程共享。
每个进程最多需要两个资源。
证明这个系统不会死锁。
假设该系统陷入死锁。
这意味着,每一个进程持有一个资源,并且正等待另一个资源。
因为有三个进程和四个资源,一个进程就必须获取两个资源。
这一进程并不需要更多的资源,因此当其完成时会返回其资源。
7.7假设一个系统有m个资源被n个进程共享,进程每次只请求和释放一个资源。
证明只要系统符合下面两个条件,就不会发生死锁:
a.每个进程需要资源的最大值在1到m之间
b.所有进程需要资源的最大值的和小于m+n
Answer:
使用Section7.6.2的术语,可以有:
a._n
i=1Maxi b.Maxi≥1foralli Proof: Needi=Maxi−Allocationi Ifthereexistsadeadlockstatethen: c._n i=1Allocationi=m Usea.toget: _Needi+_Allocationi=_Maxi Usec.toget: _Needi+m Rewritetoget: _n i=1Needi 这意味着存在一个Pi的进程,其Needi=0.如果Maxi>=1,那么Pi进程至少有一个资源可以释放。 从而系统就不会进入死锁状态。 7.8假设哲学家进餐问题中,筷子被摆放在桌子的中央,它们中的任何一双都可以被哲学家使用。 假如每次只能请求一根筷子,试描述一种在没有引起死锁的情况下,一个特殊的请求请求能否被满足的简单的规则,将筷子分配给哲学家。 Answer: 以下规则避免了死锁: 当一个哲学家发出一个需要第一根筷子的请求时,如果没有别的哲学家有两根筷子或者只留有一根筷子时,这个请求就不被允许。 7.9与上一题目中所给的环境相同。 假如现在每个哲学家请求三根筷子来吃饭,而且这种资源请求仍旧是分开发生的。 试描述一种类似的在没有引起死锁的情况下,一个特殊的请求请求能否被满足的简单的规则,将筷子分配给哲学家。 Answer: 当一个哲学家发出一个需要第一根筷子的请求时,满足其情况,如果1)那个哲学家已经有2根筷子,并且还有2根筷子剩余,2)那个哲学家已经有1根筷子,并且还有2根筷子剩余,3)最少有1根筷子剩余,并且最少有一个哲学家拥有3根筷子,4)那个哲学家没有筷子,但有2根筷子剩余,并且最少存在另外一个拥有2根筷子的哲学家放下他的筷子。 7.10我们可以通过把数组的维度减少到1,而从一般的银行家算法中得到一个单一资源类型的银行家算法。 试通过一个例子说明对于每个资源类型,多资源类型的银行家方案不能通过单一资源类型方案的单独运用来实现。 Answer: 假设一个系统有资源A,B,C和进程P0,P1,P2,P3,P4,并按照下图来分配 ALLOCATION A B C P0, 0 1 0 P1, 3 0 2 P2 3 0 2 P3 2 1 1 P4 0 0 2 还需要下列资源的数量 Need A B C P0 7 4 3 P1 0 2 0 P2 6 0 0 P3 0 1 1 P4 4 3 1 如果可利用的资源是(230),我们可以看到,进程P0请求(0,2,0)是不能被满足的,因为它比Availiable少(210),从而导致没有一个进程可以被完成。 然而,如果我们把三种资源看做是三个独立资源类型的银行家算法,可以得到以下各表: 对于资源A Allocated Need P0, 0 7 P1 3 0 P2 3 6 P3 2 0 P4 0 4 在次序P1,P3,P4,P2,P0下,各进程可以被满足。 对于资源B Allocated Need P0, 3 2 P1 0 2 P2 0 0 P3 1 1 P4 0 3 在次序P2,P3,P1,P0,P4下,各进程可以被满足。 对于资源C Allocated Need P0, 0 3 P1 2 0 P2 2 0 P3 1 1 P4 2 1 在次序P1,P2,P0,P3,P4下,各进程可以被满足。 我们可以看出,如果我们使用多重资源类型的银行家算法,对于进程P0的请求(020)是无法满足的,因为它使系统处于一个不安全的状态,然而,如果我们使用单一资源类型的银行家算法,把它们看做是三个分开的资源,这个请求是允许的。 同时,如果我们有多重资源类型,我们则必须使用多重资源类型的银行家算法。 7.11考虑下面的一个系统在某一时刻的状态: AllocationMaxAvailable ABCDABCDABCD P0001200121520 P110001750 P213542356 P306320652 P400140656 使用银行家算法回答下面问题: a.Need矩阵的内容是怎样的? b.系统是否处于安全状态? c.如果从进程P1发出一个请求(0420),这个请求能否被满足? Answer: a.Need矩阵的内容是P0(0000)P1(0750)P2(1002)P3(0020) P4(0640)。 b..系统处于安全状态,因为Available矩阵等于(1520),进程P0和P3都可以运行,当进程P3运行完时,它释放它的资源,而允许其它进程运行。 c.可以被满足,满足以后,Available矩阵等于(1100),当以次序P0,P2,P3,P1,P4运行时候,可以完成运行。 7.12在死锁检测算法中,乐观假设是什么? 这种假设怎样可以被违反? Answer: 乐观假设是在资源分配方面和进程请求资源的过程中,不存在任何形式的循环等待。 如果在实际过程中,一个循环等待确实发生,这种假设可以被违反。 8.1解释内部碎片和外部碎片的区别? Answer: 内部碎片是某一区域或某一页中,未被占据其位置的作业所使用的区域。 直到作业完成,释放页或区域,这个空间才能被系统所利用。 8.2考虑下面产生二进制的过程。 编译器是用来为每个独立单元产生目标代码,连接编辑器是用来联合各个部分的目标单元组成一个单一的程序二进制。 连接编辑器是怎样对内存地址改变指令和数据的捆绑? 从编译器到连接编辑器,什么信息需要被通过,而使内存绑定连接编辑器作业比较容易? Answer: 连接编辑器不得不将分解的符号地址替换为在最终的程序二进制中,与变量相联系的实际地址。 为了完成这个,单元必须追踪那些查阅到的未分解的符号指令。 在连接期间,全部程序二进制中的每个单元会被分配到一序列的地址空间,当它完成时,对于未分解的符号关系,可以通过这个二进制输出,当每个另外单元包含一系列需要修复的指令时,这个二进制可以在另外单元被修复。 8.3按顺序给出5个部分的内存,分别是100KB,500KB,200KB,300KB和600KB,用first-fit,best-fit和worst-fit算法,能够怎样按顺序分配进程212KB,417KB,112KB,426KB和426KB? 哪个算法充分利用了内存空间? Answer: a.First-fit: b.212Kisputin500Kpartition c.417Kisputin600Kpartition d.112Kisputin288Kpartition(newpartition288K=500K−212K) e.426Kmustwait f.Best-fit: g.212Kisputin300Kpartition h.417Kisputin500Kpartition i.112Kisputin200Kpartition j.426Kisputin600Kpartition k.Worst-fit: l.212Kisputin600Kpartition m.417Kisputin500Kpartition n.112Kisputin388Kpartition o.426Kmustwait Best-fit: 算法充分利用了内存空间。 8.4在运行过程中,许多系统允许程序分配更多的内存给它的地址空间。 在程序堆中的数据分配是这种分配方式的一个实例。 在下面的方案中,为了支持动态内存分配的要求是什么? a.连续内存分配b.纯段式分配c.纯页式分配 Answer: a.连续内存分配: 当没有足够的空间给程序去扩大它已分配的内存空间时,将要求重新分配整个程序。 b.纯段式分配: 当没有足够的空间给段去扩大它的已分配内存空间时,将要求重新分配整个段。 c.纯页式分配: 在没有要求程序地址空间再分配的方案下,新页增加的分配是可能的。 8.5比较在主存组织方案中,连续内存分配,纯段式分配和纯页式分配在下面问题中的关系。 a.外部碎片b.内部碎片c.通过进程分享代码的能力 Answer: 连续内存分配会产生外部碎片,因为地址空间是被连续分配的,当旧进程结束,新进程初始化的时候,洞会扩大。 连续内存分配也不允许进程共享代码,因为一个进程的虚拟内存段是不被允许闯入不连续的段的。 纯段式分配也会产生外部碎片,因为在物理内存中,一个进程的段是被连续放置的,以及当死进程的段被新进程的段所替代时,碎片也将会产生。 然而,段式分配可以使进程共享代码;比如,两个不同的进程可以共享一个代码段,但是有不同的数据段。 纯页式分配不会产生外部碎片,但会产生内部碎片。 进程可以在页granularity中被分配,以及如果一页没有被完全利用,它就会产生内部碎片并且会产生一个相当的空间浪费。 在页granularity,页式分配也允许进程共享代码。 8.6在一个页式分配系统中,为什么一个进程不被允许进入它所不拥有的内存? 操作系统怎么能被允许进入其它内存? 它为什么应当可以或不可以进入? Answer: 地址在页式分配系统上是一个逻辑页号和一个偏移量。 在逻辑页号的基础上产生一个物理页号,物理页通过搜索表被找到。 因为操作系统控制这张表的内容,只有在这些物理页被分配到进程中时,它可以限制一个进程的进入。 一个进程想要分配一个它所不拥有的页是不可能的,因为这一页在页表中不存在。 为了允许这样的进入,操作系统只简单的需要准许入口给无进程内存被加到进程页表中。 当两个或多个进程需要交换数据时,这是十分有用的。 ------它们只是读和写相同的物理地址(可能在多样的物理地址中)。 在进程内通信时,这是十分高效的。 8.7比较页式存储与段式存储为了从虚地址转变为物理地址,在被要求的地址转化结构的内存数量方面的有关内容。 c页式存储需要更多的内存来保持转化结构,段式存储的每个段只需要两个寄存器,一个保存段的基地址,另一个保存段的长度。 另一方面,页式存储每一页都需要一个入口,这个入口提供了那页所在的物理地址。 8.8在许多系统中的程序二进制的一般构造如下: 代码被存储在较小的固定的地址中,比例0。 代码段后紧跟着被用来存储程序变量的数据段。 当这个程序开始运行,栈被分配到虚地址空间的另一个端末尾,并被允许向较低的虚地址扩张。 上述结构在下列方案中具有什么意义: a.连续内存分配b.纯段式分配c.纯页式分配 Answer: 1)当程序开始运行时,连续内存分配要求操作系统给程序分配最大限度的虚地址空间。 这可能造成比进程所需要的实际内存大很多。 2)纯段式分配,在程序开始运行时,给每个段分配较小的空间,而且能随着段的扩展而扩大,这就给操作系统提供了灵活性。 3)纯页式分配在一个进程开始运行时,就不需要操作系统给进程分配最大的虚地址空间。 当一个程序需要扩展它的堆或栈时,它需要分配一个新的页,但是相关的页表入口被提前分配了。 8.9考虑一个分页系统在内存中存储着一张页表。 a.如果内存的查询需要200毫秒,那么一个分页内存的查询需要多长时间? b.如果我们加上相关联的寄存器,75%的页表查询可以在相关联的寄存器中找到,那么有效的查询时间是多少? (假设如果入口存在的话,在相关的寄存器中找到页表入口不花费时间) Answer: a.400毫秒: 200毫秒进入页表,200毫秒进入内存中的字 b.有效进入时间=0.75*200毫秒+0.25*400毫秒=250毫秒 8.10为什么有时候段式分配存储与页式分配存储可以联合成一种方案? Answer: 段式存储与页式存储经常结合在一起是为了提高它们两个中的每一个存储方式。 当页表变的十分大时,段式存储是十分有用的。 一大段连续的页表是不习惯被分解成为一个以0为段表地址的单一段表入口。 分页的段式存储句柄有一个非常大的段的时侯,就需要很多时间来进行分配。 通过把段分页,我们降低了由于外部碎片而造成的内存浪费,而且也简化了分配。 8.11解释为什么当共享一个使用段式存储的reenteant单元时比纯页式存储时这样做要来的容易? Answer: 因为段式存储是以内存的逻辑共享为基础的,而不是物理的,任何大小的段在段表中,被每个只具有一个入口的用户所共享。 而分页必须在页表中对每个被共享的页有相同的入口。 8.13问: 页表分页的目的是什么? 答: 在某些情况下,分页的页表可以变得足够大,可以简化内存分配问题(确保全部可以分配固定大小的网页,而不是可变大小的块),确保当前未使用的部分页表可以交换。 8.14问: 考虑分层分页方案,使用VAX架构。 当用户程序执行一个内存装载程序时,有多少个内存操作要执行? 答: 当一个内存装载程序完成时,有三个内存操作可以完成,一个是说明能够被打到的页表的位置。 第二个是页表进入自己。 第三个是现实的内存装载操作。 8.15问: 比较段页式表和哈希页表在处理大量的地址空间上,在什么环境下,哪一个方案更好? 答: 当一个程序占用大的虚拟地址空间的一小部分时,哈希页表更适合小一点的。 哈希页表的缺点是在同样的哈希页表上,映射多个页面而引起的冲突。 如果多个页表映射在同个入口处,则横穿名单相应的哈希页表可能导致负担过重。 这种间接最低的分割分页方案,即每一页表条目保持有关只有一页。 8.16问: 假设Intel的地址转换方案如图8.22所示 A.描述Intel80836将逻辑地址转换成物理地址所采用的所有步骤。 B.使用这样复杂的地址转换硬件对硬件系统有什么好处? C.这样的地址转换系统有没有什么缺点? 如果有,有哪些? 如果没有,为什么不是每个制造商都使用这种方案。 答: A。 选择符是段描述符表的标志,段描述符的结果加上原先的偏移量构成页表,再加上目录、偏移量构成页表,构成线性地址。 这个目录是页目录的标志。 目录项选择页表,页表域是页表的索引。 页表项再加上偏移量,构成物理地址。 B.这样的页表转换系统提供了灵活性,允许大多数操作系统在硬件上执行内存工具,而不是实施部分硬件和一些软件。 因为,它可以在硬件上实施,更有效率(内核更简单) C.地址转换在查找多样表时更花时间,缓存帮助,仍会导致缓存丢失。 9.1问。 举一个例子,IBM360/370的资源和目的地区重叠时说明,(MVC)重新启动移动块的问题。 答: 假设页面边缘为1024,移动空间从资源区800: 1200到目标区700: 1100,假设当页表在1024边缘发生故障访问错误,这时候的位置800: 923已覆盖新的值,因此,重新启动区块移动指令会导致在800: 923到700: 823之间复制新的值,而这是不正确的。 9.2问: 考虑支持请求页面调度的硬件需求。 答: 对于每一个内存访问操作,页表需要检查相应的页表驻留与否和是否计划已经读取或写入权限访问页面,一个TLB可以作为高速缓存和改善业绩的查询操作。 9.3问: 什么是写时拷贝功能,在什么情况下,有利于此功能? 支持此功能的硬件是什么? 答: 当两个进程正在访问同一套程序值(例如,代码段的二进制代码)在写保护的方式下,映射相应的页面到虚拟地址空间是有用的,当写操作进行时,拷贝必须允许两个程序分别进行不同的拷贝而不干扰对方。 硬件要求: 在每个内存访问的页表需要协商,以检查是否该页表是写保护。 如果确实是写保护,陷阱会出现,操作系统可以解决这个问题。 9.4问: 某个计算机给它的用户提供了232的虚拟内存空间,计算机有214B的物理内存,虚拟内存使用页面大小为4094B的分页机制实现。 一个用户进程产生虚拟地址11123456,现在说明一下系统怎么样建立相应的物理地址,区分一下软件操作和硬件操作。 (第六版有翻译) 答: 该虚拟地址的二进制形式是00010001000100100011010001010110。 由于页面大小为212,页表大小为220,因此,低12位的“010001010110”被用来替换页(page),而前20位“00010001000100100011”被用来替换页表(pagetable)。 9.5假设有一个请求调页存储器,页表放在寄存器中: 处理一个页错误,当有空的帧或被置换的页设有被修改过时要用8ms,当被置换的页被修改过明用20ms,存储器访问时间为100ns。 假设被置换的页中有70%被修改过,有效访问时间不超过200ns时最大可接受的页错误率是多少? (第六版有翻译) 答: 0.2_sec=(1−P)×0.1_sec+(0.3P)×8millisec+(0.7P)×20millisec 0.1=−0.1P+2400P+14000P 0.1_16,400P P_0.000006 9.6问: 假设正在监测的速度指针在时钟算法(表明侯选页面更换),如果发生以下行为,系统会怎么样? A.指针快速前进B.指针移动缓慢 答: 如果指针运行快,则该程序同时访问大量页面,当指针在对应的页面上清理与检查时,这是最可能发生的,因此不能被取代,这样做的结果是受害页面被发现之前,扫描很多页面。 如果指针运行慢,在虚拟内存找寻候选页表更换极为有效,表明许多常驻页面不会被窍取。 9.7问: 讨论在哪一种情况下,LFU(最不经常使用)页置换比LRU(最近最少使用)页置换法产生较少的页面错误,什么情况下则相反? 答: 考虑下面顺序存取在内存的系统的串,可容纳4页内存: 1123451,当访问5时,LFU算法将会替换除了1以外的其他页面,则在接下来读取1时,就不用更次替换了。 反来过说,如果串为: 123452,LRU算法性能更好。 9.8问: 讨论在哪一种情况下,MFU(最不经常使用)页置换比LRU(最近最少使用)页置换法产生较少的页面错误,什么情况下则相反? 答: 考虑可容纳4页的内存: 12344451,MFU算法会用5替换4,而LRU算法刚用5替换1,实践中不可能发生,对于串: 12344451,LRU算法做得更正确。 9.9问: 在VAX/VMS系统对驻留页采用先进先出算法,在空闲帧给最近最少使用页面,假设在空闲帧使用LRU算法,回答下列问题 A.如果页表出错和页面不存在空闲帧如何产生新空间给亲要求页面 B.如果页面出错和页面存在空闲帧,如何驻留页面,空闲帧怎么样分配给新要求页表。 C.如果驻留页面只有一个,系统如何决定 D.如果没有空闲帧,系统如果决定 答: A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 概念 第七 79 课后 答案 中文版