1. 程式人生 > >《現代作業系統》精讀與思考筆記 第六章 死鎖

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

  本系列博文是《現代作業系統(英文第三版)》(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”應翻譯成“政治”而非“策略”。

相關推薦

現代作業系統精讀思考筆記

  本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄理解和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。   課後習題的選擇標準:儘量避免單純的概念

現代作業系統精讀思考筆記 檔案系統

  本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄理解和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。   課後習題的選擇標準:儘量避免單純的概念

現代作業系統精讀思考筆記 輸入/輸出

Read performance: RAID levels 0, 2, 3, 4, and 5 allow for parallel reads to service one read request. However, RAID level 1 further allows two read re-ques

現代作業系統精讀思考筆記 多媒體

  第七章部分內容與前幾章內容關聯很大,比如程序排程、磁碟排程、檔案系統,而且多為實現細節,這裡不詳述。 1.幀數與閃爍(P476)   畫面動作的平滑性不是完全由每秒的幀數決定的,而是由每秒不同畫面的數目決定的。即使把20幀的視訊提高到80幀,而提高方式僅僅是把同樣一幀重複播放4次,那麼它仍然會不連

現代作業系統精讀思考筆記 記憶體管理

  本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄理解和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。   課後習題的選擇標準:儘量避免單純的概念

現代作業系統精讀思考筆記 多處理機系統 安全

  兩章雖然篇幅不小,不過都是以介紹為主,這部分不是我讀這本書的重點,看得比較粗略,筆記內容也不多,乾脆合二為一。 第八章 多處理機系統   正如章節名,這章主要是關於多處理機、多計算機、虛擬化、分散式系統。由於非單機的多處理器系統和網路通訊關係密切,還講了一些計算機網路的內容。 1.非阻塞send

現代作業系統精讀思考筆記 十至十三

  本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。   第十章是關於Linux的簡略介紹。一百頁的

現代作業系統

在計算機系統中有很多獨佔性的資源,在任意時刻中都只能被一個程序所佔有。 6.1 資源 在程序對裝置、檔案等取得了排他性訪問權的時候,有可能會產生死鎖。為了儘可能使關於死鎖的討論通用,我們把這類需要排他性使用的物件稱為資源。 6.1.1 可搶佔性資源和不可搶佔性資源 可

現代作業系統 習題

Chapter 06 死鎖 習題 知識點小記 從死鎖中恢復:1.利用搶佔恢復2.利用回滾恢復3.通過殺死程序恢復; 安全狀態:即使所有程序突然請求對資源的最大需求,也仍然存在某種排程次序能夠使得每一個程序執行完畢。 不安全狀態:任何分配資源實力的序列都無法保證工作的完成。

現代作業系統精讀思考筆記 第一 引論

  本系列博文是《現代作業系統(英文第三版)》(Modern Operating Systems,簡稱MOS)的閱讀筆記,定位是正文精要部分的摘錄和課後習題精解,因此不會事無鉅細的全面摘抄,僅僅根據個人情況進行記錄和推薦。由於是英文版,部分內容會使用英文原文。   課後習題的選擇標準:儘量避免單純的概念考察

《影象處理、分析機器視覺》(4版)閱讀筆記—— 分割Ⅰ

分割是處理影象資料前最重要的步驟之一,其主要目標是將影象劃分為與其中含有的真實世界的物體或區域強相關性的組成部分。 分割方法根據所使用的主要特徵可劃分為三組:第一組是有關影象或部分的全域性知識(global knowledge),這一般由影象特徵的直方圖來表達。第二部分是基

python資料分析挖掘實戰 拓展思考

企業偷漏稅識別模型 1、資料探索 偷漏稅企業分佈 首先生成data import pandas as pd inputfile = r'E:\Download\百度雲\圖書配套資料、程式碼\chapter6\拓展思考\tax.xls' data =

【資料分析 R語言實戰】學習筆記 引數估計R實現(上)

6.1點估計及R實現 6.1.1矩估計 R中的解方程函式: 函式及所在包:功能 uniroot()@stats:求解一元(非線性)方程 multiroot()@rootSolve:給定n個(非線性)方程,求解n個根 uniroot.all()@rootSolve:

《資料結構演算法分析》學習筆記--優先佇列

[toc] *** 佇列中的某些成員有更高的優先順序,需要優先執行或者儘快執行完畢 ## 6.1 模型 優先佇列允許至少有兩種操作的資料結構: 1. Insert: 插入元素,相當於入隊 2. DeleteMin: 找出、返回和刪除優先佇列中最小的元素,相當於出隊 ## 6.2 簡單實現 1. 連結串列

Redis 設計實現() -- 整數集合(intset)

相同 spa edi redis cnblogs 保存 空間 數值 一個數 概述 1.intset概述 2.intset實現 3.intset升級 intset概述 整數集合是Redis集合鍵的底層實現之一,當值都為整數時,redis就會選擇整數集合作為底層實現。 可以保

深入.NET平臺和C#編程筆記 繼承

私有 面向 重寫 不同 調用 student ted 類構造 步驟 第六章 繼承 1.理解繼承的概念 2.熟練使用繼承建立父類和子類 3.理解多態的概念 4.會重寫虛方法實現多態 1.繼承: 在C#中,如果一個類後面通過冒號又跟了另外一個類,那麽

mysql_塗抹筆記-- 字符,還有個集

base 。。 一個數 gen 系統 才有 創建 簡單 參數設置 第六章 字符,還有個集 字符集就是各種字符編碼的一個集合 字符集就是指符號和字符編碼的集合 UTF8MB4:支持UTF8能夠支持的字符,它全部支持,UTF8字符集不支持, 它也支持。 my

c++沈思錄 學習筆記 句柄(引用計數指針雛形?)

return 指針 使用權 -- play cpp open end 使用 一個簡單的point坐標類 class Point {public: Point():xval(0),yval(0){} Point(int x,int y):xval(x),yval(y)

《Java編程思想》筆記 訪問權限控制

互訪問 無法 this port 3.2 access 不能 外部 包名 1.編譯單元 一個 編譯單元即 .java 文件 內只能有一個 public 類 且該文件名必須與public 類名 完全一致。 編譯單元內也可以沒有public類 文件名可隨意。 2. 包:庫

CLR via C#學習筆記--靜態類

eth clas cme rop () 接口 bstr field icm 6.4 靜態類 有一些永遠不需要實例化的類,例如Console,Math等。 這些類只有static成員。事實上,這種類的唯一作用就是組合一組相關的成員。 例如Math類就定義了一組執行數學運算的方