[OS] ๊ต์ฐฉ์ํ(deadlock)
The Deadlock problem
Deadlock
- ์ผ๋ จ์ ํ๋ก์ธ์ค๋ค์ด ์๋ก๊ฐ ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ block๋ ์ํ
Resource(์์)
- ํ๋์จ์ด, ์ํํธ์จ์ด ๋ฑ์ ํฌํจํ๋ ๊ฐ๋
- ex) I/O device, CPU cycle, memory space, semaphore ๋ฑ
- ํ๋ก์ธ์ค๊ฐ์์์ ์ฌ์ฉํ๋ ์ ์ฐจ
- Request(์์ฒญ), Allocate(ํ ๋น), Use(์ฌ์ฉ), Release(๋ฐฐํฌ)
Deadlock Example 1
- ์์คํ ์ 2๊ฐ์ tape drive๊ฐ ์์
- ํ๋ก์ธ์ค P1๊ณผ P2 ๊ฐ๊ฐ์ด ํ๋์ tape drive๋ฅผ ๋ณด์ ํ ์ฑ ๋ค๋ฅธ ํ๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์
Deadlock Example 2
- Binary semaphores A and B
P0 P1
P(A); P(B);
P(B); P(A);
Deadlock ๋ฐ์์ 4๊ฐ์ง ์กฐ๊ฑด
1. Mutual exclusion(์ํธ ๋ฐฐ์ )
- ๋งค ์๊ฐ ํ๋์ ํ๋ก์ธ์ค๋ง์ด ์์์ ์ฌ์ฉํ ์ ์์
2. No preemption(๋น์ ์ )
- ํ๋ก์ธ์ค๋ ์์์ ์ค์ค๋ก ๋ด์ด๋์ ๋ฟ ๊ฐ์ ๋ก ๋นผ์๊ธฐ์ง ์์
3. Hold and wait(๋ณด์ ๋๊ธฐ)
- ์์์ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆด ๋ ๋ณด์ ์์์ ๋์ง ์๊ณ ๊ณ์ ๊ฐ์ง๊ณ ์์
4. Circular wait(ํํ ๋๊ธฐ)
- ์์์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ์ ์ฌ์ดํด์ด ํ์ฑ๋์ด์ผ ํจ
- ํ๋ก์ธ์ค P0, P1 โฆ Pn์ด ์์ ๋
P0์ P1์ด ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆผ
P1์ P2๊ฐ ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆผ
Pn-1์ Pn์ด ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆผ
Pn์ P0์ด ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆผ
Resource-Allocation Graph (์์ํ ๋น ๊ทธ๋ํ) -> deadlock ํ๋ณ ๋ฐฉ๋ฒ
- ์์์์ ํ๋ก์ธ์ค๋ก ๊ฐ๋ ํ์ดํ์ ์๋ฏธ
- ์์์ ํ๋ก์ธ์ค๊ฐ ์ ์ ํ๊ณ ์๋ค๋ ๋ป
- ํ๋ก์ธ์ค์์ ์์์ผ๋ก ๊ฐ๋ ํ์ดํ
- ํ๋ก์ธ์ค๊ฐ ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋๋ค๋ ๋ป
- ์์ ์์ ์ ์ ์๋ฏธ
- ์์ ์์ ์ธ์คํด์ค์ ๊ฐฏ์
Vertex
- Process = {P1, P2, โฆ, Pn}
- ๊ทธ๋ฆผ์์ ๋๊ทธ๋ผ๋ฏธ
- Resource = {R1, R2, โฆ, Rm}
- ๊ทธ๋ฆผ์์ ์ฌ๊ฐํ
Edge
- request edge Pi -> Rj
-
assignment edge Rj -> Pi
- ๊ทธ๋ํ์ cycle์ด ์์ผ๋ฉด deadlock์ด ์๋
- ๊ทธ๋ํ์ cycle์ด ์์ผ๋ฉด
- if only one instance per resoure type, then deadlock
- if several instances per resource type, possibility of deadlock
- ์ผ์ชฝ ๊ทธ๋ฆผ์์ P1 ๋ถํฐ ์์ํด์ ๋ค์ P1์ผ๋ก ๋์์ค๋ cycle ํ ๊ฐ๊ฐ์ด ์๊ณ P2๋ถํฐ ์์ํด์ ๋ค์ P2๋ก ๋์์ค๋ cycle์ด ์กด์ฌํจ, R2 ์์์ ์ธ์คํด์ค๊ฐ 2๊ฐ ์ด์ง๋ง ๋ชจ๋ cycle๋ก ํ์ฑ ๋์ด ์๊ธฐ ๋๋ฌธ์ deadlock ์
- ์ค๋ฅธ์ชฝ์ ๊ทธ๋ฆผ์ P1๋ถํฐ ์์ํด์ cycle์ ์์ง๋ง R1๊ณผ R2์ ์์์ ์ธ์คํด์ค๊ฐ 2๊ฐ์ฉ ์๊ธฐ ๋๋ฌธ์ deadlock์ด ์๋ ๋๋จธ์ง ํ๋์ ์ธ์คํด์ค๋ ์ฌ์ดํด๊ณผ ๋ฌด๊ดํ๊ฒ ๋์ํ๊ณ ์์
Deadlock์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
1. Deadlock Prevention
- ์์ ํ ๋น ์ Deadlock์ 4๊ฐ์ง ํ์ ์กฐ๊ฑด ์ค ์ด๋ ํ๋๊ฐ ๋ง์กฑ๋์ง ์๋๋ก ํ๋ ๊ฒ
2. Deadlock Avoidance
- ์์ ์์ฒญ์ ๋ํ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ด์ฉํด์ deadlock์ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ์๋ง ์์์ ํ ๋น
- ์์คํ state๊ฐ ์๋ state๋ก ๋์์ฌ ์ ์๋ ๊ฒฝ์ฐ์๋ง ์์ ํ ๋น
3. Deadlock Detection and recovery
- Deadlock ๋ฐ์์ ํ์ฉํ๋ ๊ทธ์ ๋ํ detection ๋ฃจํด์ ๋์ด deadlock ๋ฐ๊ฒฌ์ recover
4. Deadlock Ignorance
- Deadlock์ ์์คํ ์ด ์ฑ ์์ง์ง ์์
-
UNIX๋ฅผ ํฌํจํ ๋๋ถ๋ถ์ OS๊ฐ ์ฑํ
- 1๋ฒ๊ณผ 2๋ฒ์ deadlock์ด ์์๊ธฐ๊ฒ ๋ฏธ์ฐ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ
- 3๋ฒ๊ณผ 4๋ฒ์ deadlock์ด ์๊ธฐ๋ ์ง ๋ง๋ ์ง ๋ด๋น๋
Deadlock Prevention
Mutual Exclusion
- ๊ณต์ ํด์๋ ์๋๋ ์์์ ๊ฒฝ์ฐ ๋ฐ๋์ ์ฑ๋ฆฝํด์ผ ํจ
Hold and wait
- ํ๋ก์ธ์ค๊ฐ ์์์ ์์ฒญํ ๋ ์ด๋ค ์์๋ ๊ฐ์ง๊ณ ์์ง ์์
- ๋ฐฉ๋ฒ 1. ํ๋ก์ธ์ค ์์ ์ ๋ชจ๋ ํ์ํ ์์์ ํ ๋น ๋ฐ๊ฒ ํ๋ ๋ฐฉ๋ฒ
- ๋ฐฉ๋ฒ 2. ์์์ด ํ์ํ ๊ฒฝ์ฐ ๋ณด์ ์์์ ๋ชจ๋ ๋๊ณ ๋ค์ ์์ฒญ
No Preemption
- process๊ฐ ์ด๋ค ์์์ ๊ธฐ๋ค๋ ค์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ฏธ ๋ณด์ ํ ์์์ด ์ ์ ๋จ
- ๋ชจ๋ ํ์ํ ์์์ ์ป์ ์ ์์ ๋ ๊ทธ ํ๋ก์ธ์ค๋ ๋ค์ ์์
- State๋ฅผ ์ฝ๊ฒ saveํ๊ณ restoreํ ์ ์๋ ์์์์ ์ฃผ๋ก ์ฌ์ฉ (CPU, memory)
Circular Wait
- ๋ชจ๋ ์์ ์ ํ์ ํ ๋น ์์๋ฅผ ์ ํ์ฌ ์ ํด์ง ์์๋๋ก๋ง ์์ ํ ๋น
- ์๋ฅผ ๋ค์ด ์์๊ฐ 3์ธ ์์ Ri๋ฅผ ๋ณด์ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์์๊ฐ 1์ธ ์์ Rj์ ํ ๋น๋ฐ๊ธฐ ์ํด์๋ ์ฐ์ Ri๋ฅผ releaseํด์ผ ํจ
-> Utilization ์ ํ, throughput ๊ฐ์, starvation ๋ฌธ์
Deadlock Avoidance
Deadlock avoidance
- ์์ ์์ฒญ์ ๋ํ ๋ถ๊ฐ์ ๋ณด๋ฅผ ์ด์ฉํด์ ์์ ํ ๋น์ด deadlock์ผ๋ก ๋ถํฐ ์์ (safe)ํ์ง๋ฅผ ๋์ ์ผ๋ก ์กฐ์ฌํด์ ์์ ํ ๊ฒฝ์ฐ์๋ง ํ ๋น
- ๊ฐ์ฅ ๋จ์ํ๊ณ ์ผ๋ฐ์ ์ธ ๋ชจ๋ธ์ ํ๋ก์ธ์ค๋ค์ด ํ์๋ก ํ๋ ๊ฐ ์์๋ณ ์ต๋ ์ฌ์ฉ๋์ ๋ฏธ๋ฆฌ ์ ์ธํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์
safe state
- ์์คํ ๋ด์ ํ๋ก์ธ์ค๋ค์ ๋ํ safe sequence๊ฐ ์กด์ฌํ๋ ์ํ
safe sequence
- ํ๋ก์ธ์ค์ sequence <P1, P2, โฆ, Pn>์ด safeํ๋ ค๋ฉด Pi(1<= i <=n)์ ์์ ์์ฒญ์ด ๊ฐ์ฉ ์์ + ๋ชจ๋ Pj(j < i)์ ๋ณด์ ์์์ ์ํด ์ถฉ์กฑ๋์ด์ผ ํจ
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ๋ค์ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ ํ๋ก์ธ์ค์ ์ํ์ ๋ณด์ฅ
- Pi์ ์์ ์์ฒญ์ด ์ฆ์ ์ถฉ์กฑ๋ ์ ์์ผ๋ฉด ๋ชจ๋ Pj(j < i)๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆผ
- Pi-1์ด ์ข ๋ฃ๋๋ฉด Pi์ ์์ ์์ฒญ์ ๋ง์กฑ์์ผ ์ํํจ
Deadlock Avoidance
- ์์คํ ์ด safe state์ ์์ผ๋ฉด -> no deadlock
- ์์คํ ์ด unsafe state์ ์์ผ๋ฉด -> possibility of deadlock
- Deadlock Avoidance
- ์์คํ ์ด unsafe state์ ๋ค์ด๊ฐ์ง ์๋ ๊ฒ์ ๋ณด์ฅ
2๊ฐ์ง ๊ฒฝ์ฐ์ avoidance ์๊ณ ๋ฆฌ์ฆ
- Single instance per resource types
- Resource Allocation Graph algorithm ์ฌ์ฉ
- Multiple instance per resource types
- Bankerโs Algorithm ์ฌ์ฉ
Resource Allocation Graph algorithm
์ ์ ์ ํ ๋ฒ ์์ ๊น ๋ง ๊นํ ๊ฒฝ์ฐ๋ฅผ ํ์ํ ๊ฒ
์ ์ ์ ํฌํจํด์ ์ฌ์ดํด์ด ๋ง๋ค์ด ์ง๊ฑฐ ๊ฐ์ผ๋ฉด ์์ ์์์ ์ฃผ์ง ์์
Example of Bankerโs Algorithm
Deadlock Detection and recovery
Deadlock Detection
- Resource type ๋น single instance์ธ ๊ฒฝ์ฐ
- ์์ํ ๋น ๊ทธ๋ํ์์์ cycle์ด ๊ณง deadlock์ ์๋ฏธ
- Resource type ๋น multiple instance์ธ ๊ฒฝ์ฐ
- Bankerโs algorithm๊ณผ ์ ์ฌํ ๋ฐฉ๋ฒ ํ์ฉ
Wait-for graph ์๊ณ ๋ฆฌ์ฆ
- Resource type ๋น single instance์ธ ๊ฒฝ์ฐ
- Wait-for graph
- ์์ํ ๋น ๊ทธ๋ํ์ ๋ณํ
- ํ๋ก์ธ์ค๋ง์ผ๋ก node ๊ตฌ์ฑ
- Pi๊ฐ ๊ฐ์ง๊ณ ์๋ ์์์ Pk๊ฐ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ Pk -> Pi
- Algorithm
- Wait-for graph์ ์ฌ์ดํด์ด ์กด์ฌํ๋์ง๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์กฐ์ฌ
- O(n^2)
Deadlock Ignorance
- Deadlock์ด ์ผ์ด๋์ง ์๋๋ค๊ณ ์๊ฐํ๊ณ ์๋ฌด๋ฐ ์กฐ์น๋ ์ทจํ์ง ์์
- Deadlock์ด ๋งค์ฐ ๋๋ฌผ๊ฒ ๋ฐ์ํ๋ฏ๋ก deadlock์ ๋ํ ์กฐ์น ์์ฒด๊ฐ ๋ ํฐ overhead์ผ ์ ์์
- ๋ง์ฝ, ์์คํ ์ deadlock์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์์คํ ์ด ๋น์ ์์ ์ผ๋ก ์๋ํ๋ ๊ฒ์ ๋๋ผ๋ฉด ์ง์ process๋ฅผ ์ฃฝ์ด๋ ๋ฐฉ๋ฒ ๋ฑ์ผ๋ก ๋์ฒํจ
- UNIX, WINDOWS ๋ฑ ๋๋ถ๋ถ์ ๋ฒ์ฉ OS๊ฐ ์ฑํํจ