reference: kocw์ ๋ฐํจ๊ฒฝ ๊ต์๋ ๊ฐ์์ ๊ถ์ง์ฑ ๊ต์๋ ๊ฐ์(๋ํ ์ ๊ท ์์
)
์์
์ ๋ฃ๊ณ ๋์ ๊ฐ์ ๊ต์ฌ๋ฅผ ํ์ดํํ๊ณ ํ๊ธฐํ ๋ถ๋ถ์ ์ถ๊ฐ์ ์ผ๋ก ์ ๋ฆฌํ์์ต๋๋ค.
์น๋ทฐ์์ toc๋ฅผ ์ ๊ณตํฉ๋๋ค.
github์ md ํ์ผ๋ก ๋ณด๋ ๊ฒ ํธํ์๋ค๋ฉด, ์ฌ๊ธฐ๋ก ์ด๋ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
1 deadlock, resource์ ์ ์
deadlock
- ์ผ๋ จ์ ํ๋ก์ธ์ค๋ค์ด ์๋ก๊ฐ ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ block๋ ์ํ
- ์ด๋ ๋๊ตฌ๋ ์๋ณด๋ฅผ ํ์ง ์์ผ๋ฉด ๋์ด์ ์งํ๋์ง ์๋ ์ํ
Resource
- ํ๋์จ์ด, ์ํํธ์จ์ด ๋ฑ์ ํฌํจํ ๊ฐ๋
- ์: 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
-
- deadlock example 1 (ํ๋์จ์ด ๋ฆฌ์์ค)
2 Deadlock ๋ฐ์ ์กฐ๊ฑด
2-1. Mutual exclusion (์ํธ ๋ฐฐ์ )
- ๋งค ์๊ฐ ํ๋์ ํ๋ก์ธ์ค๋ง์ด ์์์ ์ฌ์ฉํ ์ ์๋ค.
- ์ด๋ค ์์์ ๊ฐ์ง๊ณ ์๋ ๋์์ ๊ทธ ์์์ ๋ ์ ์ ์ผ๋ก ์ด๋ค.
2-2. No preemption (๋น์ ์ )
- ํ๋ก์ธ์ค๋ ์์์ ์ค์ค๋ก ๋ด์ด๋์ ๋ฟ ๊ฐ์ ๋ก ๋นผ์๊ธฐ์ง ์๋๋ค.
- ์์์ ๊ฐ์ ๋ก ๋นผ์์ ์ ์๋ค.
2-3. Hold and wait (๋ณด์ ๋๊ธฐ)
- ์์์ ๊ฐ์ง ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆด ๋ ๋ณด์ ์์(์์ ์ ์์)์ ๋์ง ์๊ณ ๊ณ์ ๊ฐ์ง๊ณ ์๋๋ค.
2-4. Circular wait (์ํ ๋๊ธฐ)
- ์์์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค ๊ฐ์ ์ฌ์ดํด์ด ํ์ฑ๋์ด์ผ ํ๋ค.
3 Resource Allocation Graph
3-1. ์์ ํ ๋น ๊ทธ๋ํ
์์ ํ ๋น ๊ทธ๋ํ๋ฅผ ํตํด deadlock ์ํ์ธ์ง ์๋์ง๋ฅผ ํ๊ฐ๋ฆํ ์ ์๋ค.

- ๋๊ทธ๋ ๊ฑด ํ๋ก์ธ์ค
- ๋ค๋ชจ๋ ๋ฆฌ์์ค
- ์ ๊ฐ์๋ ๋ฆฌ์์ค์ ๊ฐ์-instance์ ๊ฐ์
- Resource๋ ํ๋์ Block์ ์ฌ๋ฌ๊ฐ๊ฐ ์์ ์ ์๋ค.
- Process์์ ๋๊ฐ๋ ํ์ดํ๋ Resource๋ฅผ ์์ฒญํ๊ณ ์๋ ์ํ๋ฅผ ๋ํ๋ธ๋ค.
- Resource์์ ๋๊ฐ๋ ํ์ดํ๋ ํด๋น Resource๋ฅผ Process๊ฐ ๋ณด์ ํ๊ณ ์์์ ๋ํ๋ธ๋ค.
3-2. deadlock ์ํ ํ๋จ
- ๊ทธ๋ํ์ cycle์ด ์๋ค๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ deadlock์ด ์๋๋ค.
- ๊ทธ๋ํ์ cycle์ด ์๊ณ ๋ชจ๋ Resouce Block์ ์์์ด ํ๋์ฉ๋ง ์๋ค๋ฉด ๋ฐ๋์ deadlock ์ํ์ด๋ค.
- ๊ทธ๋ํ์ cycle์ด ์์ง๋ง ๋ชจ๋ Resoucr Block์ ์์์ด ํ๋์ฉ๋ง ์๋ ๊ฒ์ด ์๋๋ผ๋ฉด (์ฌ๋ฌ๊ฐ๊ฐ ์๋ Block์ด ์กด์ฌํ๋ค๋ฉด) deadlock์ผ ์๋ ์๊ณ ์๋์๋ ์๋ค. (์ถ๊ฐ์ ๊ฒ์ฆ ํ์)

