本系列博文是《現代操做系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄理解和課後習題精解,所以不會事無鉅細的全面摘抄,僅僅根據我的狀況進行記錄和推薦。因爲是英文版,部份內容會使用英文原文。html
課後習題的選擇標準:儘可能避免單純的概念考察(如:What is spooling?)或者簡單的數值計算,而是可以引發思考加深理解的題目。爲了保證解答的正確性,每道題都會附上原書解答,而中文部分會適當加入本身的看法。原書答案下載地址(需註冊)算法
最初在翻這本書的目錄時還在想,「死鎖」這個主題安排在「進程」主題下就能夠了嘛,爲什麼要單列出一章?與動輒近百頁的其餘章節比,這一章只有區區三十來頁而已,看似微不足道。本章開篇便告訴讀者,「死鎖」不只在進程並行時會出現,在數據庫系統甚至是辦公室的設備共用時也會出現,使用場景很普遍,也難怪成爲一個獨立章節。數據庫
也正因適用範圍普遍,而方法是抽象的,這章特別強調,在決定使用某種避免或消除死鎖的策略前,必須結合具體場景判斷是否適用。性能
所謂的鴕鳥算法,就是對問題視若不見。雖然數學家認爲根本不可接受,但考慮到一個不常發生而且發生後的解決開銷很大的事件(如本章的死鎖),反而是一個很好的複雜度與性能的折衷。spa
相比之下,儘管該書後文提到的避免和解決死鎖的方法比較有效,好比廣爲人知的銀行家算法(P451~454),但實用性實在有限。操作系統
雖然使用打印機對應的deamon進程惟一地與打印機交互、其餘進程的打印任務僅僅是將須要打印的文件放入deamon進程指定的一個目錄下,打印機這一設備再也不會致使死鎖;然而,這些待打印的文件是須要佔用空間的,若是磁盤空間不足以容納全部待打印的文件,仍然會形成死鎖。翻譯
習題2再次提到了這個情形。htm
譯:進程
解釋死鎖、活鎖和飢餓的差異。事件
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」應翻譯成「政治」而非「策略」。