天天看點

《現代作業系統》精讀與思考筆記 第六章 死鎖

本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄了解和課後習題精解,是以不會事無巨細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由于是英文版,部分内容會使用英文原文。

  最初在翻這本書的目錄時還在想,“死鎖”這個主題安排在“程序”主題下就可以了嘛,為何要單列出一章?與動辄近百頁的其他章節比,這一章隻有區區三十來頁而已,看似微不足道。本章開篇便告訴讀者,“死鎖”不僅在程序并行時會出現,在資料庫系統甚至是辦公室的裝置共用時也會出現,使用場景很廣泛,也難怪成為一個獨立章節。

  也正因适用範圍廣泛,而方法是抽象的,這章特别強調,在決定使用某種避免或消除死鎖的政策前,必須結合具體場景判斷是否适用。

  所謂的鴕鳥算法,就是對問題視若不見。雖然數學家認為根本不可接受,但考慮到一個不常發生并且發生後的解決開銷很大的事件(如本章的死鎖),反而是一個很好的複雜度與性能的折衷。

  相比之下,盡管該書後文提到的避免和解決死鎖的方法比較有效,比如廣為人知的銀行家算法(P451~454),但實用性實在有限。

  雖然使用列印機對應的deamon程序唯一地與列印機互動、其他程序的列印任務僅僅是将需要列印的檔案放入deamon程序指定的一個目錄下,列印機這一裝置不再會導緻死鎖;然而,這些待列印的檔案是需要占用空間的,如果磁盤空間不足以容納所有待列印的檔案,仍然會造成死鎖。

  習題2再次提到了這個情形。

譯:

  解釋死鎖、活鎖和饑餓的差别。

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”應翻譯成“政治”而非“政策”。

本文轉自五嶽部落格園部落格,原文連結:www.cnblogs.com/wuyuegb2312/p/3465852.html,如需轉載請自行聯系原作者

繼續閱讀