40
7.1 Operating System Concepts 第第第 第第 系系系系 系系系系系 系系系系系系系 系系系系系 (Deadlock Prevention) 系系系系系 (Deadlock Avoidance) 系系系系系 (Deadlock Detection) 系系系系系系 系系系系系系系系系

7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

  • View
    280

  • Download
    7

Embed Size (px)

Citation preview

Page 1: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.1Operating System Concepts

第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測 (Deadlock Detection) 從死結中恢復 死結處理的合成方法

Page 2: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.2Operating System Concepts

死結問題 一組 blocked 行程集合中,每個行程都已握有一個系統資源,而且等待另外的一個已被集合中另一個行程擁有的資源 .

範例 1系統有兩個磁帶機 .行程 P1 and P2 中,每一個行程各自有一個磁帶機,而且每一個都還需要對方的磁帶機 .

範例 2 初始值為 1 的訊號 A 和 B.

» P0 P1» wait (A); wait(B)» wait (B); wait(A)

Page 3: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.3Operating System Concepts

過橋範例

單向的流量 . 一座橋的區段可以看做是一個資源 . 假使死結發生,可以解決的方法就是一台車退後

( 預先取得資源及資源回復 , preempt and rollback).

一個死結的發生,可能有幾台車都必須退回至原位 .

有可能發生 Starvation.

Page 4: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.4Operating System Concepts

系統模型 資源型態有 R1, R2, . . ., Rm

CPU 週期 , 記憶體空間 , 輸出入設備 每一種資源型態 Ri有 Wi 實體 .

每個行程用下列的方式使用資源 :需求提出 (request) 使用 (use) 釋放 (release)

Page 5: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.5Operating System Concepts

死結特性 互斥 (mutual exclusion): 一次只能有一個行程使用一

個資源 . 擁有和等待 (Hold and wait): 有一個行程至少握有一

個資源,而該行程又正等待其他行程的資源 . 不可搶奪 (No preemption): 一個資源只有在擁有它的

行程完成工作後 , 才可以被自由地釋放出來 . 循環等候 (Circular wait): 存在一個處於等待狀態的行

程集合 {P0, P1, …, Pn} 使得 P0正等待一個正被 P1所擁有的一個資源 , 而 P1又正等待一個被 P2所擁有的一個資源 , …, Pn–1又正等待一個被 Pn所擁有的一個資源 , 而Pn又正等待一個被 P0所擁有的一個資源 .

假使下列四個條件同時發生,死結就會發生 .

Page 6: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.6Operating System Concepts

資源配置圖

V 被切割成兩種型態 :P = {P1, P2, …, Pn}, 包含系統所有行程的集合 .

R = {R1, R2, …, Rm}, 包含系統所有資源型態 .

需求邊線 – 有向邊線 Pi Rj

指定邊線 –有向邊線 Rj Pi

一個端點集合 V 及邊線集合 E.

Page 7: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.7Operating System Concepts

資源配置圖 (Cont.)

行程

有四個實體的資源型態

行程 Pi 提出需要資源型態 Rj實體的需求

Pi 正擁有資源型態 Rj實體Pi

Pi

Rj

Rj

Page 8: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.8Operating System Concepts

資源配置圖範例

Page 9: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.9Operating System Concepts

具有死結的資源配置圖

Page 10: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.10Operating System Concepts

有環狀但無死結的資源配置圖

Page 11: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.11Operating System Concepts

觀察到的基本事實 假使資源配置圖無環狀 無死結 .

假使資源配置圖含一個環狀假使每一個資源型態只有一個實體 , 死結發生 .假使一個資料型態有多個實體 , 死結可能會發生 .

Page 12: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.12Operating System Concepts

處理死結的方法 確定系統絕不會進入死結狀態 .

允許系統進入死結狀態 , 然後從死結中恢復 .

忽視這個問題 , 而且假裝不會在系統發生 used by most operating systems, including UNIX.

Page 13: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.13Operating System Concepts

死結預防 互斥 – 對共享的資源不要求 ; 但是非共享資源就必須要求互斥 .

