Re: [理工] [OS] Dead Lock
※ 引述《mickeyha (M*schief)》之銘言:
: 洪逸 作業系統金寶典
: p.5-59
: 47.Consider a snapshit if the system as shown below. Upon the
: next request, P1 makes a request for ( 0 4 2 0) and is granted
: immediately. What is the minimum number of initial instances
: (i.e. the total number of instances before any [rpcess enters the
: system) for each resource type to make sure system still in a
: safe after P1's request is granted? (答案請以(a b c d) 方式表示)
: Allocation Max
: A B C D A B C D
: P0 0 0 1 2 0 1 1 2
: P1 1 0 0 0 1 7 5 0
: P2 1 3 5 4 2 4 5 6
: P3 0 4 3 2 0 7 5 2
: P4 0 0 1 4 0 6 5 6
------------------
2 7 10 12 <=原先的總Allocation
: Ans:
: Need
: A B C D
: P0 0 1 0 0
: P1 0 7 5 0
: P2 1 1 0 2
: P3 0 3 2 0
: P4 0 6 4 2
: 所以最少 = (3,12,12,12)
(0 4 2 0)被granted 所以 原先Available >= (0 4 2 0)
granted後 Need
A B C D
P0 0 1 0 0
P1 0 3 3 0
P2 1 1 0 2
P3 0 3 2 0
P4 0 6 4 2
而要讓整個process safe要找到一組不會造成deadlock的順序
先假設目前Available最小可為(0 0 0 0)
發現無法找出 safe sequence
只好讓P0先完成後釋放資源 (因為P0的B只差1)
所以目前 min Available至少要(0 1 0 0)
P0釋放資源後=>Available變為(0 1 1 2)
仍無法找到safe sequence 只好再釋放P2 (因為P2的A只差1)
所以目前 min Available至少要(1 1 0 0)
P2釋放資源後=>Available變為(2 3 5 2)
之後便可以找到safe sequence了
所以一開始的情況下 需要最少的resourse為
(2 7 10 12) + (0 4 2 0) + (1 1 0 0)=(3 12 12 12)
原先process 後來給P1 為了維持
擁有的資源 的資源 safe所加上去的資源
打的有點複雜 不過概念就是 先把P1已經granted的資源扣掉
然後從需求最少process的開始找safe sequence
假設剩下的Available為(0 0 0 0) 然後不夠的部分再一點一點加上去
加到發現某個地方不需要再加就可以有safe sequence
之後就把全部的資源free出來就是最開始所需的最少資源
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.6.23.64
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):