当前位置:首页 > 操作系统概念 第七版 课后题 答案
}
When a process wants to return a number of resources, it calls the de- crease count()function:
/* increase available resources by count */ int increase count(int count) { available resources += count; return 0; }
前面的程序段将会产生一个竞争的条件。如下:
a. 确定数据参与竞争
b. 当竞争的条件发生时,确定代码段的位置(或是区域)
c. 利用Java同步,确定竞争的条件,同时修改decrease Count()以使一个线程在没有足够的现有的资源下阻塞。
a. 确定数据参与竞争:可以利用的变量资源
b. 当竞争的条件发生时,确定代码段的位置(或是区域):代码使现有的资源递减和代码
现有资源递增的声明可以放在竞争的条件。
c. 使用信号量,确定竞争条件:使用信号量表示当前可用资源变量,并且用信号量递增和
信号量递减的操作代替递增和递减的操作。
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. d. e. f.
增加可用资源(新的资源被添加到系统)
减少可用资源(资源被从系统中永久性地移出)
增加一个进程的Max(进程需要更多的资源,超过所允许给予的资源) 减少一个进程的Max(进程不再需要那么多资源) 增加进程的数量 减少进程的数量
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 =1 Maxi
7.8假设哲学家进餐问题中,筷子被摆放在桌子的中央,它们中的任何一双都可以被哲学家使用。假如每次只能请求一根筷子,试描述一种在没有引起死锁的情况下,一个特殊的请求请求能否被满足的简单的规则,将筷子分配给哲学家。
Answer:以下规则避免了死锁:当一个哲学家发出一个需要第一根筷子的请求时,如果没有
共分享92篇相关文档