擁有和等待– 必須保證每當一個行程需要一個資源時,他就不得擁有其他資源 .要求行程在開始執行之前必須提出以及配置到所有資源,或者是說允許行程提出資源需求只有在他沒有任何資源的前提下 .

低資源使用率 ; 可能有 starvation.

限制可能造成死結的需求

Page 14: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.14Operating System Concepts

死結預防 (Cont.)

不可搶奪 (No Preemption)–假使一個行程正擁有一些資源,又需要其他不可以馬上獲得的資源 , 然後該行程手中所有的資源都要釋放出來 .

預先取得的資源加入到正在等待資源的行程中 .行程可以被重新啟動的時候,只有在他可獲得舊資源的同時,也可獲得他正提出需求的新資源 .

循環等待– 強迫所有資源型態有一個 total ordering, 而且要每一個行程的資源需求必須是一個遞增的數列方式提出 . F(Rj)>F(Ri)

Page 15: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.15Operating System Concepts

死結避免 (Deadlock Avoidance)

最簡單與最有用的模型是要求每個行程要提出他可能用到的最大資源個數 .

死結避免演算法動態檢驗資源配置狀態,來確定不會進入一個循環等待狀態 .

資源配置狀態是經由可用及已配置資源的數目所定義 , 還有所有行程的最大需求數 .

要求系統有一些額外當時的可用資訊 .

Page 16: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.16Operating System Concepts

安全狀態 (Safe State)

當一個行程需求到一個可用的資源,系統必須決定當時的配置動作會不會讓系統處於一個安全狀態 .

假使所有行程存在著一個安全序列,這時可以說系統處於安全狀態 .

如果序列 <P1, P2, …, Pn> 是安全,那對於每一個 Pi, Pi 可以提出資源需求仍可以被現在所有可用的資源加上所有被 Pj擁有的資源所滿足 (j<i),. If Pi 所需要的資源不能馬上可用,然後 Pi可以等待直到所有

Pj結束 .

當 Pj 結束 , Pi 可以獲得需要的資源,執行,然後釋放配置資源,接著結束 .

當 Pi 結束 , Pi+1 可以獲得他所需要的資源,以此類推 .

Page 17: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.17Operating System Concepts

基本事實 假使系統是處於安全狀態 無死結 .

假使系統是處於非安全狀態 可能有死結 .

死結避免 確定系統永遠不會進入一個非安全狀態 .

Page 18: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.18Operating System Concepts

安全 , 非安全 , 死結狀態

Page 19: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.19Operating System Concepts

資源配置圖演算法 主張邊線 (claim edge)Pi Rj 表示行程 Pi 可以提出對於資源 Rj的需求,邊線是用 dashed line.

當行程真正提出資源需求時,主張邊線 (claim edge) 會變成需求邊線 (request edge).

當資源被一個行程所釋放,配置邊線(assignment edge) 會變成主張邊線 .

系統中的資源必須事先定義出 .

Page 20: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.20Operating System Concepts

死結避免的資源配置圖

Page 21: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.21Operating System Concepts

資源配置圖的非安全狀態

Page 22: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.22Operating System Concepts

(銀行家演算法 )Banker’s Algorithm

多個相同的資源實體 .

每一個行程必須先宣稱需要資源的最大量 .

當行程要求某些資源時,系統便判斷這樣的配置是否會導致系統進入不安全狀態。

使用安全演算法來測試系統是否處在安全狀態。 使用資源要求演算法來決定是否允許資源的要求。 當一個行程得到他想要的所有資源,行程必須在有限的時間內要歸還它們 .

Page 23: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.23Operating System Concepts

銀行家演算法的資料結構

Available: 長度為 m的一個陣列 . 假使available [j] = k,表示有 k個相同 Rj資源可用 .

Max: 二維 n x m 陣列 . 假使 Max [i,j] = k,表示行程 Pi可以提出屬於資源型態 Rj的資源數量最多為k 個 .