- ์ผ์ชฝ ๊ทธ๋ฆผ์ deadlock ์ํ์ด๋ค.
- ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ cycle์ด ํ์ฑ๋์ด์์ง๋ง deadlock ์ํ๊ฐ ์๋๋ค.
- P2๊ฐ ์ธ์ ๊ฐ ๋๋๊ฒ ๋์ด instance 1๊ฐ๊ฐ free ๋๋ฉด P1์ R1์ ์ ์ ํ ์ ์๊ณ P3๋ R1์ ๋๋ฒ์งธ resource๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒ์ deadlock์ด ์๋๋ค.
4 Deadlock์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
- Deadlock Prevention
- ์์ ํ ๋น ์ Deadlock์ 4๊ฐ์ง ํ์ ์กฐ๊ฑด ์ค ์ด๋ ํ๋๊ฐ ๋ง์กฑ๋์ง ์๋๋ก ํ๋ ๊ฒ
- Deadlock Avoidance
- ์์ ์์ฒญ์ ๋ํ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ deadlock์ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ (์ฆ, ์์คํ state๊ฐ ์๋ state ๋์์ฌ ์ ์๋ ๊ฒฝ์ฐ)์๋ง ์์ ํ ๋น
- Deadlock Detection and Recovery
- deadlock ๋ฐ์์ ํ์ฉํ๋ ๊ทธ์ ๋ํ detection ๋ฃจํด์ ๋์ด deadlock ๋ฐ๊ฒฌ ์ recovery
- Deadlock Ignorance
- Deadlock์ ์์คํ ์ด ์ฑ ์์ง์ง ์๋๋ค. UNIX๋ฅผ ํฌํจํ ๋๋ถ๋ถ์ OS๊ฐ ์ฑํํ๊ณ ์๋ ๋ฐฉ์์ด๋ค.
4-1. Deadlock Prevention
์์ ํ ๋น ์ Deadlock์ 4๊ฐ์ง ํ์ ์กฐ๊ฑด ์ค ์ด๋ ํ๋๊ฐ ๋ง์กฑ๋์ง ์๋๋ก ํ๋ ๊ฒ
1) Mutual exclusion
- ๋ฐฐ์ ๋ถ๊ฐํ๋ค. ๊ณต์ ํด์๋ ์๋๋ ์์์ ๋ฐ๋์ ์ฑ๋ฆฝํ๊ฒ ๋์ด ์๋ค.
2) Hold and Wait
- ํ๋ก์ธ์ค๊ฐ ์์์ ์์ฒญํ ๋ ๋ค๋ฅธ ์ด๋ค ์์๋ ๊ฐ์ง๊ณ ์์ง ์์์ผ ํ๋ค.
- hold๋ฅผ ํ์ง ์๋๋ก ํด์ deadlock์ด ๋ฐ์ํ์ง ์๋๋ก ํ๋ค.
- ๋ฐฉ๋ฒ 1. ํ๋ก์ธ์ค ์์ ์ ๋ชจ๋ ํ์ํ ์์์ ํ ๋น๋ฐ๊ฒ ํ๋ ๋ฐฉ๋ฒ
- ๋จ์ : ํ๋ก์ธ์ค๊ฐ ๋งค ์์ ํ์ํ ์์์ด ๋ค๋ฅด๊ธฐ์ ์์์ ๋นํจ์จ์ฑ์ด ๋์์ง๋ฏ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค
- ๋ฐฉ๋ฒ 2. (์์์ ๋ด๋์ง ์๊ณ ์์ฒญํ ๊ฒฝ์ฐ deadlock ๋ฐ์ํ๊ธฐ์) ์์์ด ํ์ํ ๊ฒฝ์ฐ ๋ณด์ ์์์ ๋ชจ๋ ๋ฐํ ๋ค ๋ค์ ์์ฒญ
- ์์ ๋นํจ์จ์ฑ์ด ๋์ง ์๋ค.
3) No Preemption
- process๊ฐ ์ด๋ค ์์์ ๊ธฐ๋ค๋ ค์ผ ํ๋ ๊ฒฝ์ฐ ์ด๋ฏธ ๋ณด์ ํ ์์์ด ์ ์ ๋จ(๊ฐ์ ๋ก ๋นผ์๊ธธ ์ ์์)
- ๋ชจ๋ ํ์ํ ์์์ ์ป์ ์ ์์ ๋ ํ๋ก์ธ์ค ๋ค์ ์์
- State๋ฅผ ์ฝ๊ฒ save์ ์ฅ, restore๋ณต๊ตฌํ ์ ์๋(=context switch) ์์์์ ์ฃผ๋ก ์ฌ์ฉ (CPU, memory)
4) Circular wait
- ๋ชจ๋ ์์ ์ ํ์ ํ ๋น ์์๋ฅผ ์ ํ์ฌ ์ ํด์ง ์์๋๋ก๋ง ์์์ ํ ๋นํ๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด ์๋ฐฉํฅ์ผ๋ก์ ์์ ์๊ตฌ๊ฐ ์ด๋ฃจ์ด์ง ์ ์์ผ๋ฏ๋ก Cycle์ด ์๊ธธ ์ฐ๋ ค๊ฐ ์ฌ๋ผ์ง๋ค.
- ์๋ฅผ ๋ค์ด ์์๊ฐ 3์ธ ์์ Ri ๋ฅผ ๋ณด์ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์์ 1์ธ ์์ Rj๋ฅผ ํ ๋น๋ฐ๊ธฐ ์ํด์๋ ์ฐ์ Ri๋ฅผ releaseํด์ผ ํ๋ค.
ํ์ง๋ง ์์ ๋ฐฉ๋ฒ๋ค์ Utilization ์์ ์ด์ฉ๋ฅ ์ ํ, throughput ์ฒ๋ฆฌ๋ ๊ฐ์, starvation ํ์ ๋ฑ์ด ๋ฐ์ํ๋ค.
๋ํ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ deadlock ๋ฐฉ์ง๋ฅผ ์ํ ์ ์ฝ ์กฐ๊ฑด์ด ๋ง๊ธฐ์ ๋นํจ์จ์ ์ด๋ค.
4-2. Deadlock Avoidance
*์ฐธ๊ณ ๋ก prevention๊ณผ avoidance์ ๋์์ค์ ์ฐจ์ด์ ์
- prevention: activeํ๊ฒ ์ ๊ทน์ ์ผ๋ก ๋ง๋๋ค.
- avoidance: ๋ฌธ์ ์ ์ผ๋ก๋ถํฐ ๋ฉ๋ฆฌ ๋จ์ด์ง๋๋ก ํด์ deadlock์ ๋ง๋๋ค.
์ ์
- ์์ ์์ฒญ์ ๋ํ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ด์ฉํด์ deadlock์ผ๋ก๋ถํฐ ์์ (safe)ํ์ง๋ฅผ ๋์ ์ผ๋ก ์กฐ์ฌํด์ ์์ ํ ๊ฒฝ์ฐ์๋ง ์์ ํ ๋น
- ์์คํ ์ด unsafe state์ ๋ค์ด๊ฐ์ง ์๋ ๊ฒ์ ๋ณด์ฅ
- ๊ฐ์ฅ ๋จ์ํ๊ณ ์ผ๋ฐ์ ์ธ ๋ชจ๋ธ์ ํ๋ก์ธ์ค๋ค์ด ํ์๋ก ํ๋ ๊ฐ ์์๋ณ ์ต๋ ์ฌ์ฉ๋์ ๋ฏธ๋ฆฌ ์ ์ธํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์์คํ state๊ฐ ์๋ state ๋์์ฌ ์ ์๋ ๊ฒฝ์ฐ์๋ง ์์ ํ ๋น

