7. Deadlocks
The Deadlock Problem
- ๋ฆฌ์์ค๋ฅผ ๋ณด์ ํ ์ํ๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค ์งํฉ์ด ์์ ๋, ์ด๋ค ์ฌ์ด์์ ๊ต์ฐฉ ์ํ(deadlock)๊ฐ ๋ฐ์ํจ
- ์์:
- ์์คํ ์ ํ ์ดํ ๋๋ผ์ด๋ธ๊ฐ 2๊ฐ ์์
- , ๋ ๊ฐ๊ฐ ํ๋์ ๋๋ผ์ด๋ธ๋ฅผ ์ ์ ํ๊ณ ์์ผ๋ฉฐ, ์๋๋ฐฉ์ ๋๋ผ์ด๋ธ๋ ํ์๋ก ํจ
- ์ธ๋งํฌ์ด ์์:
- ์ธ๋งํฌ์ด A์ B๋ 1๋ก ์ด๊ธฐํ๋จ
P_0:
P(A);
P(B);
P_1:
P(B);
P(A);
Deadlock Characterization
Deadlock์ ๋ค์์ ๋ค ๊ฐ์ง ์กฐ๊ฑด์ด ๋์์ ๋ง์กฑ๋ ๋ ๋ฐ์ํ ์ ์์ (ํ์ ์กฐ๊ฑด):
- Mutual exclusion: ํ๋์ ๋ฆฌ์์ค๋ ์ค์ง ํ ํ๋ก์ธ์ค๋ง ์ฌ์ฉํ ์ ์์
- No preemption: ๋ฆฌ์์ค๋ ๊ทธ๊ฒ์ ๋ณด์ ํ ํ๋ก์ธ์ค๊ฐ ์์ ์ ๋ง์น๊ณ ์๋ฐ์ ์ผ๋ก ํด์ ํ ๋๋ง ํ์๋ ์ ์์
- Hold and wait: ์ต์ ํ๋์ ๋ฆฌ์์ค๋ฅผ ๋ณด์ ํ ํ๋ก์ธ์ค๊ฐ, ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ
- Circular wait: ํ๋ก์ธ์ค ์งํฉ ์ด ์กด์ฌํ๋ฉฐ,
- ๋ ์ด ๋ณด์ ํ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ,
- ์ ๊ฐ ๋ณด์ ํ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ,
- ...
- ์ ์ด ๋ณด์ ํ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ ๋๊ธฐ ์ํ๊ฐ ์กด์ฌํจ
Traffic Deadlock
์ฐจ๋์ด ์ฌ๋ฐฉ์์ ์ง์ ํ๋ฉด์ ์๋ก๋ฅผ ๋ง๊ณ ์์ด ํ ๋๋ ์์ผ๋ก ๋์๊ฐ์ง ๋ชปํ๋ ์ํ
์ด๋ deadlock์ ์ค์ง์ ์ธ ์์์ด๋ฉฐ, circular wait๊ณผ ์ ์ฌํ ํํ์
(ํด๋น ์ฌ๋ผ์ด๋์๋ ์ฌ๊ฑฐ๋ฆฌ ๊ต์ฐจ๋ก์์ ๋ฐ์ํ ๊ต์ฐฉ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ผ๋ฌ์คํธ๊ฐ ํฌํจ๋์ด ์์)
Real World Traffic Deadlock
์ค์ ๋๋ก์์ ๋ฐ์ํ ๊ตํต ๊ต์ฐฉ ์ํ์ ์ฌ์ง
์ฐจ๋์ด ์๋ก ๊ต์ฐจ์ง์ ์์ ๋ฉ์ถฐ ๋ค๋ฅธ ์ฐจ๋์ ์ด๋์ ๋ง๊ณ ์์
Resource-Allocation Graph
- ์ ์ ์ ๊ฐ์ ๋ก ๊ตฌ์ฑ๋ ๊ทธ๋ํ
- ๋ ๋ ๊ฐ์ง ์ ํ์ผ๋ก ๋๋จ:
- : ์์คํ ๋ด์ ํ๋ก์ธ์ค ์งํฉ
- : ์์คํ ๋ด์ ๋ฆฌ์์ค ์ ํ ์งํฉ
- ๊ฐ์ ์ ์ ํ:
- ์์ฒญ ๊ฐ์ (request edge):
- ํ ๋น ๊ฐ์ (assignment edge):
- ํ๋ก์ธ์ค: ์ํ์ผ๋ก ํํ๋จ
- ๋ฆฌ์์ค ์ ํ (4๊ฐ์ ์ธ์คํด์ค): ์ฌ๊ฐํ ๋ด๋ถ์ ์ ์ผ๋ก ํํ๋จ
- ๊ฐ ์ ์ธ์คํด์ค๋ฅผ ์์ฒญ:
- ๊ฐ ์ ์ธ์คํด์ค๋ฅผ ๋ณด์ :
Example of a Resource Allocation Graph
๊ทธ๋ํ ์์:
- , , ๋ ๊ฐ๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญ ๋๋ ๋ณด์ ํ๊ณ ์์
- ๋ถํฐ ๊น์ง ๋ค์ํ ๋ฆฌ์์ค๊ฐ ์์
- ๊ฐ ๋ฆฌ์์ค ์ ํ์ ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ (dot)์ผ๋ก ํํ๋จ
Basic Facts
- ๊ทธ๋ํ์ cycle(์ฌ์ดํด)์ด ์์ผ๋ฉด โ deadlock ๋ฐ์ ๋ถ๊ฐ
- ๊ทธ๋ํ์ cycle์ด ์์ผ๋ฉด โ ๋ค์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฆ:
- ๋ฆฌ์์ค ์ ํ๋น ์ธ์คํด์ค๊ฐ 1๊ฐ๋ฟ์ด๋ฉด, ๋ฐ๋์ deadlock
- ๋ฆฌ์์ค ์ ํ๋น ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ๊ฐ๋ฉด, deadlock ๊ฐ๋ฅ์ฑ ์กด์ฌ
Resource Allocation Graph with a Deadlock
deadlock์ด ๋ฐ์ํ ์ํ์ ๊ทธ๋ํ ์์
- , , ๋ ๊ฐ๊ธฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญ ์ค์ด๋ ์๋ก์ ์ ์ ์ํ๊ฐ ๋ง๊ณ ์์
- cycle์ด ํ์ฑ๋์ด ์์
- ๋ชจ๋ ๋ฆฌ์์ค๊ฐ 1๊ฐ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง
Resource Allocation Graph with a Cycle But No Deadlock
cycle์ ์กด์ฌํ์ง๋ง deadlock์ด ์๋ ๊ฒฝ์ฐ์ ์์
- ๋ ์์ฒญ ์ค
, ๋ชจ๋ ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๋ฏ๋ก
์ค์ ๋ก deadlock์ ๋ฐ์ํ์ง ์์
Methods for Handling Deadlocks
- ์์คํ ์ด ์ ๋ deadlock ์ํ์ ์ง์ ํ์ง ์๋๋ก ๋ณด์ฅ (์๋ฐฉ ๋๋ ํํผ)
- ์์คํ
์ด deadlock ์ํ์ ์ง์
ํ๊ฒ ํ ๋ค,
์ด๋ฅผ ๊ฐ์งํ๊ณ ๋ณต๊ตฌ (์ฌํ ๋์) - ๋ฌธ์ ๋ฅผ ๋ฌด์ํ๊ณ deadlock์ด ์กด์ฌํ์ง ์๋ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌ
โ ๋๋ถ๋ถ์ ์ด์์ฒด์ (์: UNIX)๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉ
Deadlock Prevention
- ์์ฒญ ๋ฐฉ์์ ์ ์ฝ์ ๋์ด ํ์ ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ๋ง์กฑํ์ง ์๋๋ก ๋ง๋ฆ
- Mutual Exclusion
- ๊ณต์ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ ํ์ ์์
- ๊ณต์ ๋ถ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ ๋ฐ๋์ mutual exclusion์ ๊ฐ์ ํด์ผ ํจ
(๋ด์ฌ์ ์ผ๋ก ๊ณต์ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ๋ถ๊ฐ๋ฅ)
- Hold and Wait
- ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋, ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ๊ณ ์์ง ์์์ผ ํจ
- ์คํ ์ ์ ํ์ํ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ํ๊บผ๋ฒ์ ์์ฒญํ๊ณ ํ ๋น๋ฐ๋๋ก ์๊ตฌํ๊ฑฐ๋,
์๋ฌด ๋ฆฌ์์ค๋ ๋ณด์ ํ์ง ์์ ๋๋ง ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ์ ์๋๋ก ํจ - ๋ฆฌ์์ค ํ์ฉ๋ฅ ์ด ๋ฎ์์ง๊ณ starvation ๊ฐ๋ฅ์ฑ ์กด์ฌ
- No Preemption
- ์ด๋ค ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ ์ํ์์ ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋๋ฐ
์ฆ์ ํ ๋น๋ ์ ์๋ค๋ฉด, ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ๋ชจ๋ ๋ฐ๋ฉํด์ผ ํจ - ๋ฐ๋ฉ๋ ๋ฆฌ์์ค๋ ํด๋น ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ค์ธ ๋ฆฌ์์ค ๋ชฉ๋ก์ ์ถ๊ฐ๋จ
- ํ๋ก์ธ์ค๋ ๊ธฐ์กด ๋ฆฌ์์ค์ ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ๋ชจ๋ ํ๋ํ ์ ์์ ๋ ์ฌ์์๋จ
- ์ด๋ค ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ ์ํ์์ ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋๋ฐ
- Circular Wait
- ๋ชจ๋ ๋ฆฌ์์ค ์ ํ์ ๋ํด ์ด์ฒด์ ์์๋ฅผ ๋ถ์ฌํ๊ณ ,
๊ฐ ํ๋ก์ธ์ค๊ฐ ์ค๋ฆ์ฐจ์ ์์๋ก๋ง ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋๋ก ์ ํํจ
- ๋ชจ๋ ๋ฆฌ์์ค ์ ํ์ ๋ํด ์ด์ฒด์ ์์๋ฅผ ๋ถ์ฌํ๊ณ ,
๋จ์ : ๋ฎ์ ๋ฆฌ์์ค ํ์ฉ๋ฅ , ์์คํ ์ฒ๋ฆฌ๋ ๊ฐ์
Deadlock Avoidance
- ์์คํ ์ด ์ฌ์ ์ ์ถ๊ฐ์ ์ธ ์ ๋ณด(a priori information)๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํจ
- ๊ฐ์ฅ ๋จ์ํ๊ณ ์ค์ฉ์ ์ธ ๋ชจ๋ธ:
๊ฐ ํ๋ก์ธ์ค๊ฐ ๊ฐ ๋ฆฌ์์ค ์ ํ๋ง๋ค ์ต๋ ์๊ตฌ๋์ ๋ช ์ - deadlock-avoidance ์๊ณ ๋ฆฌ์ฆ์
์์์ ํ ๋น ์ํ๋ฅผ ๋์ ์ผ๋ก ๊ฒ์ฌํ์ฌ
circular wait ์กฐ๊ฑด์ด ์ ๋ ๋ฐ์ํ์ง ์๋๋ก ๋ณด์ฅ - ์์ ํ ๋น ์ํ(resource-allocation state)๋
์ฌ์ฉ ๊ฐ๋ฅ/ํ ๋น๋ ์์ ์์ ํ๋ก์ธ์ค์ ์ต๋ ์๊ตฌ๋์ ์ํด ์ ์๋จ
Safe State
- ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ฉด, ์์คํ ์ ์ฆ์ ํ ๋น ์ safe ์ํ๋ฅผ ์ ์งํ ์ ์๋์ง ํ์ธํด์ผ ํจ
- ์ํ์ค ์ด ์กด์ฌํ๊ณ
๊ฐ ์ ๋ํด ๋ค์์ด ์ฑ๋ฆฝํ๋ฉด safe ์ํ์:- ์ ๋ฆฌ์์ค ์์ฒญ๋ โค ํ์ฌ ๊ฐ์ฉ ์์ + ๊ฐ ๋ณด์ ์ค์ธ ๋ฆฌ์์ค
- ๋ง์ฝ ์์์ด ์ฆ์ ์ฌ์ฉ ๋ถ๊ฐํด๋, ๋ ์ ํ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ์์
- ๊ฐ ์ข ๋ฃ๋๋ฉด, ๋ฆฌ์์ค๋ฅผ ๋ฐํํ๊ณ ๋ค์ ํ๋ก์ธ์ค๊ฐ ์์ฒญ ๊ฐ๋ฅ
- ์์คํ ์ด safe ์ํ์ด๋ฉด, ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ ๊ฐ๋ฅํ ์ํ์ค๊ฐ ์กด์ฌํจ
Basic Facts
- ์์คํ ์ด safe ์ํ โ deadlock ์์
- ์์คํ
์ด unsafe ์ํ โ deadlock ๊ฐ๋ฅ์ฑ ์กด์ฌ
- ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ต๋๋์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๊ฒฝ์ฐ ๋ฐ์ ๊ฐ๋ฅ
- Avoidance ๊ธฐ๋ฒ์ ์์คํ ์ด unsafe ์ํ์ ์ง์ ํ์ง ์๋๋ก ๋ณด์ฅํจ
"์์ฒญ์ด safe ์ํ๋ฅผ ์ ์งํ๋ ๊ฒฝ์ฐ์๋ง ์น์ธํ๋ผ,
๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฑฐ๋ถํ๋ผ"
Safe, Unsafe, Deadlock State Spaces
์ํ ๊ณต๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ๋ถ๋จ:
- Safe: deadlock ๋ฐ์ ๊ฐ๋ฅ์ฑ ์์
- Unsafe: deadlock ๋ฐ์ ๊ฐ๋ฅ์ฑ ์์
- Deadlock: ์ค์ deadlock ๋ฐ์
(๋ํ๋ก safe โ unsafe โ ์ ์ฒด ๊ณต๊ฐ์ ๋ํ๋)
Avoidance Algorithms
- ํ๋์ ์ธ์คํด์ค๋ง ์กด์ฌํ๋ ๋ฆฌ์์ค ์ ํ:
- resource-allocation graph ์ฌ์ฉ
- ์ฌ๋ฌ ์ธ์คํด์ค๊ฐ ์กด์ฌํ๋ ๋ฆฌ์์ค ์ ํ:
- Banker's Algorithm ์ฌ์ฉ
Case A: One instance per resource type : Resource Allocation Graph Algorithm
- Claim edge
- ๋ ๊ฐ ๋ฅผ ์์ฒญํ ์ ์์์ ๋ํ๋ (์ ์ )
- Request edge
- ํ๋ก์ธ์ค๊ฐ ์ค์ ๋ก ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ฉด, claim edge โ request edge๋ก ๋ณํ๋จ
- Assignment edge
- ๋ฆฌ์์ค๊ฐ ํ๋ก์ธ์ค์ ํ ๋น๋๋ฉด, request edge โ assignment edge๋ก ๋ณํ๋จ
- ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ๋ฐํํ๋ฉด, assignment edge โ claim edge๋ก ๋๋์๊ฐ
- ์๊ณ ๋ฆฌ์ฆ (๋ชจ๋ ๋ฆฌ์์ค๋ ์ฌ์ ์ claim ๋์ด ์์ด์ผ ํจ):
- ๊ฐ ๋ฅผ ์์ฒญํ ๋,
- ํด๋น request edge๋ฅผ assignment edge๋ก ๋ฐ๊พธ๋๋ผ๋ ๊ทธ๋ํ์ cycle์ด ์๊ธฐ์ง ์์์ผ ์์ฒญ์ ์๋ฝ
Resource-Allocation Graph for Deadlock Avoidance
์์ ์ํฉ:
- ์ ๋ณด์
- ๋ ๋ฅผ ์์ฒญ
- ๋ฅผ ํ ๋นํ๋ฉด, ์ฌ์ดํด์ด ํ์ฑ๋์ด unsafe ์ํ๊ฐ ๋จ
P2 requests R2
If we grant it,
A cycle is formed
โ unsafe
Unsafe State in a Resource-Allocation Graph
- ์ฌ์ดํด์ด ์๋ ๊ฒฝ์ฐ: safe, ์์ฒญ์ grant
- ์ฌ์ดํด์ด ์๊ธฐ๋ ๊ฒฝ์ฐ: unsafe, ์์ฒญ์ deny
Case B: Multiple Instances per Resource Types : Banker's Algorithm
- ๊ฐ ํ๋ก์ธ์ค๋ ์ต๋ ์๊ตฌ๋์ ์ฌ์ ์ ๋ช ์
- ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ฉด, ๋๊ธฐํ ์๋ ์์
- ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ํ ๋น๋ฐ์ ํ๋ก์ธ์ค๋ ์ผ์ ์๊ฐ ๋ด์ ๋ฐํํด์ผ ํจ
Data Structures for the Banker's Algorithm
- : ํ๋ก์ธ์ค ์
- : ๋ฆฌ์์ค ์ ํ ์
- vector:
Available
Available[j] = k
: ๋ฆฌ์์ค ์ ์ธ์คํด์ค ๊ฐ๊ฐ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
- matrix
Max[i][j] = k
: ํ๋ก์ธ์ค ๊ฐ ๋ฆฌ์์ค ๋ฅผ ์ต๋ ๊ฐ๊น์ง ์๊ตฌํ ์ ์์Allocation[i][j] = k
: ๊ฐ ๋ฆฌ์์ค ๋ฅผ ํ์ฌ ๊ฐ ๋ณด์ ์คNeed[i][j] = Max[i][j] - Allocation[i][j]
:
๋ ๋ฆฌ์์ค ๋ฅผ ์ต๋ ๊ฐ ๋ ์์ฒญํ ์ ์์
Safety Algorithm
- ๊ธธ์ด , ์ธ ๋ฒกํฐ
Work
,Finish
๋ฅผ ์ด๊ธฐํ:Work = Available
Finish[i] = \text{false}
for
- ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ธ๋ฑ์ค ๋ฅผ ์ฐพ์:
Finish[i] == false
Need_i \leq Work
์กด์ฌํ์ง ์์ผ๋ฉด step 4๋ก ์ด๋
Work = Work + Allocation_i
Finish[i] = true
- step 2๋ก ๋์๊ฐ
- ๋ชจ๋ ์ ๋ํด
Finish[i] == true
์ด๋ฉด, ์์คํ ์ safe ์ํ
- ๋ชจ๋ ์ ๋ํด
Resource-Request Algorithm for Process
Request_i
๋ ์ ์์ฒญ ๋ฒกํฐ๋ก, ๊ฐ ๋ฆฌ์์ค ์ ํ ์ ๋ํด ์์ฒญ๋์ ๋ํ๋- ์์ฒญ ์ฒ๋ฆฌ ๋จ๊ณ:
Request_i \leq Need_i
- ๋ง์กฑํ์ง ์์ผ๋ฉด ์๋ฌ (์ต๋ ์๊ตฌ๋ ์ด๊ณผ)
Request_i \leq Available
- ์๋๋ฉด ๋ ๋๊ธฐ
- ์์ฒญ์ ์ผ์์ ์ผ๋ก ํ ๋นํ ๊ฒ์ฒ๋ผ ์ํ๋ฅผ ๊ฐฑ์ :
Available = Available - Request Allocation_i = Allocation_i + Request Need_i = Need_i - Request
- safe ์ํ์ด๋ฉด ์์ฒญ์ ์ค์ ๋ก ํ ๋น
- unsafe ์ํ์ด๋ฉด ํ ๋น์ ์ทจ์ํ๊ณ ์ด์ ์ํ๋ก ๋ณต์
Example of Bankerโs Algorithm
- 5๊ฐ ํ๋ก์ธ์ค: ~
- 3๊ฐ ๋ฆฌ์์ค ์ ํ: A(10), B(5), C(7)
์์ ์ ์ํ:
Process | Allocation | Max | Available | Need |
---|---|---|---|---|
0 1 0 | 7 5 3 | 3 3 2 | 7 4 3 | |
2 0 0 | 3 2 2 | 1 2 2 | ||
3 0 2 | 9 0 2 | 6 0 0 | ||
2 1 1 | 2 2 2 | 0 1 1 | ||
0 0 2 | 4 3 3 | 4 3 1 |
- ์์คํ
์ safe ์ํ:
์ํ์ค ๊ฐ safety ๊ธฐ์ค ๋ง์กฑ
Example (Cont.): request (1, 0, 2)
- โ True
์ ๋ฐ์ดํธ๋ ์ํ:
Process | Need | Available |
---|---|---|
7 4 3 | 2 3 0 | |
0 2 0 | ||
6 0 0 | ||
0 1 1 | ||
4 3 1 |
- ์ํ์ค ๋ safety ์กฐ๊ฑด ๋ง์กฑ
์ถ๊ฐ ์ง๋ฌธ:
- ์ด (3, 3, 0)์ ์์ฒญํ ์ ์๋๊ฐ?
- ์ด (0, 2, 0)์ ์์ฒญํ ์ ์๋๊ฐ?
Deadlock Detection
- ์์คํ ์ด deadlock ์ํ์ ์ง์ ํ๋๋ก ํ์ฉ
- ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ณต๊ตฌ ์ ์ฐจ ํ์
- 2๊ฐ์ง case:
- A: ๋ฆฌ์์ค ์ ํ๋น ์ธ์คํด์ค 1๊ฐ โ cycle โ deadlock
- B: ๋ฆฌ์์ค ์ ํ๋น ์ธ์คํด์ค ๋ค์ โ ?
Single Instance of Each Resource Type
- wait-for graph ์ ์ง
- ๋ ธ๋๋ ํ๋ก์ธ์ค
- : ๊ฐ ๊ฐ ๋ณด์ ํ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ค
- cycle ํ์ง ์๊ณ ๋ฆฌ์ฆ ์คํ
- ๊ทธ๋ํ์์ cycle ํ์ง๋ ์๊ฐ๋ณต์ก๋
(์ ๊ทธ๋ํ ์ ์ ์)
- ๊ทธ๋ํ์์ cycle ํ์ง๋ ์๊ฐ๋ณต์ก๋
Resource-Allocation Graph and Wait-for Graph
- ์ข์ธก: Resource-Allocation Graph
- ์ฐ์ธก: ํด๋น ๊ทธ๋ํ๋ฅผ ๋ณํํ Wait-for Graph
Wait-for Graph๋ ํ๋ก์ธ์ค ๊ฐ ๋๊ธฐ ๊ด๊ณ๋ง ํ์
(๋ฆฌ์์ค ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๊ณ ๊ฐ์ ์ผ๋ก ๋๊ธฐ ๊ด๊ณ๋ง ์ ์ง)
Several Instances of a Resource Type
- Deadlock Detection Algorithm ์ฌ์ฉ
- ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ:
Available
: ๊ฐ ๋ฆฌ์์ค ์ ํ๋ณ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์คํด์ค ์๋ฅผ ๋ํ๋ด๋ ๋ฒกํฐAllocation
: ํ๋ ฌ, ๊ฐ ํ๋ก์ธ์ค์ ํ์ฌ ํ ๋น๋ ๋ฆฌ์์ค ์Request
: ํ๋ ฌ, ๊ฐ ํ๋ก์ธ์ค๊ฐ ํ์ฌ ์์ฒญ ์ค์ธ ๋ฆฌ์์ค ์Request[i][k] = x
: ๋ ๋ฆฌ์์ค ๋ฅผ ๊ฐ ์์ฒญ ์ค
Detection Algorithm
- ๋ฒกํฐ
Work
,Finish
์ด๊ธฐํ:Work = Available
- ์ ๋ํด
Finish[i] = false
(๋ง์ฝAllocation[i] \ne 0
)Finish[i] = true
(๋ง์ฝAllocation[i] = 0
)
- ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ธ๋ฑ์ค ๋ฅผ ์ฐพ์:
Finish[i] == false
Request[i] \leq Work
์์ผ๋ฉด step 4๋ก ์ด๋
Work = Work + Allocation[i]
Finish[i] = true
- step 2๋ก ์ด๋
- ์ด๋ค ์ ๋ํด
Finish[i] == false
์ด๋ฉด ์์คํ ์ deadlock ์ํ - ํนํ,
Finish[i] == false
์ธ ํ๋ก์ธ์ค ๋ deadlock ์ํ์ ์์
- ์ด๋ค ์ ๋ํด
Example of Detection Algorithm
- ํ๋ก์ธ์ค ~ , ๋ฆฌ์์ค A(7), B(2), C(6)
์๊ฐ ์ ์ํ:
Process | Allocation | Request | Available |
---|---|---|---|
2 1 0 | 0 0 0 | 0 0 0 | |
2 0 0 | 2 0 2 | ||
3 0 3 | 0 0 0 | ||
2 1 1 | 1 0 0 | ||
0 0 2 | 0 0 2 |
- ์ํ์ค โ ๋ชจ๋
Finish[i] = true
Detection Algorithm (Cont.)
- ์๊ณ ๋ฆฌ์ฆ ์ํ ๋น์ฉ:
- : ๋ฆฌ์์ค ์ ํ ์
- : ํ๋ก์ธ์ค ์
๋ฌธ์ : ์ผ๋ง๋ ์์ฃผ deadlock ํ์ง๋ฅผ ์คํํ ๊ฒ์ธ๊ฐ?
- ๋ชจ๋ ์์ฒญ๋ง๋ค? (์ค๋ฒํค๋ ํผ)
- ์์์ด ํ ๋น๋์ง ์์ ๋๋ง๋ค?
- ์ฃผ๊ธฐ์ ์ผ๋ก? (deadlock ํ๋ฅ ์ด ๋ฎ์ ๊ฒฝ์ฐ ์ ์ )
Recovery from Deadlock: Process Termination
- ๋ชจ๋ deadlock๋ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๊ฑฐ๋,
- ํ๋์ฉ ์ข ๋ฃํ์ฌ deadlock ์ฌ์ดํด ์ ๊ฑฐ
์ด๋ค ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ ์ง ๊ฒฐ์ ๊ธฐ์ค:
- ํ๋ก์ธ์ค ์ฐ์ ์์
- ์ด๋ฏธ ์์๋ ์คํ ์๊ฐ ๋ฐ ๋จ์ ์๊ฐ
- ์ฌ์ฉํ ๋ฆฌ์์ค ์
- ํ์ํ ๋ฆฌ์์ค ์
- ์ข ๋ฃ๋์ด์ผ ํ ํ๋ก์ธ์ค ์
- ํ๋ก์ธ์ค๊ฐ ๋ํํ(interactive)์ธ์ง ๋ฐฐ์นํ(batch)์ธ์ง
Recovery from Deadlock: Resource Preemption
- ํฌ์์ ์ ํ (victim selection):
- ๋น์ฉ(cost)์ ์ต์ํํ๋ ๋ฐฉ์์ผ๋ก ์ ํ
- Rollback
- ์์ ํ ์ํ(safe state)๋ก ๋๋์๊ฐ
- ํด๋น ์ํ์์ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํจ
- Starvation
- ๋์ผํ ํ๋ก์ธ์ค๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ํฌ์์๋ก ์ ํ๋ ์ ์์
- ๋กค๋ฐฑ ํ์๋ฅผ ๋น์ฉ ์์๋ก ํฌํจ์์ผ ๊ณ ๋ คํด์ผ ํจ
Avoidance vs. Detection
๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฐจ์ด์
- Avoidance:
- ํ๋ก์ธ์ค๊ฐ ์ต์
์ ํ๋(worst case)์ ํ๋ค๊ณ ๊ฐ์
- ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ต๋ ๋ฆฌ์์ค๋ฅผ ๋์์ ์์ฒญํ๋ค๊ณ ๊ฐ์
- ์ด ์ต์ ์ ์๋๋ฆฌ์ค์์๋ safe sequence๊ฐ ๋ณด์ฅ๋ ๊ฒฝ์ฐ์๋ง ๋ฆฌ์์ค ํ ๋น
- ๋ฆฌ์์ค ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์์
- ํ๋ก์ธ์ค๊ฐ ์ต์
์ ํ๋(worst case)์ ํ๋ค๊ณ ๊ฐ์
- Detection:
- ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ(dormant)๋ผ๊ณ ๊ฐ์
- ์ฆ, ๋ ์ด์ ์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ์ง ์๋๋ค๊ณ ๊ฐ์ (์ต์ ์ ์๋๋ฆฌ์ค)
- ํ์ฌ ์ํ์ ๊ธฐ๋ฐํด deadlock ์ฌ๋ถ๋ฅผ ํ๋จํจ
- ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ(dormant)๋ผ๊ณ ๊ฐ์