《现代操作系统》精读与思考笔记 第六章 死锁

  本系列博文是《现代操作系统(英文第三版)》(Modern Operating Systems,简称MOS)的阅读笔记,定位是正文精要部分的摘录理解和课后习题精解,因此不会事无巨细的全面摘抄,仅仅根据个人情况进行记录和推荐。由于是英文版,部分内容会使用英文原文。

  课后习题的选择标准:尽量避免单纯的概念考察(如:What is spooling?)或者简单的数值计算,而是能够引起思考加深理解的题目。为了保证解答的正确性,每道题都会附上原书解答,而中文部分会适当加入自己的见解。原书答案下载地址(需注册)

 

  最初在翻这本书的目录时还在想,“死锁”这个主题安排在“进程”主题下就可以了嘛,为何要单列出一章?与动辄近百页的其他章节比,这一章只有区区三十来页而已,看似微不足道。本章开篇便告诉读者,“死锁”不仅在进程并行时会出现,在数据库系统甚至是办公室的设备共用时也会出现,使用场景很广泛,也难怪成为一个独立章节。

  也正因适用范围广泛,而方法是抽象的,这章特别强调,在决定使用某种避免或消除死锁的策略前,必须结合具体场景判断是否适用。

 

1.鸵鸟算法(P441)

  所谓的鸵鸟算法,就是对问题视若不见。虽然数学家认为根本不可接受,但考虑到一个不常发生并且发生后的解决开销很大的事件(如本章的死锁),反而是一个很好的复杂度与性能的折衷。

  相比之下,尽管该书后文提到的避免和解决死锁的方法比较有效,比如广为人知的银行家算法(P451~454),但实用性实在有限。

 

2.spooling的打印机仍然可能造成死锁(P454~455)

  虽然使用打印机对应的deamon进程唯一地与打印机交互、其他进程的打印任务仅仅是将需要打印的文件放入deamon进程指定的一个目录下,打印机这一设备不再会导致死锁;然而,这些待打印的文件是需要占用空间的,如果磁盘空间不足以容纳所有待打印的文件,仍然会造成死锁。

  习题2再次提到了这个情形。

 

课后习题选

29.Explain the differences between deadlock, livelock  and starvation.

译:

  解释死锁、活锁和饥饿的差别。

Answer:

  A deadlock occurs when a set of processes are blocked waiting for an event that only some other process in the set can cause. On the other hand, processes in a livelock are not blocked. Instead, they continue to execute checking for a condition to become true that will never become true. Thus, in addition to the resources they are holding, processes in livelock continue to consume precious CPU time. Finally, starvation of a process occurs because of the presence of other processes as well as a stream of new incoming processes that end up with higher priority that the process being starved. Unlike deadlock or livelock, starvation can terminate on its own, e.g. when existing processes with higher priority terminate and no new processes with higher priority arrive.

分析:

  一个进程的集合中,因等待这个集合的其他进程而阻塞时发生死锁。

  活锁发生时,进程并没有阻塞,它们只是继续检查一个条件是否为真,而这个条件永远不会变为真。因此,处于活锁状态的进程仍然会消耗CPU时间。

  饥饿是由于一直有更高优先级的进程到来,使得早到来的低优先级进程得不到服务。与前两者不同,饥饿状态可能会自己解除,比如当不再有高优先级进程到来时。

 

勘误

1.P451最末一段“Sec.3.4.1”应为“Sec.6.4.1”;

2.P463习题8,此题指的是Figure.6-7中的情形,原题并未说明这一点。

 

中文版勘误

1.P260,“因此可以通过先来先服务”这句原文中并没有逻辑关系,应该把因此删去,这句前面的逗号改为句号;

2.P260习题1,根据答案,“politics”应翻译成“政治”而非“策略”。

 

posted @ 2013-12-11 11:23  五岳  阅读(1916)  评论(0编辑  收藏  举报
回到顶部