《操作系统精髓与设计原理·第六版》中文版答案 下载本文

5.17通过一下步骤说明消息传递和信号量具有同等的功能:

a.用信号量实现消息传递。提示:利用一个共享缓冲区保存信箱,每个信箱由一个消息槽数组成的。 b.用消息传递实现信号量。提示:引入一个独立的同步进程。

答:b.这个方法来自于[TANE97].同步进程维护了一个计数器和一个等待进程的清单。进程调用相关用于向同步进程发送消息的生产者,wait或signal,来实现WAITHUO SIGNAL.然后生产者执行RECEIVE来接受来自于同步进程的回复。

当消息到达时,同步进程检查计数器看需要的操作是否已经足够,SIGNALs总是可以完成,但是假如信号值为0时,WAITs将会被阻塞。假如操作被允许,同步进程就发回一个空消息,因此解除调用者的阻塞。假如操作是WAIT并且信号量的值为0时,同步进程进入调用队列,并且不发送回复。结果是执行WAIT的进程被阻塞。当SIGNAL被执行,同步进程选择一个进程在信号量上阻塞,要不就以先进先出顺序,要不以其他顺序,并且发送一个回复。跑步条件被允许因为同步进程一次只需要一个。

33

第6章 并发性:死锁和饥饿

6.1写出图6.1(a)中死锁的四个条件。

解:互斥:同一时刻只有一辆车可以占有一个十字路口象限。占有且等待:没有车可以倒退;在十字路口的每辆车都要等待直到它前面的象限是空的。非抢占: 没有汽车被允许挤开其他车辆。 循环等待: 每辆汽车都在等待一个此时已经被其他车占领的十字路口象限。

6.2按照6.1节中对图6.2中路径的描述,给出对图6.3中6种路径的简单描述。

解:1.Q 获得 B 和A, 然后释放 B 和 A. 当 P 重新开始执行的时候, 它将会能够获得两个资源。 2. Q 获得 B和A, P 执行而且阻塞在对 A的请求上. Q释放 B 和A。当 P 重新开始执行的时候,它将会能够获得两个资源。

3. Q 获得 B ,然后 P 获得和释放 A. Q 获得A然后释放 B 和 A. 当 P 重新开始行的时候,它将会能够获得 B。 4. P 获得A然后 Q 获得 B. P 释放 A. Q 获得A然后释放 B. P 获得 B 然后释放 B。

5. P 获得,然后释放 A. P 获得 B. Q 执行而且阻塞在对B的请求上。P释放B。当 Q 重新开始执行的时候,, 它将会能够获得两个资源。

6. P 获得A而且释放A然后获得并且释放 B. 当 Q 重新开始实行, 它将会能够获得两个资源。

6.3图6.3反映的情况不会发生死锁,请证明。

证明:如果 Q 获得 B 和A(在 P之前请求A), 那么 Q 能使用这些两类资源然后释放他们, 允许A进行。 如果 P在 Q之前请求A获得A, 然后Q 最多能执行到请求A然后被阻塞。 然而,一旦 P 释放 A , Q 能进行。 一旦 Q 释放 B, A能进行。

r1 r2 r3 r4 r1 r2 r3 r4 r1 r2 r3 r4 6.4考虑

0 0 1 2 0 0 1 2 下面的一

2 0 0 0 2 7 5 0 个系统,当

0 0 3 4 6 6 5 6 前不存在

2 3 5 4 4 3 5 6 未满足的

0 3 3 2 0 6 5 2 请求。 2 1 0 0

可用

r1 r2 r3 r4

当前分配 最大需求 仍然需求

a计算每个进程仍然可能需要的资源,并填入标为“仍然需要”的列中。 b系统当前是处于安全状态还是不安全状态,为什么。 c系统当前是否死锁?为什么?

d哪个进程(如果存在)是死锁的或可能变成死锁的?

e如果P3的请求(0,1,0,0)到达,是否可以立即安全地同意该请求?在什么状态(死锁,安全,不安全)下可以立即同意系统剩下的全部请求?如果立即同意全部请求,哪个进程(如果有)是死锁的或可

34

能变成死锁的? 解: a. 0 0 0 0

0 7 5 0 6 6 2 2 2 0 0 2 0 3 2 0

b.系统当前处于安全状态,因为至少有一个进程执行序列,不会导致死锁,运行顺序是p1, p4, p5, p2,