Allocation:二維 n x m陣列 . 假使 Allocation[i,j] = k,表示行程 Pi 正配置有 k個屬於型態 Rj的資源 .

Need: 二維 n x m陣列 . 假使 Need[i,j] = k,表示行程 Pi 再需要 k個屬於型態 Rj 的資源來完成他的工作 .

Need [i,j] = Max[i,j] – Allocation [i,j].

定義 n 是行程的數量 , 以及 m 是資源的型態數量 .

Page 24: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.24Operating System Concepts

安全演算法 (Safety Algorithm)

1.Work 及 Finish分別是長度為 m 及 n 的陣列 , 它們的起始值 :

Work = Available

Finish [i] = false for i - 1,3, …, n. (processes)2.找到一個 i 使得下面兩個條件同時成立 :

(a) Finish [i] = false

(b) Needi Work

假使沒有這樣的 i 存在 ,跳到第四步執行 .

3. Work = Work + Allocationi

Finish[i] = true跳到第二步執行 .

4. 假使所有 i 都使得 Finish [i] 都是 true,表示系統處於安全狀態 .

Page 25: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.25Operating System Concepts

對於行程 Pi資源需求演算法(Resource-Request Algorithm)

Requesti是行程 Pi的需求陣列 . 假使 Requesti[j] = k 表示行程 Pi 需要資源型態 Rj的資源 k 個 .

1. 假使 Requesti Needi 跳到第二步 . 否則 , 提出錯誤狀況 , 因為行程已超越他最大的宣告量 .

2. 假使 Requesti Available, 就跳到第三步 .否則行程 Pi

必須等待 , 因為資源不夠 .

3. 假設先將資源配置給 Pi , 然後將下列狀態修改 :

Available = Available - Requesti;

Allocationi = Allocationi + Requesti;

Needi = Needi – Requesti;

假使安全 資源將真正配置給 Pi.

假使不安全 Pi必須等待 , 而且舊的資源配置狀態將還原

Page 26: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.26Operating System Concepts

銀行家演算法範例 有五個行程從 P0 through P4; 有三種資源型態:

A 有 10 個 ,B 有 5 個 ,C 有 7 個 .

在時間 T0的系統狀態

Page 27: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.27Operating System Concepts

銀行家演算法範例 (Cont.)陣列的內容中 Need 被定義成 Max – Allocation.

系統是處於安全狀態因為序列 < P1, P3, P4, P2, P0> 滿足安全標準 .

Page 28: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.28Operating System Concepts

P1 Request (1,0,2) (Cont.)

檢查 Request Available 是否成立 ( 也就是 (1,0,2) (3,3,2) true).

Allocation Need AvailableA B C A B C A B C

P0 0 1 0 7 4 3 2 3 0

P1 3 0 2 0 2 0

P2 3 0 2 6 0 0

P3 2 1 1 0 1 1

P4 0 0 2 4 3 1

執行安全演算法後發現執行序列 <P1, P3, P4, P0, P2> 滿足安全標準 .

這樣情形下, P4再提出的需求向量 (3,3,0) 可以被系統允許嗎 ?

如果換成是 P0提出的需求向量 (0,2,0) 可以被系統允許嗎 ?

Page 29: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.29Operating System Concepts

死結偵測 允許系統進入死結狀態

偵測演算法

恢復機制 (Recovery scheme)

Page 30: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.30Operating System Concepts

每個資源只有單一的實體 維護一個 wait-for graph

節點都是行程 .Pi Pj 表示 Pi 正等待著 Pj.

定時呼叫一個演算法來尋找圖中可能的迴路(cycle).

一個演算法來偵測有向圖內的迴路是需要 O(n2 )的操作 , 其中 n 是有向圖中的節點個數 .

Page 31: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.31Operating System Concepts

資源配置圖與 Wait-for Graph

Resource-Allocation Graph Corresponding wait-for graph

Page 32: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.32Operating System Concepts

一個資源型態有多個實體 Available: 一個長度為 m的向量表示每個資源型態的可用資源個數 .

