【操作系統】避免死鎖(銀行家算法)

1、考慮某一系統,他有4類資源R1,R2,R3,R4,有5個併發進程P0,P1,P2,P3,P4。各進程的最大資源需求、已分配的資源矩陣和系統當前資源剩餘向量如下圖所示。請按銀行家算法回答下列問題:

⑴ 計算由各進程的剩餘請求向量組成的矩陣。

⑵ 系統當前是處於安全狀態嗎?

⑶ 當進程P4申請的資源分別爲(0,2,0,2)時,系統能立即滿足嗎?

  分配矩陣(Allocation) 最大需求量(Max) 剩餘請求向量(Need)
 R1 R2 R3 R4  R1 R2 R3 R4  R1 R2 R3 R4
P0 0 0 1 2 0 0 1 2 0 0 0 0
P1 1 0 0 0 1 7 5 0 0 7 5 0
P2 1 3 5 4 2 3 5 6 1 0 0 2
P3 0 6 3 2 0 6 5 2 0 0 2 0
P4 0 0 1 4 0 6 5 6 0 6 4 2

注:剩餘請求向量 = Max - All0cation

 

(2)判斷系統是否安全,只要檢查系統剩餘資源向量(可利用的資源)是否能在各進程的剩餘請求向量中能找到一個安全序列,分析如下:

當前剩餘資源向量(可利用資源):

R1 R2 R3 R4
1 5 0 2
進程資源情況 Work(剩餘資源都給某個進程用) 剩餘請求向量(Need) 分配矩陣(Allocation) Work+Allocation Finish
 R1 R2 R3 R4  R1 R2 R3 R4  R1 R2 R3 R4 R1 R2 R3 R4
P0 1 5 0 2 0 0 0 0 0 0 1 2 1 5 1 4 true
P2 1 5 1 4 1 0 0 2 1 3 5 4 2 8 6 8 true
P1 2 8 6 8 0 7 5 0 1 0 0 0 3 8 6 8 true
P3 3 8 6 8 0 0 2 0 0 6 3 2 3 14 9 10 true
P4 3 14 9 10 0 6 4 2 0 0 1 4 3 14 10 14 true

在T0時刻存在着一個安全序列{P0,P2,P1,P3,P4},故系統是安全的。

(3)當P4申請資源Request4(0,2,0,2)時;

  1. Request4(0,2,0,2)<= Need(0,6,4,2)
  2. Request4(0,2,0,2)<= Available(1,5,0,2)
  3. 系統先假定可爲P4分配資源,並修改向量值,如圖所示
  4. 再利用安全性算法檢查此時系統是否安全
  分配矩陣(Allocation) 最大需求量(Max) 剩餘請求向量(Need)
 R1 R2 R3 R4  R1 R2 R3 R4  R1 R2 R3 R4
P0 0 0 1 2 0 0 1 2 0 0 0 0
P1 1 0 0 0 1 7 5 0 0 7 5 0
P2 1 3 5 4 2 3 5 6 1 0 0 2
P3 0 6 3 2 0 6 5 2 0 0 2 0
P4 0 2 1 6 0 6 5 6 0 4 4 0

當前剩餘資源向量(可利用資源):

R1 R2 R3 R4
1 3 0 0
進程資源情況 Work(剩餘資源都給某個進程用) 剩餘請求向量(Need) 分配矩陣(Allocation) Work+Allocation Finish
 R1 R2 R3 R4  R1 R2 R3 R4  R1 R2 R3 R4 R1 R2 R3 R4
P0 1 3 0 0 0 0 0 0 0 0 1 2 1 3 1 2 true
P2 1 3 1 2 1 0 0 2 1 3 5 4 2 6 6 6 true
P3 2 6 6 6 0 0 2 0 0 6 3 2 2 12 9 8 true
P1 2 12 9 8 0 7 5 0 1 0 0 0 3 12 9 8 true
P4 3 12 9 8 0 4 4 0 0 2 1 6 3 14 10 14 true

由所進行的安全性算法檢查得知,可以找到一個安全序列{P0,P2,P3,P1,P4},因此,系統是安全的,可以立即將P4所申請的資源分配給它。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章