p3.

c.系统当前并没有死锁,因为P1进程当前分配与最大需求正好相等,P1进程可以运行直至结束,接

下来运行其他进程

d.P2,P3,P4,P5可能死锁

e.不可以,当进程P1,P4,P5执行完可用资源为(4,6,9,8),P2,P3将死锁,所以不安全,完全不

可以立即同意系统剩下的全部请求。

6.5 请把6.4中的死锁检测算法应用于下面的数据,并给出结果。

Available=(2 1 0 0)

2 0 0 1 0 0 1 0 Request= 1 0 1 0 Allocation= 2 0 0 1 2 1 0 0 0 1 2 0

解: 1. W = (2 1 0 0)

2. Mark P3; W = (2 1 0 0) + (0 1 2 0) = (2 2 2 0) 3. Mark P2; W = (2 2 2 0) + (2 0 0 1) = (4 2 2 1) 4. Mark P1; no deadlock detected 没有死锁

6.6一个假脱机系统包含一个输入进程I,用户进程进程P和一个输出进程O,它们之间用两个缓冲区连接。进程以相等大小的块为单位交换数据,这些块利用输入缓冲区和输出缓冲区之间的移动边界缓存在磁盘上,并取决于进程的速度。所使用的通信原语确保满足下面的资源约束:i+o≤max 其中,max表示磁盘中的最大块数,i表示磁盘中的输入块数目, o表示磁盘中的输出块数目。 输入 输出 P 缓冲区 缓冲区

以下是关于进程的知识: 1. 只要环境提供数据,进程I最终把它输入到磁盘上(只要磁盘空间可用)。 2. 只要磁盘可以得到输入,进程P最终消耗掉它,并在磁盘上为每个输入块输出有限量的数据(只要磁

盘空间可用)。 3. 只要磁盘可以得到输出,进程O最终消耗掉它。说明这个系统可能死锁。

I o 35

解:当I的速度远大于P的速度,有可能使磁盘上都是输入数据而此时P进程要处理输入数据,即要将处理数据放入输出数据区。于是P进程等待磁盘空间输出,I进程等待磁盘空间输入,二者死锁。

6.7给出在习题6.6中预防死锁的附加资源约束,仍然通话输入和输出缓冲区之间的边界可以根据进程的要求变化。

解:为输出缓冲区保留一个最小数目(称为reso)块, 但是当磁盘空间足够大时允许输出块的数目超过这一个界限。 资源限制现在变成 I + O ≤max I≤max – reso 当0 < reso < max 如果程序 P 正在等候递送输出给磁盘, 程序 O 最后处理所有的早先输出而且产生至少reso页, 然后让 P 继续执行。 因此 P 不会因为 O 而延迟。

如果磁盘充满I/O,I能被延迟; 但是迟早, 所有的早先的 输入可以被P处理完,而且对应的输出将会被 O 处理, 因而可以让I继续执行。

6.8在THE多道程序设计系统中,一个磁鼓(磁盘的先驱,用做辅存)被划分为输入缓冲区,处理和输出缓冲区,它们的边界可以移动,这取决于所涉及的进程速度。磁鼓的当前状态可以用以下参数描述: max表示磁鼓中的最大页数,i示磁鼓中的输入页数,p示磁鼓中的处理页数,o示磁鼓中的输出页数,reso出保留的最小页数,resp理保留的最小页数。 解:

I + O + P≤max – I + O≤max – resp I + P ≤max – reso I ≤max – (reso + resp)

6.9在THE多道程序设计系统中,一页可以进行下列状态转换: 1.空→输入缓冲区(输入生产)

2.输入缓冲区→处理区域(输入消耗) 3.处理区域→输出缓冲区(输出生产) 4.输出缓冲区→空(输出生产) 5.空→处理区域(输出消耗) 6.处理区域→空(过程调用)

a根据I,O和P的量定义这些转换的结果。

b如果维持习题6.6中关于输入进程,用户进程和输出进程的假设,它们中的任何一个转换是否会导致死锁。

解: 1. i ←i + 1

2. i←i – 1; p ←p + 1 3. p←p – 1; o←o + 1 4. o ←o – 1 5. p←p + 1 6. p ←p – 1

b. 结合在对问题 6.7 的解决办法被列出的资源限制, 我们 能总结下列各项:

6. 过程返回能立刻发生因为他们只释放

36