[OS] Operating System(8): Deadlocks
๐ ์ด์์ฒด์ ์ ๊ณต ์์ ์ ๋ฆฌ
System Model
๋ฐ๋๋ฝ์ ๋ํด ์์๋ณด๊ธฐ ์ ์ ์ด์์ฒด์ ์ ๋ฆฌ์์ค๊ฐ ์ด๋ป๊ฒ ๊ด๋ฆฌ๋๋์ง ์์๋ณด์
์์คํ ์ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ฆฌ์์ค๋ก ๊ตฌ์ฑ๋จ
- ๋ฆฌ์์ค ํ์ : $R_1, R_2, โฆ, R_m$ (์: CPU cycle, memory space, I/O device)
- ๊ฐ ๋ฆฌ์์ค ํ์ $R_i$๋ $W_i$๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๋ค.
โ ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ 3๊ฐ์ง ๋จ๊ณ:
- request
- use
- release
Deadlock in Multithreaded Application
์ด์ ์ค์ deadlock์ด ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง ์ฝ๋๋ฅผ ํตํด ์ดํด๋ณด์
1
2
3
4
5
pthread_mutex_t first_mutex;
pthread_mutex_t second_mutex;
pthread_mutex_init(&first_mutex, NULL);
pthread_mutex_init(&second_mutex, NULL);
๐ deadlock ๋ฐ์ ์๋๋ฆฌ์ค:
- Thread 1์ด
first_mutex
๋ฅผ ํ๋ - Thread 2๊ฐ
second_mutex
๋ฅผ ํ๋ - Thread 1์ด
second_mutex
๋ฅผ ๊ธฐ๋ค๋ฆผ (Thread 2๊ฐ ๋ณด์ ์ค) - Thread 2๊ฐ
first_mutex
๋ฅผ ๊ธฐ๋ค๋ฆผ (Thread 1์ด ๋ณด์ ์ค) โ ๋ฌดํ ๋๊ธฐ ์ํ ๋ฐ์!
deadlock์ resource allocation graph
- thread_one์ด
first_mutex
๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ํ๋กsecond_mutex
๋ฅผ ์์ฒญ - thread_two๊ฐ
second_mutex
๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ํ๋กfirst_mutex
๋ฅผ ์์ฒญ deadlock์ด ๋ฐ์ํ ์ ์์!
- deadlock: ์ค๋ ๋๋ค์ด ์์ ํ ๋ฉ์ถ ์ํ(์๋ฌด๊ฒ๋ ์งํ X)
- livelock: ์ค๋ ๋๊ฐ ์ ์ฒด๋ ์ํ๋ ์๋์ง๋ง ๊ณ์ ์๋ํด๋ ์งํ์ด ์ ๋๋ ๊ฒฝ์ฐ
- ex: ๋ง์ฃผ ์ค๋ ๋ ์ฌ๋์ด ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ํผํ ๋, CSMA/CD
Deadlock Characterization
โ Deadlock ๋ฐ์ ํ์์กฐ๊ฑด:
- Mutual exclusion:
- ํ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์์ ์ฌ์ฉ ๊ฐ๋ฅ โ ์ ์ด๋ ํ๋ ์์ ๊ณต์ ๋ถ๊ฐ!
- Hold and wait:
- ์ต์ํ ํ๋์ ์์์ ๋ณด์ ํ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ณด์ ํ ์ถ๊ฐ ์์์ ๊ธฐ๋ค๋ ค์ผํจ
- No preemption:
- Task๊ฐ ์๋ฃํ ํ ์์์ release
- Circular wait:
- ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ํ์ ์ผ๋ก ๊ธฐ๋ค๋ฆฌ๋ ๊ตฌ์กฐ(ex: ์์ฌํ๋ ์ฒ ํ์ ๋ฌธ์ )
4๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๊ณ ๋ฌด์กฐ๊ฑด deadlock์ ์๋์ง๋ง, deadlock์ผ ๋ 4๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํจ!
Resource-Allocation Graph
P = {Pโ, Pโ, ..., Pโ}
= ์์คํ
๋ด ์ค๋ ๋/ํ๋ก์ธ์ค ์งํฉ R = {Rโ, Rโ, ..., Rโ}
= ์์คํ
๋ด ๋ฆฌ์์ค ํ์
์งํฉ
- $P_i$ โ $R_j$ = requset edge
- $R_j$ โ $P_j$ = assignment edge
$T_1$: $R_2$ ์ธ์คํด์ค 1๊ฐ ๋ณด์ , $R_1$ ์์ฒญ
$T_2$: $R_1$๊ณผ $R_2$ ์ธ์คํด์ค ๊ฐ 1๊ฐ ๋ณด์ , $R_3$ ์์ฒญ
$T_3$: $R_3$ ์ธ์คํด์ค 1๊ฐ ๋ณด์
- ๊ฒฐ๊ณผ: No cycle โ No deadlock
Tโ โ Rโ โ Tโ โ Rโ โ Tโ โ Rโ โ Tโ : cycle ์กด์ฌ!!!
- deadlock โ cycle
- nocycle โ nodeadlock
- cycle โ deadlock/nodeadlock
cycle โ nodeadlock ์์
- single instacne(Ri์ ๋ฆฌ์์ค๊ฐ 1๊ฐ)์ธ ๊ฒฝ์ฐ
deadlock โ cycle
- multiple instacne(Ri์ ๋ฆฌ์์ค๊ฐ ์ฌ๋ฌ๊ฐ)์ธ ๊ฒฝ์ฐ
deadlock โ cycle
cycle โ nodeadlock
Methods for Handling Deadlocks
โ deadlock์ ํผํ๋ ๋ฐฉ๋ฒ 4๊ฐ์ง:
- Deadlcok prevention
- ํ์์กฐ๊ฑด 4๊ฐ ์ค ์ ์ด๋ ํ๋ ์ด์ ์ฐจ๋จ
- Deadlock avoidance
- ํ์ํ ์์์ ๋ํ ์ ๋ณด๋ฅผ ์ด์ฉ(๊ฐ๊ฐ์ ์ค๋ ๋๋ค์ด ์ผ๋ง๋ ๋ง์ ์์์ด ํ์ํ์ง)
- Deadlock detection
- Deadlock ignore
- deadlock์ด ๋ฐ์ํ์ง ์์์ ๊ฐ์ ํ๊ณ ๋ฌด์
- ๋๋ถ๋ถ์ OS๊ฐ ์ฌ์ฉ โ ๋น์ฉ์ด ์ ๋ ดํ๊ธฐ ๋๋ฌธ!
Deadlock Prevention
๐Deadlock Prevention: deadlock์ 4๊ฐ์ง ํ์์กฐ๊ฑด ์ค ์ ์ด๋ ํ ๊ฐ ์ด์ ๋ง์กฑ ๋ชปํ๊ฒ ์ฐจ๋จ
- Mutual Exclusion:
- ๋ฐฉ๋ฒ: ๊ณต์ ๊ฐ๋ฅํ ์์ ์ฌ์ฉ
- ๋ฌธ์ : ๊ณต์ ์์์ด ๋ง์์ ์ด ์กฐ๊ฑด์ ๋ง๋ ๊ฒ์ ์ด๋ ค์!
- Hold and wait:
- ์์ํ๊ธฐ ์ ์ ํ์ํ ์์์ ํ๊บผ๋ฒ์ ํ ๋น
- ์ก๊ณ ์๋ ์์์ด ์์ ๋๋ง ์์์ ์์ฒญ
- ๋ฌธ์ : ์์ ํ์ฉ๋ โ, starvation ๋ฐ์ ๊ฐ๋ฅ
- No preemption
- ์์ ํ ๋น์ด ๋ถ๊ฐ๋ฅํ๋ฉด ๊ฐ์ง๊ณ ์๋ ์์์ ๋ค ๋ด๋์
- ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค์ ์์์ ๋ฐ๋ฉํ๊ฒ ํจ
- ์์์ ๋ค ํ ๋น ๋ฐ์ ์ ์์ ๋ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํจ
- Circular Wait
- ๊ฐ์ฅ ํ์ค์ ์ธ ๋ฐฉ๋ฒ
- ์์์ ์๋ฒ ๋ถ์ฌ, ๊ทธ ์์๋๋ก ์์์ ํ ๋นํจ
- 1 โ 2 ๋ ๊ฐ๋ฅํ์ง๋ง ๊ทธ ๋ฐ๋๋ X
Circular Wait
- ๊ฐ๊ฐ์ ๋ฆฌ์์ค์ ๊ณ ์ ํ ๋ฒํธ๋ฅผ ๋ถ์ฌ
- ๊ทธ ๋ฒํธ ์์๋๋ก ์์์ ํ ๋น
Deadlock Avoidance
๐Deadlock Avoidance: deadlock์ ํํผํ๊ธฐ ์ํด์ ์์ ํ ๋น์ ์ ์ดํ๋ ๋ฐฉ๋ฒ
- ๊ฐ ํ๋ก์ธ์ค๊ฐ ํ์๋ก ํ๋ ์์์ Maximum number๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธํด์ผํจ(a priori information)
Safe State
์ด๋ ํ task๋ฅผ ๋๋ด๊ธฐ ์ํด โํ์ํโ ์์์ ๊ฐ์๋ฅผ ๋ฏธ๋ฆฌ ํ์ ํจ ํ์ง๋ง ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ๋๋ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ deadlock ๋ฐ์ ๊ฐ๋ฅํจ ์๋๋ฉด ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ๋งํผ ์์์ ๋๋ ๊ฐ์ง์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค ๋ชจ๋๊ฐ ํ์ํ ์์์ ์ํด ๋๊ตฐ๊ฐ๊ฐ ๋ฐ๋ฉํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆผ
๊ทธ๋์ ํ๋์ ํ๋ก์ธ์ค๊ฐ ์์
์ด ๋๋๊ณ ์์ ๋ฐ๋ฉ โ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์ ๋ฐ๋ฉ
์ด ์ํ์ด Safe state์ด๋ค
๐Safe state: ์์คํ ์ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ํ์ํ ์์์ ์ฌ์ฉํ ์ ์๋ ์คํ์์๊ฐ ์กด์ฌํ๋ ์ํ
safe state โ no deadlocks
unsafe state โ possibility of deadlocks
์์คํ ์ด ํญ์ ์์ ํ ์ํ์ ๋จ์ ์๋๋ก ์ ์ง ์ฆ, ์์คํ ์ด ์์ ํ ์ํ๋ฅผ ์ ์งํ ์ ์์๋๋ง ์์์ ๊ณต์
Avoidance Algorithms
- Single instance์ ๊ฒฝ์ฐ
- resource-allocation graph ์ฌ์ฉ
- Multiple instance์ ๊ฒฝ์ฐ
- Bankerโs Algorithm ์ฌ์ฉ
Resource-allocation Graph Scheme
T2 โ R2 ํ ๋นํด๋ no cycle: ํ ๋น ํ์ฉ!
Bankerโs Algorithm
๋ค์ค ์ธ์คํด์ค ์์์์ deadlock์ ํํผํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ ์์์ ์ต๋์น๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธ
- ์์ ์์ฒญ ์๋ง๋ค ํ ๋น ํ safe state ์ ์ง ์ฌ๋ถ๋ฅผ ๊ฒ์ฌ
โ ํต์ฌ ์๋ฆฌ:
- ํ๋ก์ธ์ค๊ฐ ์์์ ์์ฒญํ๋ฉด ์ผ์์ ์ผ๋ก ํ ๋นํด๋ณธ ํ ์์ ์ํ ๊ฒ์ฌ
- ์์ ํ๋ฉด ํ ๋น, ๋ถ์์ ํ๋ฉด ๊ฑฐ๋ถํ๊ณ ๋๊ธฐ
- ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ ์์์ ํ๋ณดํ๋ฉด ์ ํ ์๊ฐ ๋ด์ ๋ฐ๋์ ๋ฐ๋ฉ
๐พ๋ฐ์ดํฐ ๊ตฌ์กฐ:
n
: ํ๋ก์ธ์ค ๊ฐ์m
: resource type ๊ฐ์- Available
- ํฌ๊ธฐ:
m
(์์ ํ์ ์) - ์๋ฏธ:
Available[j] = k
โ ์์ ํ์ Rj๊ฐ k๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
- ํฌ๊ธฐ:
- Max
- ํฌ๊ธฐ:
n x m
- ์๋ฏธ:
Max[i,j] = k
โ ํ๋ก์ธ์ค Pi๊ฐ ์์ ํ์ Rj๋ฅผ ์ต๋ k๊ฐ๊น์ง ์์ฒญ ๊ฐ๋ฅ
- ํฌ๊ธฐ:
- Allocation
- ํฌ๊ธฐ:
n x m
- ์๋ฏธ:
Allocation[i,j] = k
โ ํ๋ก์ธ์ค Pi๊ฐ ํ์ฌ ์์ ํ์ Rj๋ฅผ k๊ฐ ํ ๋น๋ฐ์
- ํฌ๊ธฐ:
- Need
- ํฌ๊ธฐ:
n x m
- ์๋ฏธ:
Need[i,j] = k
โ ํ๋ก์ธ์ค Pi๊ฐ ์์ ์๋ฃ๋ฅผ ์ํด ์์ ํ์ Rj๋ฅผ k๊ฐ ๋ ํ์ - ๊ณ์ฐ:
Need[i,j] = Max[i,j] - Allocation[i,j]
- ํฌ๊ธฐ:
Safety Algorithm
1๋จ๊ณ: ์ด๊ธฐํ
1
2
Work = Available (์ฌ์ฉ ๊ฐ๋ฅํ ์์ ๋ณต์ฌ)
Finish[i] = false (๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ๋ฏธ์๋ฃ๋ก ์ค์ )
2๋จ๊ณ: ์๋ฃ ๊ฐ๋ฅํ ํ๋ก์ธ์ค ์ฐพ๊ธฐ
1
2
3
4
5
๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ก์ธ์ค i ์ฐพ๊ธฐ:
(a) Finish[i] = false (์์ง ์๋ฃ๋์ง ์์)
(b) Need_i โค Work (ํ์ํ ์์์ด ํ์ฌ ๊ฐ์ฉ ์์๋ณด๋ค ์ ๊ฑฐ๋ ๊ฐ์)
์กฐ๊ฑด์ ๋ง์กฑํ๋ i๊ฐ ์์ผ๋ฉด โ 4๋จ๊ณ๋ก
3๋จ๊ณ: ์์ ํ์ ์๋ฎฌ๋ ์ด์
1
2
3
Work = Work + Allocation_i (ํ๋ก์ธ์ค i ์๋ฃ ํ ์์ ํ์)
Finish[i] = true (ํ๋ก์ธ์ค i ์๋ฃ ํ์)
2๋จ๊ณ๋ก ๋์๊ฐ๊ธฐ
4๋จ๊ณ: ๊ฒฐ๊ณผ ํ์
1
2
๋ชจ๋ i์ ๋ํด Finish[i] = true์ด๋ฉด โ ์์ ์ํ
๊ทธ๋ ์ง ์์ผ๋ฉด โ ๋ถ์์ ์ํ
Resource-request Algorithm
1๋จ๊ณ: ์ ํจ์ฑ ๊ฒ์ฌ
1
2
Request_i โค Need_i ์ธ๊ฐ?
โ ์๋๋ฉด ์๋ฌ (์ต๋ ์๊ตฌ๋ ์ด๊ณผ)
2๋จ๊ณ: ๊ฐ์ฉ์ฑ ๊ฒ์ฌ
1
2
Request_i โค Available ์ธ๊ฐ?
โ ์๋๋ฉด ๋๊ธฐ (์์ ๋ถ์กฑ)
3๋จ๊ณ: ํ ๋น ์๋ฎฌ
1
2
3
Available = Available - Request_i
Allocation_i = Allocation_i + Request_i
Need_i = Need_i - Request_i
4๋จ๊ณ: safe state ๊ฒ์ฌ
1
2
3
์์ ์ํ ์๊ณ ๋ฆฌ์ฆ ์คํ
โ ์์ ํ๋ฉด: ํ ๋น ํ์
โ ๋ถ์์ ํ๋ฉด: ์๋ ์ํ๋ก ๋ณต๊ตฌ ํ ๋๊ธฐ
Example of Bankerโs Algorithm
- ํ๋ก์ธ์ค: P0, P1, P2, P3, P4 (5๊ฐ)
- resource: A(10๊ฐ), B(5๊ฐ), C(7๊ฐ) (3types)
์ด๊ธฐ์ํ
- Need ํ๋ ฌ ๊ณ์ฐ:
Need = Max - Allocation
1 2 3 4 5 6 7
Need A B C P0 7 4 3 P1 1 2 2 P2 6 0 0 P3 0 1 1 P4 4 3 1
โ
์์ ์์ ์ฐพ๊ธฐ:
์ด๊ธฐ: Work = (3,3,2), ๋ชจ๋ Finish = false
1์ฐจ ์๋:
- P1 ๊ฒ์ฌ: Need(1,2,2) โค Work(3,3,2) -
์ ํจ
- P1 ์๋ฃ: Work = (3,3,2) + (2,0,0) = (5,3,2)
2์ฐจ ์๋:
- P3 ๊ฒ์ฌ: Need(0,1,1) โค Work(5,3,2) -
์ ํจ
- P3 ์๋ฃ: Work = (5,3,2) + (2,1,1) = (7,4,3)
3์ฐจ ์๋:
- P4 ๊ฒ์ฌ: Need(4,3,1) โค Work(7,4,3) -
์ ํจ
- P4 ์๋ฃ: Work = (7,4,3) + (0,0,2) = (7,4,5)
4์ฐจ ์๋:
- P0 ๊ฒ์ฌ: Need(7,4,3) โค Work(7,4,5) -
์ ํจ
- P0 ์๋ฃ: Work = (7,4,5) + (0,1,0) = (7,5,5)
5์ฐจ ์๋:
- P2 ๊ฒ์ฌ: Need(6,0,0) โค Work(7,5,5) -
์ ํจ
- P2 ์๋ฃ: Work = (7,5,5) + (3,0,2) = (10,5,7)
๊ฒฐ๊ณผ: ์์ ์์ < P1, P3, P4, P0, P2 >
์กด์ฌ โ ์์ ์ํ
Example: P1 request (1,0,2)
๐ P1์ด (1,0,2) ์์ฒญํ๋ ๊ฒฝ์ฐ
1๋จ๊ณ: Request(1,0,2) โค Need(1,2,2)? โ ์ ํจ
2๋จ๊ณ: Request(1,0,2) โค Available(3,3,2)? โ ๊ฐ๋ฅ
3๋จ๊ณ: ํ ๋น ์๋ฎฌ๋ ์ด์
1
2
3
Available = (3,3,2) - (1,0,2) = (2,3,0)
Allocation_1 = (2,0,0) + (1,0,2) = (3,0,2)
Need_1 = (1,2,2) - (1,0,2) = (0,2,0)
4๋จ๊ณ: ์์ ์ํ ๊ฒ์ฌ ์คํ โ ์์ ์์ ๋ฐ๊ฒฌ โ โ ํ ๋น ์น์ธ
โ ๋ค๋ฅธ ์์ฒญ๋ค:
P4๊ฐ (3,3,0) ์์ฒญ:
- Request(3,3,0) > Available(2,3,0) โ ์์ ๋ถ์กฑ์ผ๋ก ๊ฑฐ๋ถ
P0๊ฐ (0,2,0) ์์ฒญ:
- ํ ๋น ํ ์์ ์ํ ๊ฒ์ฌ โ unsafe state โ ๊ฑฐ๋ถ
Deadlock Detection
๐Deadlock Detection: ์์คํ ์ด deadlock ์ํ๊ฐ ๋๋ ๊ฒ์ ํ์ฉ
- Detection algorithm์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๋ฆฌ๋ ํ์
- ๊ฐ์ง๊ฐ ๋๋ฉด deadlockํ๋ณต์ ์ํ recovery scheme๊ฐ ์กด์ฌ
โ ๊ตฌ์ฑ ์์:
- Detection Algorithm: deadlock ์กด์ฌ ์ฌ๋ถ ํ๋ณ
- Recovery Scheme: deadlock ํด๊ฒฐ ๋ฐฉ๋ฒ
Single instance ๊ฒฝ์ฐ
๐Wait-for Graph: Resource-Allocation Graph์์ resouce node๋ฅผ ์ ๊ฑฐํ ๊ทธ๋ํ
- Process ๋ ธ๋๋ง ์กด์ฌ
Pi โ Pj
(Pi๊ฐ Pj๋ฅผ ๊ธฐ๋ค๋ฆผ)
1
2
๋ฆฌ์์ค ํ ๋น ๊ทธ๋ํ์์ Pi โ Rk โง Rk โ Pj ์ด๋ฉด
Wait-for Graph์์ Pi โ Pj
โ ํ์ง ๋ฐฉ๋ฒ:
- ์ฃผ๊ธฐ์ ์ผ๋ก Wait-for Graph์์ cycle ํ์ง
- cycle ์กด์ฌ = deadlock ์กด์ฌ
- ์๊ฐ ๋ณต์ก๋:
O(nยฒ)
(n: ํ๋ก์ธ์ค ์)
T1 โ T2 โ T4 โ T1 cycle์ด ์กด์ฌํ๋ deadlock!
Several instance ๊ฒฝ์ฐ
Bankerโs Algorithm๊ณผ ์ ์ฌ
Max๊ฐ ์๋ ๋์ ํ์ฌ request๋ฅผ need๋ก ๊ฐ์ฃผ, Bankerโs algorithm ์คํ
โ unsafe state์ด๋ฉด deadlock์ผ๋ก ํ์
โ
Detection Algorithm:
1๋จ๊ณ: ์ด๊ธฐํ
1
2
3
4
5
Work = Available
Finish[i] = false (๋ชจ๋ i์ ๋ํด)
๋จ, Allocation_i = 0์ด๋ฉด Finish[i] = true
(์์์ ํ ๋น๋ฐ์ง ์์ ํ๋ก์ธ์ค๋ ์๋ฃ๋ก ๊ฐ์ฃผ)
2๋จ๊ณ: ์๋ฃ ๊ฐ๋ฅํ ํ๋ก์ธ์ค ์ฐพ๊ธฐ
1
2
3
4
5
๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ก์ธ์ค i ์ฐพ๊ธฐ:
(a) Finish[i] = false
(b) Request_i โค Work
์กฐ๊ฑด์ ๋ง์กฑํ๋ i๊ฐ ์์ผ๋ฉด โ 4๋จ๊ณ๋ก
3๋จ๊ณ: ์์ ํ์
1
2
3
4
5
๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ก์ธ์ค i ์ฐพ๊ธฐ:
(a) Finish[i] = false
(b) Request_i โค Work
์กฐ๊ฑด์ ๋ง์กฑํ๋ i๊ฐ ์์ผ๋ฉด โ 4๋จ๊ณ๋ก
4๋จ๊ณ: deadlock ํ์
1
2
3
4
์ด๋ค i์ ๋ํด Finish[i] = false์ด๋ฉด โ ๋ฐ๋๋ฝ ์กด์ฌ
๋ชจ๋ i์ ๋ํด Finish[i] = true์ด๋ฉด โ ๋ฐ๋๋ฝ ์์
Finish[i] = false์ธ ํ๋ก์ธ์ค๋ค์ด ๋ฐ๋๋ฝ์ ๊ด์ฌ
Example of Detection Algorithm
- process: P0, P1, P2, P3, P4 (5๊ฐ)
- resource type: A(7๊ฐ), B(2๊ฐ), C(6๊ฐ) (3ํ์ )
- ์๊ฐ T0์์ ์ํ:
1
2
3
4
5
6
7
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
๐ ์๊ณ ๋ฆฌ์ฆ ์คํ ๊ณผ์ :
์ด๊ธฐํ:
- Work = Available = (0, 0, 0)
- P0, P2๋ Request๊ฐ (0,0,0)์ด๋ฏ๋ก ์์ฒญ ์์
- ๋๋จธ์ง ํ๋ก์ธ์ค๋ค์ ์์ ์์ฒญ ์ค
1๋จ๊ณ: ์์ฒญ ์๋ ํ๋ก์ธ์ค ์ฒ๋ฆฌ
- P0: Request(0,0,0) โค Work(0,0,0) โ
- Work = (0,0,0) + (0,1,0) = (0,1,0)
- P0 ์๋ฃ
- P2: Request(0,0,0) โค Work(0,1,0) โ
- Work = (0,1,0) + (3,0,3) = (3,1,3)
- P2 ์๋ฃ
2๋จ๊ณ: ๋จ์ ํ๋ก์ธ์ค๋ค ๊ฒ์ฌ
- P1: Request(2,0,2) โค Work(3,1,3) โ
- Work = (3,1,3) + (2,0,0) = (5,1,3)
- P1 ์๋ฃ
- P3: Request(1,0,0) โค Work(5,1,3) โ
- Work = (5,1,3) + (2,1,1) = (7,2,4)
- P3 ์๋ฃ
- P4: Request(0,0,2) โค Work(7,2,4) โ
- Work = (7,2,4) + (0,0,2) = (7,2,6)
- P4 ์๋ฃ
โ
๊ฒฐ๊ณผ:
์๋ฃ ์์: < P0, P2, P3, P4, P1 >
๋ชจ๋ ํ๋ก์ธ์ค ์๋ฃ ๊ฐ๋ฅ โ No Deadlock!
P2๊ฐ ์ถ๊ฐ ์ธ์คํด์ค ์์ฒญํ ๊ฒฝ์ฐ
- P2๊ฐ C ํ์ ์์ 1๊ฐ๋ฅผ ์ถ๊ฐ ์์ฒญ:
1
2
3
4
5
6
7
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 1 โ ๋ณ๊ฒฝ๋จ
P3 2 1 1 1 0 0
P4 0 0 2 0 0 2
P1, P2, P3, P4๊ฐ ๋ฐ๋๋ฝ ์ํ
Detection-Algorithm Usage
detection ์๊ณ ๋ฆฌ์ฆ์ ์ธ์ , ์ผ๋ง๋ ์์ฃผ ํธ์ถํด์ผ ํ ๊น??
- ๋ฐ๋๋ฝ ๋ฐ์ ๋น๋
- ์์ฃผ ๋ฐ์ โ ์์ฃผ ๊ฒ์ฌ ํ์
- ๋๋ฌผ๊ฒ ๋ฐ์ โ ๊ฒ์ฌ ๋น๋ ๋ฎ์ถค
- ๋กค๋ฐฑ๋ ํ๋ก์ธ์ค ์
- ๊ฐ ๋ ๋ฆฝ์ ์ธ cycle๋ง๋ค ํ๋์ฉ ๋กค๋ฐฑ ํ์
- cycle์ด ๋ง์์๋ก ๋ ๋ง์ ํ๋ก์ธ์ค ์ํฅ
Deadlock detection ์๊ณ ๋ฆฌ์ฆ์ ์๋ฌด๋๋ ์ํํ๋ฉด deadlock์ ์ ๋ฐํ ์ค๋ ๋๋ฅผ ์๋ณํ์ง ๋ชปํ ์ ์๋ค.
๋ฐ๋ฉด์ ์์์์ฒญ์ด ์คํจํ ๋ deadlock detection ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋ฉด deadlock์ ์ ๋ฐํ ์ค๋ ๋๋ฅผ ์๋ณํ๋๋ฐ ๋์์ด ๋๋ค.
deadlock์ ํ๋ณตํ๋ ๋ฐฉ๋ฒ
1. Process Termination
๋ฐฉ๋ฒ 1: All deadlock process ์ข ๋ฃ
- ํ์คํ๊ณ ํด๊ฒฐ์ด ๋น ๋ฅด์ง๋ง ๋์ ๋น์ฉ, ๋ง์ ์์ ์์ค ๋ฌธ์ ๊ฐ ์์
๋ฐฉ๋ฒ 2: ํ ๋ฒ์ ํ๋์ฉ ์ข ๋ฃ
- ํ๋ก์ธ์ค ์ข ๋ฃ โ detection algorithm ์ฌ์คํ โ ๋ฐ๋ณต
- ์ต์ํ์ ํ๋ก์ธ์ค๋ง ์ข ๋ฃํด์ ์์ ์์ค์ด ์ ์, ํ์ง๋ง ์ฌ๋ฌ ๋ฒ์ ํ์ง ์คํ ํ์
โ ์ข ๋ฃ ํ๋ก์ธ์ค ์ ํ ๊ธฐ์ค:
- ํ๋ก์ธ์ค ์ฐ์ ์์: ๋ฎ์ ์ฐ์ ์์๋ถํฐ ์ข ๋ฃ
- ์คํ ์๊ฐ๊ณผ ์๋ฃ ์์ ์๊ฐ: ์งง๊ฒ ์คํ๋์๊ฑฐ๋ ์ค๋ ๊ฑธ๋ฆด ํ๋ก์ธ์ค ์ฐ์
- ์ฌ์ฉํ ์์์ ์: ์ ์ ์์์ ์ฌ์ฉํ ํ๋ก์ธ์ค ์ฐ์
- ์๋ฃ์ ํ์ํ ์์: ๋ง์ ์์์ด ํ์ํ ํ๋ก์ธ์ค ์ฐ์
- ์ข ๋ฃํด์ผ ํ ํ๋ก์ธ์ค ์
- ํ๋ก์ธ์ค ํ์
ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃํ๋ฉด ์์คํ ๋ถ์ผ์น ์ํ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ ์คํด์ผ ํจ
2. Resource Preemption
- Selecting a Victin: ๋น์ฉ ์ต์ํ
- Rollback: deadlock ๋ฐ์ ์ด์ ์์ (safe state)์ผ๋ก ๋ณต๊ท, ์์ ํ ์ํ์์ restart
- Starvation Prevention
- ๋ฌธ์ : ๋์ผํ ํ๋ก์ธ์ค๊ฐ ๊ณ์ ํฌ์์๋ก ์ ํ
- ํด๊ฒฐ: ๋กค๋ฐฑ ํ์๋ฅผ ๋น์ฉ ๊ณ์ฐ์ ํฌํจ