safe state: ์์คํ ๋ด์ ํ๋ก์ธ์ค๋ค์ ๋ํ safe sequence๊ฐ ์กด์ฌํ๋ ์ํ
safe sequence:
- ํ๋ก์ธ์ค์ sequence <P1, P2, ..., Pn>์ด safeํ๋ ค๋ฉด Pi์ ์์์์ฒญ์ด "๊ฐ์ฉ ์์ + ๋ชจ๋ Pj (i < i)"์ ์ํด ์ถฉ์กฑ๋์ด์ผ ํจ.
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๋ฉด ๋ค์ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ ํ๋ก์ธ์ค์ ์ํ์ ๋ณด์ฅ
- Pi์ ์์ ์์ฒญ์ด ์ฆ์ ์ถฉ์กฑ๋ ์ ์์ผ๋ฉด ๋ชจ๋ Pj (j < i)๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
- Pi-1์ด ์ข ๋ฃ๋๋ฉด Pi์ ์์์์ฒญ์ ๋ง์กฑ์์ผ ์ํํ๋ค.
์ ๋ฆฌํ๋ฉด:
์์ ์์ฒญ์ ๋ํ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ด์ฉํด์ deadlock ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ์๋ง ์์์ ํ ๋นํด์ค๋ค. ํ๋ก์ธ์ค๊ฐ ์์๋ ๋ ๊ทธ ํ๋ก์ธ์ค๊ฐ ์ต๋๋ก ์ฌ์ฉํ ์์์ ๋ฏธ๋ฆฌ ์๋ ค์ค๋ค. ๋ฐ๋ผ์ ์์์ ์์ฒญ ์ deadlock ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉด ์์์ด ์ถฉ๋ถํด๋ ํ ๋นํด์ฃผ์ง ์๋๋ค.
์์คํ ์ด safe state์ ์์ผ๋ฉด โ no deadlock
์์คํ ์ด unsafe state์ ์์ผ๋ฉด โ possibility of deadlock
2๊ฐ์ง ๊ฒฝ์ฐ์ avoidance ์๊ณ ๋ฆฌ์ฆ
- Single instance per resource types
- Resource Allocation Graph Algorithm ์ฌ์ฉ์ ์ ํ์ดํ๋ claim edge๋ผ๊ณ ํ๋ค. ํ๋ก์ธ์ค๊ฐ ์์์ ๋ฏธ๋์ ์์ฒญํ ์ ์๋ค๋ ๋ป์ด๋ค. ์์ฒญํ๋ฉด request edge๋ก ๋ฐ๋๊ณ ์์์ด release ๋๋ฉด assignment edge๋ ๋ค์ claim edge๋ก ๋ณํ๋ค.
- ๋๋ฒ์งธ ๊ทธ๋ฆผ์์ ์๊ธด request edge์ ๊ฒฝ์ฐ P2๊ฐ R2๋ฅผ ์์ฒญํด๋ ์์์ ํ ๋น๋ฐ์ง ๋ชปํ๋ค. ๋ด์ด์ฃผ๊ฒ ๋๋ค๋ฉด(assignment edge ๋ณ๊ฒฝ ์) ์ธ๋ฒ์งธ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด cycle์ด ํ์ฑ๋์ด deadlock์ด ๋ฐ์ํ ์ ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- Multiple instances per resource types
- Banker's Algorithm
- ๊ฐ ํ๋ก์ธ์ค์ ์ต๋ ์์ฒญ ์์ ์๋ฅผ ์ถฉ์กฑํ๋ ์ํ์ค๊ฐ ์กด์ฌํ๋ฏ๋ก safe state (์ ๋ deadlock์ด ์๊ธฐ์ง ์์)
- ํ์ง๋ง ์์์ด ๋จ์ ๋์๋ ์ต๋ ์์ฒญ์ด ๊ฐ์ฉ ์์ ์๋ณด๋ค ์ ์ผ๋ฉด ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์
- Banker's Algorithm
4-3. Deadlock Detection and Recovery
deadlock ๋ฐ์์ ๊ทธ๋๋ก ๋๋์ง๋ง ๊ทธ์ ๋ํ detection routine์ ๋์ด deadlock ๋ฐ๊ฒฌ ์ recovery ํ๋ค.
Deadlock Detection
- resource types ๋น Single instance์ธ ๊ฒฝ์ฐ
- Resource Allocation Graph์์์ cycle์ด ๊ณง deadlock์ ์๋ฏธ
- Wait-for graph
- ์์ ํ ๋น ๊ทธ๋ํ์์ ํ๋ก์ธ์ค๋ง์ผ๋ก node ๊ตฌ์ฑ๋ ๊ทธ๋ํ๋ฅผ ๋งํจ
- Wait-for graph์ ์ฌ์ดํด์ด ์กด์ฌํ๋์ง ์ฃผ๊ธฐ์ ์ผ๋ก ์กฐ์ฌํ๋ Algorithm O(n^2) ๋์
- resource types ๋น Multiple instances์ธ ๊ฒฝ์ฐ
- Banker's Algorithm๊ณผ ์ ์ฌํ ๋ฐฉ๋ฒ ํ์ฉ
Recovery
- Process termination - ํ๋ก์ธ์ค ์ฃฝ์ด๊ธฐ
- deadlock์ ์ฐ๋ฃจ๋ ํ๋ก์ธ์ค๋ค์ ๋ชจ๋ ์ฃฝ์
- deadlock์ ์ฐ๋ฃจ๋ ํ๋ก์ธ์ค๋ค์ ํ๋์ฉ ์ฃฝ์ (deadlock์ด ์์ด์ง ๋๊น์ง)
- Resource preemption - ์์ ๋บ๊ธฐ
- deadlock์ ์ฐ๋ฃจ๋ ํ๋ก์ธ์ค๋ค๋ก๋ถํฐ ์์์ ๋บ๋ ๋ฐฉ๋ฒ
- ๋น์ฉ์ ์ต์ํํ victim์ ์ ์
- victim (ํฌ์์ ํ๋ก์ธ์ค)๋ฅผ ํ๋ ์ ์ ํด์ ์์์ ๊ฐ์ ๋ก ๋บ์ โ safe state๋ก rollbackํ์ฌ process๋ฅผ restart
- ๋์ผํ ํ๋ก์ธ์ค๊ฐ ๊ณ์ victim์ผ๋ก ์ ์ ๋๋ฉด starvation ๋ฌธ์ ๋ฐ์ โ cost factor(๋น์ฉ์ ์ธก๋ฉด)์์ rollback ํ์ ๊ฐ์ด ๊ณ ๋ คํด์ผ ํจ.
4-4. Deadlock Ignorance
- ํ์ฌ ๋๋ถ๋ถ์ ์ด์์ฒด์ ์์ ์ฑํํ ๋ฐฉ๋ฒ์ผ๋ก, deadlock์ด ๋ฐ์ํ์ง ์๋๋ค ์๊ฐํ๊ณ ์๋ฌด๋ฐ ์กฐ์น๋ ์ทจํ์ง ์๋ ๊ฒ์ด๋ค.
- deadlock์ ๋งค์ฐ ๋๋ฌผ๊ฒ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์กฐ์น๋ฅผ ์ทจํ๋ ๊ฒ์ด ์คํ๋ ค ๋ ํฐ ์ค๋ฒํค๋์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ง์ฝ ์์คํ ์ deadlock์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์์คํ ์ด ๋๋ ค์ง๊ฑฐ๋ ํ๋ก์ธ์ค๊ฐ ๋ฉ์ถ ๊ฒ์ ์ฌ์ฉ์๊ฐ ๋๋ ์ ์์ผ๋ฏ๋ก ์ผ๋ถ ํ๋ก์ธ์ค๋ฅผ ์ง์ ์ฃฝ์ด๋ ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก ๋์ฒํ๋ค.
- UNIX๋ฅผ ํฌํจํ ๋๋ถ๋ถ์ OS๊ฐ ์ฑํํ๊ณ ์๋ค.
'OS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
10์ฅ File Systems (0) | 2021.06.19 |
---|---|
9์ฅ Virtual Memory (0) | 2021.06.19 |
8์ฅ Memory Management (0) | 2021.06.19 |
6์ฅ Process Synchronization (0) | 2021.06.19 |
5์ฅ CPU scheduling (0) | 2021.06.18 |
4์ฅ Process Management (0) | 2021.06.18 |