Allocation: 一個 n x m陣列定義每個資源型態現在配置給每個不同行程的資源數目 .

Request: 一個 n x m陣列表示現在每個行程對於資源的需求量 . 假使 Request [i][j] = k, 然後行程 Pi 正需要再 k 個屬於資源 Rj的資源 .

Page 33: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.33Operating System Concepts

偵測演算法

1.Work 及 Finish 分別是長度為 m及 n 的向量 ,初始值是 :(a) Work = Available

(b) For i = 1,2, …, n, if Allocationi 0, 表示 Finish[i] = false;否則 Finish[i] = true.

2.找到一個 i 使得下列式子成立 :(a) Finish[i] == false

(b) Requesti Work

假使找不到這樣的 i 存在 ,跳到第四步執行 .

Page 34: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.34Operating System Concepts

Detection Algorithm (Cont.)

3.Work = Work + Allocationi

Finish[i] = true跳到第二步 .

4.假使有一個 i(1 i n) 使得 Finish[i] == false, 表示這個系統是在死結狀態 . 也就是說 , 假使 Finish[i] == false 也就是 Pi 有死結 .

演算法需要 O(m x n2)運算來偵測系統是否處於死結狀態 .

Page 35: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.35Operating System Concepts

偵測演算法的範例五個行程 P0 through P4; 有三個資源型態: A 有 7 個資源

實體 ,B 有 2 個資源實體 , 而且 C 有 6 個資源實體 .

在時間 T0的系統狀態 :

Allocation Request Available

A B C A B C A B C

P0 0 1 0 0 0 0 0 0 0

P1 2 0 0 2 0 2

P2 3 0 3 0 0 0

P3 2 1 1 1 0 0

P4 0 0 2 0 0 2

執行序列 <P0, P2, P3, P1, P4> 將使得所有 Finish[i] = true.

Page 36: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.36Operating System Concepts

Example (Cont.)

假使 P2想多要一個型態為 C 的資源 .

Request

A B C

P0 0 0 0

P1 2 0 2

P2 0 0 1

P3 1 0 0

P4 0 0 2

系統狀態 ?可以獲得被行程 P0所持有的資源,但是所獲得的資源不足以滿足其

他行程的需求 .

死結存在 , 包含有行程 P1, P2, P3, and P4.

Page 37: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.37Operating System Concepts

偵測演算法的用法 何時及多久使用演算法要看 :

死結可能會多久發生一次 ?多少行程將需要回復 (rolled back)?

每一個分離的迴路要有一個行程進行回復

假使偵測演算法在任意的時間點被呼叫 , 如果在資源圖中有許多個迴路 , 這將使得我們無法去判斷這麼多進入死結的行程中是誰引起死結的 .

Page 38: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.38Operating System Concepts

從死結中恢復 : 結束行程 結束所有進入死結的行程 .

一次結束一個行程 , 一直到迴路被消除為止 .

應該以什麼樣的順序來取消行程 ?行程的優先權 .行程的計算已經進行多久了 , 還有多久要完成 .行程所使用的資源 .行程還需要的資源來完成它的工作 .需要多少行程要被結束 . 行程是互動的還是批次型的 ?

Page 39: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.39Operating System Concepts

從死結中恢復 : 資源搶奪Resource Preemption

選擇一個犧牲者–減低成本 .

退回原處 (Rollback )– 回到某個安全狀態 , 重新將行程回復到該狀態 .

枯竭 (Starvation)– 某個行程可能一直被當作是犧牲者 , 包含了成本因素考量下的回復數量(number of rollback).

Page 40: 7.1 Operating System Concepts 第七章 死結 系統模型 死結的特性 處理死結的方法 死結的預防 (Deadlock Prevention) 死結的避免 (Deadlock Avoidance) 死結的偵測

7.40Operating System Concepts

死結處理的組合型方法 將三個基本方法結合

prevention avoidanceDetection

允許系統中每一個資源有最佳化的方法可使用 .

將資源切割成具有層次的不同等級的集合 .

在這些不同等級的集合中使用最適用的技術來處理死結問題 .