The Deadlock Problem
๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก์ธ์ค๊ฐ ์ผ์ ํ ๋๋ ํ๋ก์ธ์ค๊ฐ ์ผ์ ํ๊ธฐ ์ํด์ ํ์ํ ์์์ด ์์ด์ผ ํ๋ค. ๋ํ์ ์ผ๋ก CPU, ๋ฉ๋ชจ๋ฆฌ, ๋ฒ์ค ๋ฑ์ ํ๋์จ์ด ์์๋ ์๊ณ , ์ธ๋ง ํฌ์ด ๋๋ lock ๊ฐ์ ์ํํธ์จ์ด ์์๋ ์๋ค.
=> ๋ฝ์ ํ๋ณดํด์ผ ์ผ์ ํ ์ ์์ผ๋๊น.
=> ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ ์ฅํ ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋ฒ์ค๋ฅผ ํ๋ณดํด์ผ ํ๋ค.
=> CPU ์ค์ผ์ค๋ง๋ ๋ง์ฐฌ๊ฐ์ง, CPU๋ฅผ ํ๋ณด๋ฅผ ํด์ผ ํ๋ก์ธ์ค๊ฐ ๋์๋ ์ ์๋ค.
ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ช
์์ ์ผ๋ก ์์์ ์์ฒญํ์ง ์์๋, ์์คํ
๋ด์๋ ์์ฐ์ค๋ฝ๊ฒ ์์์ ํ๋ณดํ๊ณ ๋ฐ๋ฉํ๋ ๊ณผ์ ์ด ๋ฐ์ํ๊ณ ์๋ค.
๊ทผ๋ฐ ์ด๋ค ์ผ์ ํ๊ธฐ ์ํด ํ์ํ ๋ฆฌ์์ค๊ฐ ํ๋๊ฐ ์๋๋ค. ์ฌ๋ฌ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํด์ผ ์ง๋๋ฅผ ๋๊ฐ ์ ์๋๋ฐ, ์ด์ด ๋์๊ฒ ์ผ๋ถ ๋ฆฌ์์ค๋ง ํ๋ณดํ๊ณ ๋๋จธ์ง ๋ฆฌ์์ค๋ ํ๋ณด๋ฅผ ๋ชป ํด์ ๊ทธ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๊ทธ ๋ฆฌ์์ค๋ฅผ ๋์ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
A๋ B๋ผ๋ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง ๋ฆฌ์์ค๋ฅผ ๋๊ธฐํ๊ณ , B๋ C๋ผ๋ ํ๋ก์ธ์ค๊ฐ ๊ฐ๊ณ ์๋ ๋ฆฌ์์ค๋ฅผ ๋๊ธฐํ๋ ๊ฒ ์ฒ๋ผ ์ฐ์์ ์ผ๋ก ๋๊ธฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด๋ ๊ฒ ์ฐ์์ ์ธ ๋๊ธฐ๋ก ์ธํด ์ ์ฒด ํ๋ก์ธ์ค๊ฐ ์ง๋๋ฅผ ๋ชป๋๊ฐ๊ณ ๋๊ธฐ๋ฅผ ํ๊ณ ์๋ ์ํฉ์ ๋ฐ๋๋ฝ (๊ต์ฐฉ์ํ)์ด ๋ฐ์ํ๋ค๊ณ ํ๋ค.
Deadlock Characterization
- Mutual exclusion: ์์์ ๊ณต์ ๊ฐ ๋ถ๊ฐ๋ฅํด์ผ ํ๋ค. => ๊ณต์ ๊ฐ๋ฅํ ์์์ ๋ฐ๋๋ฝ๊ณผ ์๊ด X
- No preemption: ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์์์ ์ก๊ณ ์์ผ๋ฉด ๊ทธ ์์์ ๊ทธ ํ๋ก์ธ์ค๊ฐ ์๋ฐ์ ์ผ๋ก ๋์ ๋๊น์ง๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ๊ทธ ์์์ ์ธ ์ ์๋ค๋ ๋ป.
์์์ ๋๊ฒ ๋๋ ํ์๋ ์์์ ์ก๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ์ผ์ ๋๋ง์น๊ฒ ๋ผ์ ์๋ฐ์ ์ผ๋ก ๋๋ ๊ฒฝ์ฐ๋ง ์๋ค.
=> OS๋ ํ๋ก์ธ์ค์ ์์์ ๊ฐ์ ๋ก ๋บ์ง ์๋๋ค.
- Hold and wait: ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์ผ์ ํ๊ธฐ ์ํด ํ์ํ ์์์ ์ฌ๋ฌ ๊ฐ๊ฐ ์๋ค๊ณ ํ๋ค.
๊ทผ๋ฐ ๋ฐ์ฏค ์ก๊ณ ๋๋จธ์ง ๋ฐ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ ๋, ๋๋จธ์ง ๋ฐ์ ์ก์ ์ ์๋ ์ํฉ์ด๋ค ๋ผ๊ณ ํ์ธํ์ ๋, ์,, ๋๋ ์ผ์ ์ด์งํผ ๋ชป ํ๋๊น ๋๋จธ์ง ๋ฐ์ ๋์๋ฒ๋ฆฌ์ ์ด๋ฐ ์์ผ๋ก ๋์ํ๋ ๊ฒ ์๋๋ผ, ์์์ ์ก์ ์ฑ๋ก ๋๊ธฐ๋ฅผ ํ๊ฒ ๋๋ค๋ ์กฐ๊ฑด
- Circular wait: P0๋ P1์ด ๊ฐ๊ณ ์๋ ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๊ณ , P1์ P2๊ฐ ๊ฐ๊ณ ์๋ ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์ญ์ญ ๊ฐ์ Pn์ด ๋ค์ P0๊ฐ ๊ฐ๊ณ ์๋ ์์์ ๊ธฐ๋ค๋ฆฌ๋ "์ํ ๋๊ธฐ"๊ฐ ๋ฐ์ํด์ผ ํ๋ค.
Resource-Allocation Graph
๋ฐ๋๋ฝ์ formalํ๊ฒ ์ ์ํ๊ธฐ ์ํด์ ๋ชจ๋ธ๋งํ๊ธฐ ์ํด์ ๊ทธ๋ํ๋ฅผ ์ฌ์ฉํ๋๋ฐ ๋ํ์ ์ธ ๋ชจ๋ธ๋ง ํด์ด Resource- Allocation graph์ด๋ค.
Vertex๋ 2๊ฐ์ง๊ฐ ์๋ค.
ํ๋ก์ธ์ค๋ค์ด ํ๋์ Vertex๊ฐ ๋๊ณ , ์์๋ค์ด ํ๋์ Vertex๊ฐ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๊ฐ๊ฐ ์๊ณ ์์์ ์ข
๋ฅ๋ ์ฌ๋ฌ ๊ฐ๊ฐ ์์ ์ ์๋ค.
ํ๋ก์ธ์ค -> ์์ ๋ฐฉํฅ์ ํ์ดํ๋ Request๋ฅผ ์๋ฏธํ๊ณ , ์์ -> ํ๋ก์ธ์ค ๋ฐฉํฅ์ ํ์ดํ๋ Allocation์ ์๋ฏธํ๋ค.
์์ ์์์์๋ P1์ R1์ ์์ฒญํ๊ณ ์๋ค. R1์ instance๋ ํ๋์ธ๋ฐ ๊ทธ ํ๋๋ P2์๊ฒ ํ ๋น๋์ด ์๊ธฐ ๋๋ฌธ์ P1์ ๋ฆฌ์์ค๋ฅผ ํ ๋น๋ฐ์ ์ ์์ด ๋๊ธฐํ๊ณ ์๋ค.
Basic Facts
Resource allocation graph๊ฐ edge๋ค๋ก ์ด๋ฃจ์ด์ง cycle์ ๊ฐ๊ณ ์์ง ์์ผ๋ฉด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋ค.
cycle์ด ์๋ค๋ฉด ์ฆ, ์ํ ๋๊ธฐ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ๋ฐ๋๋ฝ์ด๋? ๊ทธ๊ฑด ์๋๋ค.
resource type๋ง๋ค instance๊ฐ ํ๋๋ฉด ๋ฐ๋๋ฝ์ด์ง๋ง instance๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ์ํฉ์์ cycle์ด ๋ฐ์ํ๋ค๋ฉด ๋ฐ๋๋ฝ์ผ ์๋ ์๊ณ ์๋ ์๋ ์๋ค.
์์ ์์์์๋ 2๊ฐ์ ์ฌ์ดํด์ด ์กด์ฌํ๋ค.
ํ์ง๋ง R2์ instance๊ฐ 2๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ ์์๋ ๋ฐ๋๋ฝ์ผ ์๋ ์๊ณ , ์๋ ์๋ ์๋ค.
๊ทธ๋ฐ๋ฐ ๋ชจ๋๊ฐ ์ผ์ ํ์ง ๋ชปํ๊ณ ๋๊ธฐ๋ง ํ๊ณ ์์ผ๋ฏ๋ก ๋ฐ๋๋ฝ์ด ๋ง๋ค.
P1์ด ์ผ์ ํ๊ธฐ ์ํด์๋ R1์ ํ๋ณดํด์ผ ํ๋๋ฐ R1์ P2๊ฐ ์ง๋๋ฅผ ๋๊ฐ์ ๋ค ์ฐ๊ณ ๋์์ผ ํ๋ค.
P2๊ฐ ์ง๋๋ฅผ ๋๊ฐ๋ ค๋ฉด R3๋ฅผ ํ๋ณดํด์ผ ํ๋๋ฐ R3๋ P3๊ฐ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ P3๊ฐ ์ง๋๊ฐ ๋๊ฐ์ ๋๋์ผ ํ๋ค.
P3๊ฐ ์ง๋๋ฅผ ๋๊ฐ๋ ค๋ฉด R2๋ฅผ ํ๋ณดํด์ผ ํ๋๋ฐ P1๊ณผ P2๊ฐ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ P1, P2 ์ค ํ๋๊ฐ ์ง๋๋ฅผ ๋๊ฐ์ ๋๋ด๊ณ ์์์ ๋ฐ๋ฉํด์ผ ํ๋ค.
=> ์๋ก๊ฐ ์๋ก๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋๋ฝ์ด๋ค.
์ด ์์์์ ์ญ์ ์ฌ์ดํด์ด ๋ฐ์ํ์ง๋ง, ์์ ๊ฒฝ์ฐ์ ๋ฐ๋๋ฝ์ด ์๋๋ค.
P2๊ฐ ์ผ์ ๋ง์น๊ณ R1์ ๋ฐ๋ฉํ๊ฒ ๋๋ฉด, P1์ ์์์ ํ๋ณดํ์ฌ ์ผ์ ํ ์๊ฐ ์๋ค.
P3 ์ญ์ P4๊ฐ ์ผ์ ๋ง์น๊ณ R2๋ฅผ ๋ฐ๋ฉํ๊ฑฐ๋, ์์์ ํ๋ณดํ P1์ด ์ผ์ ๋ง์น๊ณ R2๋ฅผ ๋ฐ๋ฉํ๊ฒ ๋๋ฉด ์ผ์ ํ ์๊ฐ ์๋ค.
=> ์ธ์ ๊ฐ ๋ชจ๋๊ฐ ์ผ์ ๋ง์น ์ ์์ผ๋ฏ๋ก ๋ฐ๋๋ฝ์ด ์๋๋ค.
Methods for Handling Deadlocks
OS๋ ๋ฐ๋๋ฝ์ ๋ํด์ ์ด๋ป๊ฒ ๋์ฒํ ๊น.
1. ์ ๋๋ก ๋ฐ๋๋ฝ ์์ฒด๊ฐ ๋ฐ์ํ์ง ๋ชปํ๋๋ก ํ๋ ๋ฐฉ๋ฒ.
=> Prevent์ Avoidance 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
2. ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ ๊ฒ์ ํ์ฉํ๋, ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ ๋๋ ์กฐ์น๋ฅผ ์ทจํด์ค๋ค.
=> ํ์์ ๊ฐ์๋ฅผ ํ๋ค๊ฐ ๋ฐ์ํ๋ฉด ์กฐ์น
3. ๋ฐ๋๋ฝ์ ๋ฌด์ํ๋ ์ ๋ต
=> ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ฉด ์ฌ์ฉ์๊ฐ ์ปดํจํฐ๋ฅผ ๊ป๋ค ์ผ์ผ ํ๋ค.
๋ง๋ ์ ๋๋ ์ ๋ต์ฒ๋ผ ๋ณด์ด์ง๋ง, ์์ธ๋ก ์์ฆ ๋๋ถ๋ถ์ OS๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๋ฐฉ์์ด๋ค.
๊ทธ ๋งํผ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ํ๋ฅ ์ด ๋งค์ฐ ๋๋ฌผ๋ค๋ ๊ฒ์ด๋ค.
=> ์์ฆ ์์คํ ๋ค์ ์์์ด ํ๋ถํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋๋ฝ์ด ์ ๋ฐ์ํ์ง ์๋๋ค.
๊ทธ๋ ๋ค๊ณ ์ ๋ ๋ฐ์ ์ ํ๋ ๊ฒ์ ์๋๋ค.
๋ฝ์ด๋ ์ธ๋งํฌ์ด์ ๊ฒฝ์ฐ ์ด๋ฅผ ํ๋ณดํ๊ธฐ ์ํ ๊ฒฝ์์ด ์์ฒญ ์น์ดํ๊ฒ ์ผ์ด๋๋ค.
ํนํ ๋ฉํฐ ์ฝ์ด๋ ๋ฉํฐ ์ค๋ ๋์ ๊ฒฝ์ฐ ๋์ฑ ์น์ดํ๊ฒ ๋ฐ์ํ๋ค.
=> ๋ฐ์ดํฐ ๋ฒ ์ด์ค, ์ ํ๋ฆฌ์ผ์ด์
(์ํํธ์จ์ด) ์
์ฅ์์๋ ์์ฒญ ์์ฃผ ๋ฐ์ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด์์ฒด์ ์
์ฅ์์ ๋ณผ ๋ ์ด์์ฒด์ ๊ฐ ๊ด๋ฆฌํ๋ ์์๋ค ์ฌ์ด์๋ ๊ฒฝ์์ด ๊ทธ๋ ๊ฒ ์น์ดํ๊ฒ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์, ๋ฐ๋๋ฝ์ด ์ ๋ฐ์ํ์ง ์๋๋ผ.
๊ทธ๋์ ๊ตณ์ด ๋ฐ๋๋ฝ๊น์ง ์ ๊ฒฝ์ฐ๋ฉด์๊น์ง ์ด์์ฒด์ ๊ฐ ์ผ์ ํด์ค ํ์๊ฐ ์๋๋ผ๋ ๊ฒ.
=> ๊ทธ๋ผ ์ ๋ฐฐ์ฐ๋?
์ด์์ฒด์ ์์๋ ์ค์ํ์ง ์๋๋ผ๋ ๋ฐ๋๋ฝ ๊ฐ๋
์์ฒด๊ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์.
์๊น ๋งํ๋ค์ํผ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์์คํ
์์๋ ์ด ๋ฌธ์ ๊ฐ ๋งค์ฐ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค.
์์์ด ๋๋ํ์ง ์๋ ์์ ์ OS์์๋ ๋ฐ์์ ํ์์ผ๋๊น OS์์ ๋ค๋ฃจ๊ณ ์๋ค.
Deadlock Prevention
๋ฐ๋๋ฝ์ด ๋ฐ์ํ ์ ์๋ ์กฐ๊ฑด ์ฐจ์ ๋ฅผ ๋ง์๋ฒ๋ฆฐ๋ค.
์์์ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ ค๋ฉด 4๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค๊ณ ํ๋ค.
๊ทธ ์ค์ ํ๋๋ฅผ ๋ง์กฑํ์ง ๋ชปํ๋๋ก ์์ฒ์ ์ผ๋ก ๋ง์๋ฒ๋ฆฌ๋ฉด ๋๊ฒ ๋ค.
=> ๊ทธ๋ผ ๊ทธ๋ฅ ๋ฐ๋๋ฝ์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋ฐ์์ ํ์ง ์๊ฒ ๋๋ค.
1. Mutual Exclusion
์์์ ๊ณต์ ํ๋ ๊ฒ์ ๋ง์๋ฒ๋ฆฐ๋ค?
์ด๊ฑด OS๊ฐ ์ ํ ์๊ฐ ์๋ ๊ฒ์ด๋ค. => ์ด ์กฐ๊ฑด์ ์์ ๋ ๊ฒ์ ์ ์ด์ ๋ถ๊ฐ๋ฅํ๋ค.
2. Hold and Wait
๊ทธ๋ผ Hold and wait ์กฐ๊ฑด์ ์์ ๋ณด์
=> ์ก๊ณ ๊ธฐ๋ค๋ฆฌ์ง ๋ชป ํ๋ค๋ ๊ฒ์ ๋ฌด์กฐ๊ฑด ๋น ์์์ ์์ํด์ผ ํ๋ค๋ ๋ป์ด๋ค.
๋น ์์ธ ์ํ์์ ํ ๋ฒ์ ์์ฒญ์ผ๋ก ํ ๋ฒ์ ๋ชจ๋ ์์์ ํ๋ณดํ์ง ๋ชป ํ๋ฉด ๋ค ๋ด๋ ค๋๋๋ค.
=> ๋ชจ๋ ์์์ ํ๋ณดํ ์ ์๋ค๋ฉด ์ด๋ฏธ ํ๋ณดํ ์์๋ ๋ด๋ ค ๋๊ฒ (all or nothing)
=> ์ด ๋ฐฉ๋ฒ์ ํ์คํ ์ํค๋ ค๋ฉด?
1, 2, 3๋ฒ ์์์ ํ๋ณดํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด 1, 2, 3๋ฒ ์ค์ ํ๋๋ผ๋ ํ๋ณดํ์ง ๋ชปํ๋ฉด ๋ชจ๋ ๋ด๋ ค ๋๋๋ก.
๋ชจ๋ ํ๋ณดํ ์ ์์ ๋๋ง ํ๋ณดํ๋๋ก ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด resource utilization์ด ๋จ์ด์ง๊ฒ ๋๊ณ , Starvation์ด ๋ฐ์ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด 1, 2๋ฒ ์์์ ํ๋ณด๋ฅผ ํ๋๋ฐ, 3๋ฒ์ ํ๋ณดํ์ง ๋ชปํ๋ฉด ์ด๋ฏธ ํ๋ณดํ 1, 2 ๋ฒ๋ ๋ด๋ ค ๋๋ ๋ฐฉ์์ธ๋ฐ ๋์ค์ 3๋ฒ์ ํ๋ณดํ ์ ์๊ฒ ๋์์ ๋ 1, 2๋ฒ์ด ๋จ์์์ ๊ฒ์ด๋ผ๋ ๋ณด์ฅ์ด ์๋ค.
๊ทธ๋ฌ๋ฉด ๋ ๋ค์ ๋ด๋ ค๋๊ณ ๋ชจ๋ ์์์ ํ๋ณดํ ์ ์์ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
๋์ค์ ๋ 1๋ฒ์ ํ๋ณดํ ์ ์์ง๋ง, ๋๋จธ์ง๋ฅผ ํ๋ณดํ์ง ๋ชป ํด์ ๋ ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
3. No Preemption
No preemption ์กฐ๊ฑด์ ์์ ๋ณด์.
=> ์ด ๋ง์ ์ด ํ๋ก์ธ์ค๊ฐ ์์์ ํ๋ณดํ ์ ์์ด์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ผ๋ฉด ์ด ํ๋ก์ธ์ค๊ฐ ๊ฐ๊ณ ์๋ ์์์ OS๊ฐ ๋บ์ด๋ฒ๋ฆฌ๊ฒ ๋ค๋ ๋ป.
Hold and wait์ ์ฐจ์ด๊ฐ ๋ญ๋, Hold and wait๋ ๋น ์์์ ์์ํด์ 1, 2, 3 ๋ฒ์ ๋์์ ํ๋ณดํ์ง ๋ชปํ๋ฉด ๊ทธ๋ฅ ๋์๋ฒ๋ฆฐ๋ค.
No preemption์ 1๋ฒ ์ก์๋ค? Ok, 2๋ฒ๋ ์ก์๋ค? Ok, ๊ทผ๋ฐ 3๋ฒ์ ์์ฒญํ๋๋ฐ ๋ชป ์ก์ผ๋ฉด 1, 2๋ฒ๋ ๋ค ๋บ์ด๊ฐ๋ฒ๋ฆผ.
=> Hold and wait๋ฅผ ๋ง์๋ฒ๋ฆฐ ๊ฒ๊ณผ ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ์ฌ์ค ๊ฐ๋ค.
=> ๊ฒฐ๊ณผ์ ์ผ๋ก๋ Hold and wait๋ฅผ ๋ง์ ๊ฒ๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์ Hold and wait๋ฅผ ์์ด์ ๋์ ๋๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๋ค.
=> resource utilization์ด ๋จ์ด์ง๊ณ starvation์ ์ ๋ฐํ ์ ์๋ค.
4. Circular Wait
์ํ ๋๊ธฐ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋ญ๊น?
์์์ ์ข
๋ฅ๋ง๋ค ๋ฒํธ๋ฅผ ๋งค๊ธด๋ค. CPU๋ 1๋ฒ, ๋ฉ๋ชจ๋ฆฌ๋ 2๋ฒ, ... ์ด๋ ๊ฒ ์์๋ง๋ค ๋ฒํธ๋ฅผ ๋งค๊ฒจ์ ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์๊ธฐ๊ฐ ํ์๋กํ๋ ์์์ด ์์ผ๋ฉด ์์์ ๋ฒํธ๋ฅผ ๋ณด๊ณ ๋ฎ์ ๋ฒํธ๋ถํฐ ํ๋ณด๋ฅผ ํด๋ผ ์ด๋ ๊ฒ ์์๋ฅผ ์ ํด์ค๋ค.
3, 5, 7๋ฒ ์์์ด ํ์ํ๋ค๋ฉด 3, 5, 7 ์์๋๋ก ํ๋ณดํ๋๋ก ํด์ผ ํจ.
7, 3, 5 ๋ญ ์ด๋ฐ ์์ผ๋ก ํ๋ณดํ๋ ๊ฑด ๋ถ๊ฐ๋ฅ.
3๋ฒ์ ํ๋ณดํ์ง ๋ชป ํ๋ฉด, 5๋ฒ์ ํ๋ณดํ ์ ์์ด๋ ์ผ๋จ 3๋ฒ์ ๋จผ์ ๊ธฐ๋ค๋ฆฐ๋ค.
์ด๋ฌ๋ฉด ์ ์ํ๋๊ธฐ๊ฐ ๋ฐ์ํ์ง ์์๊น?
P0๊ฐ P1์ด ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆฐ๋ค๊ณ ํ์ ๋, ๋ฎ์ ๋ฒํธ๋ถํฐ ์์ฒญ์ ํ๊ธฐ ๋๋ฌธ์ P1์ด ๊ฐ๊ณ ์๋ ์์์ P0๊ฐ ๊ฐ๊ณ ์๋ ์์๋ณด๋ค ๋ฒํธ๊ฐ ๋์ ์์์ด๋ค.
๋ P1์ด P2๊ฐ ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆฐ๋ค๊ณ ํ์ ๋ P2๊ฐ ๊ฐ์ง ์์์ P1์ด ๊ฐ์ง ์์๋ณด๋ค ๋์ ๋ฒํธ์ ์์์ด๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋ง์ง๋ง ํ๋ก์ธ์ค์ธ Pn์ด P0๊ฐ ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ์ด ๋ฐ์ํ ์๊ฐ ์๋ค.
Pn์ด ๊ฐ์ง ์์์ด ์ ์ผ ๋์ ๋ฒํธ์ ์์์ผ ํ
๋๊น.
=> ์ํ ๋๊ธฐ(์ฌ์ดํด)๊ฐ ๋ฐ์ํ์ง ์์
๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ ์ญ์ ์์์ ํ์ฉ๋๊ฐ ๋จ์ด์ง๋ค. 7๋ฒ์ ํ๋ณดํ ์ ์์์๋ 3๋ฒ์ ํ๋ณดํ์ง ๋ชปํด์ ํ๋ณดํ์ง ์๋๋ค.
=> ๋ง์ฝ 7๋ฒ์ ํ๋ณดํ๋ค๋ฉด 7๋ฒ์ ๊ฐ์ง๊ณ ํ ์ ์๋ ์ผ์ด ์์ ์ ์๋ค.
=> ๊ทธ๊ฒ๋ง์ ๋ชป ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
=> ๋ฐ๋๋ฝ Prevention์ ๊ณตํต์ ์ผ๋ก ์์ ํ์ฉ์ ํจ์จ์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ๊ทผ๋ณธ์ ์ผ๋ก ์ข์ ๋ฐฉ๋ฒ์ด ์๋๋ค.
Deadlock Avoidance
Prevention์ ๋ฐ๋๋ฝ์ ์น์ ์๋ผ๋ฒ๋ฆฌ๋ ๊ฒ์ด๊ณ , avoidance๋ 4๊ฐ์ง ์กฐ๊ฑด์ ํ์ฉํ๊ธด ํ์ง๋ง ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์๋๋ก ์ ์ด๋ฅผ ํ๊ฒ ๋ค๋ ๋ฐฉ์์ด๋ค.
ํ๋ก์ธ์ค๊ฐ OS์๊ฒ ์์์ ์์ฒญํ์ ๋, ํ ๋นํด ์ค ์์์ด ๋จ์ ์๋๋ผ๋ ์ด ๋จ์ ์๋ ์์์ ์์ฒญํ ํ๋ก์ธ์ค์๊ฒ ์คฌ์ ๋ ๋์ค์ ๋ฐ๋๋ฝ์ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉด ์์ฒญ์ ๋ฐ์๋ค์ด์ง ์๊ณ ๊ธฐ๋ค๋ฆฐ๋ค.
์ด๊ฑธ ์ฃผ๋๋ผ๋ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๊ฒ์ด ๋ณด์ฅ๋๋ฉด ํ ๋นํด์ฃผ๊ฒ ๋๋ค.
=> ๋งค์ฐ ๋ณด์์ ์ด๋ค.
=> ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์์ Release ํด์ ์์ ํ ์ํ๊ฐ ๋๋ฉด ํ ๋นํด ์ค๋ค.
=> ํํผํ๊ธฐ ์ํด์๋ ๋ฏธ๋์ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ํ๋จํด์ผ ํ๋ค.
=> ์ฆ, ๋ฏธ๋๋ฅผ ์์ธกํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ค๋ฉด ๋ฏธ๋ฆฌ ์ ๋ณด๋ฅผ ์์งํด์ผ ํ๋ค.
์ด๋ค ์ ๋ณด?
๊ฐ ํ๋ก์ธ์ค๋ง๋ค ์๊ธฐ๋ ์ผ์ ํ ๋์์ ์ด ์์์ ์ต๋ ๋ช ๊ฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ ์์์ ์ต๋ ๋ช ๊ฐ๋ฅผ ์ฌ์ฉํ ์ง ์ด๋ ๊ฒ ๊ฐ ์์์ ํ์
๋ง๋ค ์์์ ์ต๋ ์ฌ์ฉ๋์ ์ ์ธํ๋๋ก ํ๋ค.
์ด ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ํ์ฌ ์์์ ์ฌ์ฉ ์ํฉ์ ๊ณ ๋ คํด์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ ค์ ์ ๋๋ก ์ํ ๋๊ธฐ๊ฐ ๋ฐ์ํ์ง ์๋ ๊ธธ๋ก๋ง ๊ฐ๊ฒ ๋ค.
=> ์์ ํ๋ค๊ณ ํ๋จ๋๋ฉด ์์ฒญ์ ๋ฐ์๋ค์
Safe State
์์ ํ ์ํ๋ ๊ทธ ์ํ์์ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋ฌด์ฌํ ์ข ๋ฃ๋ ์ ์๋ ํ๋ก์ธ์ค์ ์ข ๋ฃ Sequence๊ฐ ์กด์ฌํ๋ฉด ์์ ํ ์ํ๋ผ๊ณ ํ๋ค.
๊ฐ ํ๋ก์ธ์ค์ ๋ํด ํ์ฌ ์๊ธฐ๊ฐ ์ด๋ฏธ ํ๋ณดํ ์์๊ณผ ์์คํ
์ ๋จ์์๋ ์์๊ณผ ๋๋ณด๋ค ๋จผ์ ๋ ๋ง์น ํ๋ก์ธ์ค๊ฐ ๋ฐ๋ฉํ ์์๊น์ง ๋ํด์ ์ผ์ ๋๋ผ ์ ์๋์ง๋ฅผ ๋ณธ๋ค.
=> ์ด๋ ํ๋ก์ธ์ค๊ฐ Claimํ ์ต๋ ์์๋์ ์ฌ์ฉํ์ ๋๋ ์ผ์ ๋ง์น ์ ์๋์ง ํ์ธํ๋ค.
=> ์ด๋ ๊ฒ ํด์ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์ ์๋ Sequence๊ฐ ์กด์ฌํ๋ค๋ฉด ์์ ํ ์ํ๋ผ๊ณ ํ๋จํ๋ค.
Safe state => no deadlocks
Unsafe sate => possiblity of deadlock
๋ง์ฝ safeํ์ง ์์ ์ํ์ด๋ฉด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ "๊ฐ๋ฅ์ฑ"์ด ์๋ ์ํ๋ผ๊ณ ํ๋จํ๋ค.
์๋ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋ ์ ์๋ Sequence๊ฐ ์์ผ๋ฉด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ ๊ฒ ์๋๋ ์ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ํ๋๋.
์ฐ๋ฆฌ๊ฐ safeํ๋ safeํ์ง ์๋๋ฅผ ํ๋จํ ๋ ์ด๋ค ํ๋ก์ธ์ค๊ฐ ๋์ด ๋๋ค๋ ๊ธฐ์ค์ ๋ญ๋ก ์ก๋๋ฉด, ํ๋ก์ธ์ค๊ฐ ์ต์ด์ ์ ์ธํ "์ต๋" ์์ ์๊ตฌ๋์ ๋ฐํ์ผ๋ก ๋์ด ๋ ์ ์๋ค๋ ๊ฒ์ ํ๋จํ๋ค.
๊ทธ๋ฐ๋ฐ ํ๋ก์ธ์ค๋ ์ต๋ ์์ ์๊ตฌ๋์ ๋์์ ์๊ตฌํ์ง ์๋๋ค.
1๋ฒ 3๊ฐ, 2๋ฒ 5๊ฐ, 3๋ฒ 2๊ฐ๋ฅผ ์ต๋ ์์ ์๊ตฌ๋์ผ๋ก ์ ์ ํ์ ๋, 1๋ฒ 3๊ฐ, 2๋ฒ 5๊ฐ, 3๋ฒ 2๊ฐ๋ฅผ ๋์์ ์์ฒญํ๋ ๊ฒ์ด ์๋ 1๋ฒ 3๊ฐ๋ฅผ ์์ฒญํด์ ์ผ์ ํ๊ณ ๋ฐ๋ฉํ ๋ค์ 2๋ฒ 5๊ฐ๋ฅผ ์์ฒญํด์ ์ผ์ ํ๊ณ ์ด๋ ๊ฒ ํ ์๋ ์๋ค.
๊ทธ๋ฌ๋ ๋์์ ์์ฒญํ๋ค๊ณ ์๊ฐํ๊ณ safeํ ์ง๋ฅผ ํ๋จํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฌํ Sequence๊ฐ ์๋ค๊ณ ํด๋ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์์ ์๋ ์๋ค.
=> ๊ทธ๋ฌ๋ ์ต์
์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๊ณ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์กฐ๊ธ์ด๋ผ๋ ์๋ค๋ฉด ๊ทธ ๊ธธ์ ๊ฐ์ง ์๊ฒ ๋ค๋ ๊ฒ์ด avoidance
=> ๋งค์ฐ ๋งค์ฐ ๋ณด์์
Avoidance ์๊ณ ๋ฆฌ์ฆ์ ๋ฆฌ์์ค ํ์ ๋ง๋ค ํ๋์ instance๋ง ๊ฐ์ง ๋์ ํ๋์ ๋ฆฌ์์ค ํ์ ์ด ์ฌ๋ฌ instance๋ฅผ ๊ฐ์ง ๋๋ฅผ ๋๋ ์ ์๊ฐํ๋ค.
๋ฆฌ์์ค ํ์ ์ด Single instance๋ฅผ ๊ฐ์ง ๋๋ resource-allocation graph๋ฅผ ์ฌ์ฉํ๋ค.
๋ฆฌ์์ค ํ์ ์ด Multiple instance๋ฅผ ๊ฐ์ง ๋๋ banker's algorithm์ ์ฌ์ฉํ๋ค.
Resource Allocation Graph Algorithm (๋ฆฌ์์ค ํ์ ๋ง๋ค instsance๊ฐ ํ๋)
instance๊ฐ ํ๋๋ฐ์ ์๋ ๊ฒฝ์ฐ์ ์ต๋ ์์ ์๊ตฌ๋์ด ๋ฌด์กฐ๊ฑด 1์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ค์ Resource๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋๋ฅผ ๋ํ๋ธ๋ค.
๋ด๊ฐ ๋์ค์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ ๊ฒ์ Edge๋ฅผ ์ฌ์ฉํด์ ํํํ ์ ์๋ค.
=> ์ด๊ฒ์ claim edge(์ ์ ์ผ๋ก ํํ)๋ผ๊ณ ํ๋ค.
=> ๋ฏธ๋์ ์ธ์ ๊ฐ๋ ์ด ์์์ ์ฌ์ฉํ ๊ฑฐ์ผ ๋ผ๋ ๊ฒ์ ๋ํ๋ธ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์์์ ์์ฒญ์ ํ ๋๋ claim edge๊ฐ request edge(์ค์ ์ผ๋ก ํํ)๋ก ๋ฐ๋๊ฒ ๋๋ค.
์์ฒญ์ด ๋ฐ์๋ค์ฌ์ ธ์ ์์์ ํ ๋น ๋ฐ์ผ๋ฉด assignment edge๊ฐ ๊ทธ๋ ค์ง๊ฒ ๋๋ค.
request edge์ ๋ํด์ request๋ฅผ ๋ฐ์๋ค์ฌ์ assign์ ํ์ ๋ safeํ๋ฉด request edge๋ฅผ assignment edge๋ก ๋ฐ๊พผ๋ค.
single instance์์๋ safeํ์ง ํ๋จํ๋ ๊ฒ์ด ์ฝ๋ค. assign์ ํ๋ค๊ณ ์น๊ณ assignment edge๋ฅผ ๊ทธ๋ ธ์ ๋ ์ฌ์ดํด์ด ๋ฐ์ํ๋ฉด safeํ์ง ์์ ๊ฒ์ด๋ค.
=> ๋ชจ๋ ์์์ instance๊ฐ ํ๋์ผ ๋๋ ์ฌ์ดํด์ด ๋ฐ์ํ๋ฉด ๋ฌด์กฐ๊ฑด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฒ.
์์์ ํ ๋น ๋ฐ์๋ค๊ฐ ์์์ ๋ฐ๋ฉํ๊ฒ ๋๋ฉด edge๋ ์์ด์ง๋ ๊ฒ ์๋๋ผ ๋ค์ claim edge๋ก ๋์๊ฐ๊ฒ ๋๋ค.
=> ์ฌ์ฉํ๋ค๊ณ ๋ง ํ์ง ๋ช ๋ฒ ์ฌ์ฉํ๋ค๊ณ ๋ ์ ์ธํ์ง ์์๊ธฐ ๋๋ฌธ์
Claim edge๋ฅผ Request edge๋ก ๋ฐ๊พธ๊ณ , ์ค์ ํ ๋น์ ํด์ค์ ์น๊ณ Allocation edge๋ก ๋ฐ๊พธ์์ ๋ ์ฌ์ดํด์ด ๋ฐ์ํ๊ฒ ๋๋ค.
์ฌ์ดํด์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ safeํ์ง ์๋ค๊ณ ํ๋จํ๋ค.
P1์ด ์ธ์ ๊ฐ ์ค์ ๋ก R2๋ฅผ ์์ฒญํ๊ฒ ๋๋ฉด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ P2์๊ฒ๋ R2๋ฅผ ํ ๋นํด์ฃผ์ง ์๋๋ค.
๋ฌผ๋ก ์ฌ์ดํด์ด ๋ฐ์ํ๊ธด ํ์ง๋ง P1์ด ์ผ์ ์ด๋ค ์์๋ก ํ๋์ ๋ฐ๋ผ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์์ ์๋ ์๋ค.
=> ๋ง์ฝ P2์๊ฒ ํ ๋นํด์ค๋ P2๊ฐ ๋ค์ ๋ฐ๋ฉํ ํ์ P1์ด R2๋ฅผ ์์ฒญํ๋ฉด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์๋๋ค.
=> ๊ทธ๋๋ ์ผ๋จ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋๊น ํ ๋น์ ํ์ง ์๊ฒ ๋ค.
Banker's Algorithm
Multiple instance๋ฅผ ๊ฐ์ง๋ resource๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋๋ฝ์ avoidํ๊ธฐ ์ํด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
Banker's Algorith์ ๋ํด ์ดํด๋ณด๊ธฐ ์ ์, Banker's algorithm์ ์ํด ํ์ํ ์๋ฃ ๊ตฌ์กฐ๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ๋ณด์.
- Available: ์ด์ฉ ๊ฐ๋ฅํ ์์์ ์
Available[j] = k ๋ผ๋ฉด Rj ๋ผ๋ ์์์ k๊ฐ ์ฌ์ฉํ ์ ์๋ค๋ ๋ป์ด๋ค.
- Max: ์ต๋ ์์ ์๊ตฌ๋
Max[i, j] = k ๋ผ๋ฉด Pi๋ Rj๋ผ๋ ์์์ ์ต๋ k๊ฐ ํ์๋ก ํ๋ค๋ ๋ป์ด๋ค.
=> ๋ฏธ๋ฆฌ ์ ์ธํ๋ ๊ฐ์ด๋ค.
- Allocation: ํ ๋น๋ ์์์ ์
Allocation[i, j] = k ๋ผ๋ฉด Pi๋ Rj๋ผ๋ ์์์ k๊ฐ ํ ๋น๋ฐ์๋ค๋ ๋ป์ด๋ค.
- Need: ํ ๋น ๋ฐ์ ์์ ์ธ์ ์ถ๊ฐ๋ก ํ์๋ก ํ๋ ์์์ ์
Need[i, j] = k ๋ผ๋ฉด Pi๋ Rj๋ผ๋ ์์์ k๊ฐ ์ถ๊ฐ๋ก ํ์๋ก ํ๋ค๋ ๋ป.
์ด๊ฑธ ์ด๋ป๊ฒ ๊ตฌํ ์ ์๋?
์ฒ์์ claimํ ์ต๋ ์ฌ์ฉ๋์์ ํ์ฌ ์์ ์๊ฒ ํ ๋น๋ ๋งํผ์ ๋นผ๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์์ฒญํ ์ ์๋ ์๋ฅผ ๋ํ๋ธ๋ค.
Need[i, j] = Max[i, j] - Allocation[i, j]
ํ์ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ ์์๋ณด์์ผ๋, ์ด์ safeํ์ง ํ๋จํ๋ algorithm์ ์ดํด๋ณด์
Step 1. Work๋ ํ์ฌ ์์คํ ์ ๋จ์์๋ ์์์ ์์ ์๋ฏธํ๊ณ , Finish๋ ๊ฐ ํ๋ก์ธ์ค๊ฐ ์ผ์ ๋ง์ณค๋์ง๋ฅผ ํ์ํ๋ Boolean data์ด๋ค.
Step 2. ํ์ฌ ๋๋์ง ์์ ํ๋ก์ธ์ค ์ค์, ํ๋ก์ธ์ค๊ฐ ์ถ๊ฐ๋ก ํ์๋ก ํ๋ ์์ด ์์คํ
์ ๋จ์์๋ ์์์ ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ๋ค์ ์ฐพ์๋ผ.
=> ์ถ๊ฐ๋ก ํ์๋ก ํ๋ ์์ ์ด๋ฏธ ํ ๋น๋ฐ์ ์์์ ์ถ๊ฐ์ ์ผ๋ก ํ์๋ก ํ๋ ์์ด๋ฏ๋ก Max๋ฅผ ํ ๋ฒ์ ์์ฒญํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
=> Need < Work๋ผ๋ ๊ฒ์ ํ์ฌ ์์คํ
์ ์์์ ๋ชฐ๋นตํด์ฃผ๋ฉด ์ด ํ๋ก์ธ์ค๋ ๋์ด ๋ ์ ์๋ค๋ ๋ป์ด๋ค.
=> ์ฐพ์์ผ๋ฉด 3๋ฒ์ผ๋ก ๋ด๋ ค๊ฐ๋ค.
Step 3. ํด๋น ํ๋ก์ธ์ค๋ ๋์ด ๋ฌ๋ค๊ณ ํ์ํ๊ณ , ํด๋น ํ๋ก์ธ์ค๊ฐ ํ ๋น ๋ฐ์ ์์์ Work์ ๋ํด์ค๋ค(๋ฐ๋ฉ).
2, 3๋ฒ ๊ณผ์ ์ ๊ณ์ํด์ ๋ฐ๋ณตํ ํ, ๋ชจ๋ ํ๋ก์ธ์ค์ Finish ๊ฐ์ด True๊ฐ ๋ ์ ์๋ค๋ฉด safeํ ์ํ๋ผ๊ณ ํ๋จํ๋ค.
Process i๊ฐ Resource j๋ฅผ k๊ฐ ์์ฒญํ์ ๋, ๋ฐ์๋ค์ผ์ง ๋ง์ง ๊ฒฐ์ ์ ํด์ผ ํ๋ค.
Step 1. Request <= Need๋ผ๋ฉด ์ ์์ ์ธ ์์ฒญ์ด๋ฏ๋ก ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ค.
๋ง์ฝ ๊ทธ๋ ์ง ์๋ค๋ฉด, ์์ ์ด ์ฒ์์ ์๊ตฌํ ์๊ตฌ๋์ ๋์ด์ ์๊ตฌ์ด๋ฏ๋ก ์๋ชป๋ ์์ฒญ์ด๋ค.
Step 2. Request <= Available์ด๋ฉด Request๊ฐ ํ์ฌ ์์คํ ๋ด์ ๊ฐ์ฉํ ์์์ ์๋ณด๋ค ์ ๋ค๋ ๋ป์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ค์ ๋จ๊ณ ๋ก ๋์ด๊ฐ๋ค.
step 3. ์ผ๋จ ์คฌ๋ค๊ณ ์น๊ณ , ์ค ์ดํ์ Available, Allocation, Need ๊ฐ์ ๊ณ์ฐํ๋ค.
์ด ๊ฐ์ ๊ธฐ์ค์ผ๋ก safety algorithm์ ๋๋ ค์ safeํ๋ฉด ์ค์ ๋ก ํ๋ก์ธ์ค์๊ฒ ์์์ ํ ๋นํด์ค๋ค.
๋ง์ฝ unsafe๋ก ํ๋จ๋๋ฉด ์์์ ์ฃผ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ง๋ ๋ค.
=> ์คฌ๋ค ์น๊ณ ๊ณ์ฐํ๋ ๊ฐ๋ค์ ๋ค์ ์๋๋๋ก ๋๋๋ฆฐ๋ค.
=> Pi์๊ฒ ์์์ ์ค๋ safe state๊ฐ ๋๋ ์์ ์ด ์ค๋ฉด ๊ทธ๋ ์ฃผ๊ฒ ๋๋ค.
ํน์ ์์ ์ Snapshot์ ์ฐ์๋ค.
์ด๊ธฐ Available์ ์์คํ ๋ด์ ์ ์ฒด ์์ - ํ์ฌ ํ ๋น๋์ด ์๋ (Allocation) ์์์ ํฉ์ด๋ค.
Need <= Available์ด๋ฉด ํ ๋นํ ์ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ ์ ์๋ค๋ ๋ป์ด๋ค.
=> ์ข ๋ฃํ๋ค ์น๊ณ , Allocation์ Available์ ๋ํด์ค๋ค.
<P1, P3, P4, P2, P0>์์ผ๋ก ์์์ ๋ชฐ์์คฌ์ ๋ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ๋ฌด์ฌํ ์ข ๋ฃ๋ ์ ์์ผ๋ฏ๋ก, ํ์ฌ System์ Safeํ ์ํ์ ์๋ค๋ ๋ป์ด๋ค.
P1์ด (1,0,2)๋ฅผ ์์ฒญํ๋ค๋ฉด, ํ ๋นํด์ค ์ ์์๊น?
P1์๊ฒ (1,0,2)๋ฅผ ํ ๋นํด์คฌ๋ค๊ณ ์น๊ณ , ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ๋ง์น ์ ์๋ Sequence๊ฐ ์กด์ฌํ๋ค๋ฉด ํ ๋นํด์ฃผ์ด๋ ๊ด์ฐฎ๋ค๋ ๋ป์ด๋ค.
<P1, P3, P4, P0, P2> ์์ผ๋ก ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์ ์์ผ๋ฏ๋ก P1์๊ฒ (1,0,2)๋ฅผ ํ ๋นํด ์ฃผ์ด๋ ์ฌ์ ํ safe state์ด๋ฏ๋ก ํ ๋นํด์ค ์ ์๋ค.
Deadlock Detection
๋ฐ๋๋ฝ Detection ๋ฐฉ์์ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๊ธฐ ์ ๊น์ง๋ ์๋ฌด ์ผ๋ ํ์ง ์๋๋ค.
์์์ด ๋จ์ ์์ผ๋ฉด ๊ทธ๋ฅ ์ค๋ค.
=> ์์์ด ์์ด์ ๋ชป ์ฃผ๋ ๊ฒ์ ์ด์ฉ ์ ์์
Avoidance๋ ๋ฏธ๋๋ฅผ ์์ธกํ๊ณ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ํ๋จํ๋ค๋ฉด, Detection์ ํ์ฌ๋ง ๋ณด๊ณ ํ๋จํ๋ค.
=> ๊ทธ๋ฅ ํ์ฌ ์ค ์ ์๋ ์์์ด ์์ผ๋ฉด ์ค๋ค. (๋ฐ๋๋ฝ ๋ฐ์ ํ์ฉ)
=> ๋์ Deadlock์ด ๋ฐ์ํ๋ฉด Detectํ๊ณ Recoveryํ ์ ์์ด์ผ ํ๋ค.
๋ชจ๋ ๋ฆฌ์์ค ํ์ ์ด Single instance์ธ ๊ฒฝ์ฐ์๋ ์ฌ์ดํด์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ๋ฐ๋๋ฝ์ด๋ผ๊ณ Detectionํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด Multiple instance์ธ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ๋ฐ๋๋ฝ์ Detectionํ ์ ์์๊น?
Single Instance of Each Resource Type
Process -> Resource ๋ก Request๋ฅผ ๊ทธ๋ฆฌ๊ณ Resource -> Process๋ก Allocation์ ๊ทธ๋ ธ์๋๋ฐ, Resource vertex๋ฅผ ์ง์ฐ๊ณ Process -> Process ๋ก edge๋ฅผ ๊ทธ๋ ค์ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๊ฐ๊ณ ์๋ ์์์ ๊ธฐ๋ค๋ฆฐ๋ค๋ ๊ฒ์ ํํํ๋ค.
์ wait-for graph๋ก ํํํ๋?
๊ทธ๋ํ์์ Deadlock์ detectํ๊ธฐ ์ํด์๋ single instance์์๋ ๊ทธ๋ํ ๋ด์ ์ฌ์ดํด์ด ๋ฐ์ํ๋์ง๋ฅผ ํตํด ํ๋จํ ์ ์๋ค๊ณ ํ๋๋ฐ ์ด ์ฌ์ดํด์ ๊ฐ์งํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๊ฐ vertex์ ์์ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ vertex์ ์๋ฅผ ์ค์ด๋ ๊ฒ์ด ์ข๊ธฐ ๋๋ฌธ์ด๋ค.
Deadlock Detection Algorithm
Multiple instance Resource๊ฐ ์กด์ฌํ๋ ์ํฉ์์ ๋ฐ๋๋ฝ์ ๊ฐ์งํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ณด์.
๊ทธ ์ ์ ๋จผ์ ์๊ณ ๋ฆฌ์ฆ์ ์ํด ํ์ํ ์๋ฃ ๊ตฌ์กฐ๋ค์ ์ดํด๋ณด์.
avoidance๋ ๋ฏธ๋์ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋์ง ํ๋จํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฏธ๋์ ์ผ๋ง๋ ์์์ ์์ฒญํ ์ง ์์์ผ ํ๊ธฐ ๋๋ฌธ์ Max ๊ฐ์ ์ ๋ณด๋ค์ด ์์๋๋ฐ, Detection์ ํ์ฌ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋์ง๋ง ํ๋จํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ Request๋ง ์์ผ๋ฉด ๋๋ค.
Step 1. ์ด๋ค ํ๋ก์ธ์ค์๊ฒ Allocation๋ ์์์ด ํ๋๋ผ๋ ์์ผ๋ฉด ์์ง ์ผ์ ํ๊ณ ์๋ ํ๋ก์ธ์ค๋ผ ํ๋จํ๊ณ ,
ํ์ฌ Allocation๋ ์์์ด ์์ผ๋ฉด, ๋ฌผ๋ก ์ผ์ด ๋๋์ง ์์ ํ๋ก์ธ์ค์ผ ์๋ ์์ง๋ง ์ด ํ๋ก์ธ์ค์ ์์์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ ๋ป์ด๋ฏ๋ก ๋ฐ๋๋ฝ๊ณผ๋ ์ฐ๊ด์ด ์๋ ํ๋ก์ธ์ค์ด๋ฏ๋ก Detection์์๋ ์๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง์ธ ํ๋ก์ธ์ค๋ค.
=> Detection์ ํ์ฌ๋ง ๋ณด๊ธฐ ๋๋ฌธ์ ์ง๊ธ ๋น์ฅ ๋ฐ๋๋ฝ๊ณผ ์๊ด ์์ผ๋๊น ๋นผ๋ฒ๋ฆฌ๊ณ Finish๋ก ์ทจ๊ธํ๋ค.
Step 2. ์์ง ๋๋์ง ์์ ํ๋ก์ธ์ค ์ค์ Request <= Work์ธ ํ๋ก์ธ์ค๋ฅผ ์ฐพ๋๋ค.
Step 3. Request <= Work๋ฉด ๊ฑ๋ ์์์ ๋ชฐ๋นตํด์ฃผ๋ฉด ์ผ์ ๋ง์น ์ ์๋ ์ ๋๊น ๋๋ฌ๋ค๊ณ ํ์ํ๊ณ ๊ฑ๊ฐ ๊ฐ๊ณ ์๋ ์์์ ํ์ํด์ Work์ ์ง์ด ๋ฃ๋๋ค.
Step 4. ๊ทธ๋ ๊ฒ 2,3 ๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ์ ๋, Finish๊ฐ False์ธ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ๋ฉด ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์ ์๋ค๋ ๋ป์ด๋ฏ๋ก ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ๊ฒ์ผ๋ก ํ๋จํ๋ค.
ํน์ ์์ ์ ์์คํ ๋ด์ Snapshot์ด ์์ ๊ฐ๋ค๋ฉด,
<P0, P2, P3, P1, P4> ์์๋๋ก ์์์ ํ ๋นํด์ฃผ๋ฉด, ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์ ์์ผ๋ฏ๋ก ํ์ฌ ์์คํ ๋ด์๋ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์์๋ค๋ ๋ป์ด๋ค.
์ง๊ธ ๋น์ฅ์ Request๋ง ์ฒ๋ฆฌํ ์ ์๋ค๊ณ Finish๋ก ์ฒ๋ฆฌํ๊ณ Allocation๋ ๊ฒ์ ๋ฐ๋ฉ ๋ฐ์๋ ๋๋, ๋์ค์ ๋ ์์ฒญํ ์๋ ์์ง ์๋. ์ด๋ ๊ฒ ์๊ฐํ ์ ์์ง๋ง
Detection์์ ๋ฏธ๋๋ ์ค์ํ์ง ์๋ค. ์ง๊ธ ๋น์ฅ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋์ง๋ง ํ์ธํ๋ฉด ๋๋ค.
์ง๊ธ ๋น์ฅ ํ ์นธ์ด๋ผ๋ ์ง๋๋ฅผ ๋๊ฐ ์ ์์ผ๋ฉด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์๋๋ค๊ณ ํ๋จํ๋ค.
Detection ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(n^3)์ธ ๋งค์ฐ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ด ๋๋ฌด ์์ฃผ ๋์๊ฐ๋ฉด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
๊ทธ๋์ ํ์ค์ ์ผ๋ก๋ ์ฌ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์. ๋งค ์์ฒญ๋ง๋ค O(n^3) ๋งํผ์ ์๊ฐ๋ณต์ก๋๋ฅผ ์ก์๋จน์ผ๋ฉด CPU๋ฅผ ๋๋ฌด ๋ง์ด ์ก์๋จน๋๋ค.
=> ๊ทธ๋์ ๋ฌด์ํ๋ ์ ์ฑ
์ ์ฌ์ฉํ๋ค.
๋ง์ฝ ์ด๋ฌํ Detection์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค๊ณ ํ๋ฉด, ์ผ๋ง๋ ์์ฃผ ์ด ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋์ด์ผ ํ ๊น?
1. ์์น์ ์ผ๋ก๋ ์์์ ์ํ๊ฐ ๋ฐ๋ ๋๋ง๋ค ๋์๊ฐ์ผ ํ๋๋ฐ ์ด๋ฌ๋ฉด ์ค๋ฒํค๋๊ฐ ๋๋ฌด ์ปค์ง๋ค.
2. ์์ฒญ์ ๋ฐ์๋ค์ผ ์ ์์ ๋๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋๋ ค์ Detection ํ์
3. ๋ฐ๋๋ฝ ๋ฐ์ ๋น๋๋ ๋งค์ฐ ์ ๊ธฐ ๋๋ฌธ์ ๊ฐ๋์ฉ ์ฃผ๊ธฐ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ๋๋ฆฌ์
Recovery of Deadlocks: Process Termination
- ๋ฐ๋๋ฝ์ ๊ฑธ๋ฆฐ ํ๋ก์ธ์ค๋ ๋ชจ๋ ์ข ๋ฃ์ํจ๋ค.
- ๋ฐ๋๋ฝ์ ๊ฑธ๋ฆฐ ํ๋ก์ธ์ค๋ค์ ํ๋ ํ๋ ์ข ๋ฃ์์ผ๋ณด์. ํ๋ ์ฃฝ์ด๊ณ Detection, ํ๋ ์ฃฝ์ด๊ณ Detection => ๋ฐ๋๋ฝ์ด Detection๋์ง ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ค ํ๋ก์ธ์ค๋ถํฐ ์ข ๋ฃ์ํฌ ๊ฒ์ธ๊ฐ??
1. ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ข
๋ฃ์ํค์.
2. ์ผ๋ง๋ ์ค๋ซ๋์ ๋์ํ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ํ์ง ์ผ๋ง ์ ๋ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ข
๋ฃ์ํค์.
3. ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ ์์ด ๋ ์ค์ํ์ง ์๋. ์งง๊ฒ ๋์๋๋ผ๋ ์์ฒญ๋ ์์ ์์์ ์ฌ์ฉํ๋ฉด์ ๋์ํ ํ๋ก์ธ์ค๋ ์ข
๋ฃ์ํค๋ฉด ๋์ค์ ๋ค์ ์์ํ์ ๋ ๋ ๊ทธ๋งํผ ์์์ ํ ๋น๋ฐ์์ ์ฌ์ฉํ ํ
๋๊น ์ข
๋ฃ์ํค์ง ๋ง๊ณ ๋จผ์ ๋๋ด๋ ๊ฒ ๋ซ์ง ์๋
4. ์์ผ๋ก ์ด ํ๋ก์ธ์ค๊ฐ ๋๋ ๋๊น์ง ์ฌ์ฉํ ์์์ ์์ด ์ผ๋ง๋ ๋ง๋๋ฅผ ๋ณธ๋ค.
=> ์์ผ๋ก ์์์ ๋ง์ด ์ฌ์ฉํ ์ ๋ค์ ๋จผ์ ์ข
๋ฃ์ํจ๋ค.
5. ์ต์ํ์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃ์์ผ์ ๋ฐ๋๋ฝ์ ํด์์ํฌ ์ ์๋ ํ๋ก์ธ์ค์ ์งํฉ์ ์ฐพ์.
6. interactiveํ ํ๋ก์ธ์ค๊ฐ ์๋ background job์ ๋จผ์ ์ข
๋ฃ์ํค์.
์ด๊ฑด ์ ํ๊ธฐ ๋๋ฆ์ด์ง๋ง ๋๋ถ๋ถ์ OS๋ ์ฌ์ค ๋ฐ๋๋ฝ์ ๋ฌด์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๊ณ ๋ฏผ์ ํ์ง ์๋๋ค.
Recovery of Deadlocks: Resource Preemption
๋ฐ๋๋ฝ์ ๊ฑธ๋ฆฐ ํ๋ก์ธ์ค์ ์์์ ๋บ๋๋ค. abort ์ํค์ง๋ ์๊ณ ์์๋ง ๋บ๋๋ค
=> ๊ทธ ํ๋ก์ธ์ค์ ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ๋์ ๊ฐ๋ฅํ๋ค.
์ด๋ค ํ๋ก์ธ์ค๋ฅผ victim์ผ๋ก ์ ์ ํ ๊น
1. Minimize cost: ์ต์ ๋น์ฉ์ด ๋ฐ์ํ๋๋ก victim์ ์ ์ ํ์.
2. Rollback: ์ด์ ์ Safe State๋ก ๋๋๋ฆฌ์.
์ ์ด์งํผ ์ด๋ ๋ค์ ์คํ์ํค๋ฉด ๋ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ์ง ์๋?
์๋๋ค. ๋ฐ๋๋ฝ์ด๋ผ๋ ๊ฒ์ ์ค์ผ์ค๋ง์ด ์ ๋ฌํ๊ฒ ๋์ด์ ์ํ ๋๊ธฐ๊ฐ ๋ฐ์ํ๊ฒ ๋ ๊ฒ์ด๋ค.
๋ค์ ๋์๊ฐ๋ค๊ฐ ์ํํ๋ฉด OS๋ ์๋ dynamicํ๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ ๊ทธ๋ฐ ์ํฉ์ด ๋ฐ์ํ์ง ์์ ์๋ ์๋ค.
Resource Preemption์ ์ฌ์ฉํ๋ฉด Startvation์ด ๋ฐ์ํ ์ ์๋ค.
=> victim์ ์ ์ ํ ๋ ์ผ๋ง๋ ์์ฃผ victim์ผ๋ก ์ ์ ๋์๋๋ฅผ ๊ณ ๋ คํ ํ์๊ฐ ์์.
Avoidance vs Detection
Avoidance๋ ๋ฏธ๋๋ฅผ ์์ธกํด์ ์์ ํ ๊ธธ๋ก ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ์๊ฐ ์๋ค.
Detection์ ํ์ฌ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋์ง์๋ง ๊ด์ฌ์ด ์๊ณ , ๋ฐ๋๋ฝ์ ํ์ฉํ๋ค.
Avoidance
๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ต๋ ์์ ์ฌ์ฉ๋์ ์์ฒญํ์ ๋๋ฅผ ์๊ฐํด์ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ์ ๊ฐ๋ฅ์ฑ์ด ์๋์ง ํ๋จํ๊ธฐ ๋๋ฌธ์ Worst case๋ฅผ assumptonํ๋ค.
๋๋ฌด ์๊ทน์ ์ผ๋ก ์ผ์ ํ๊ธฐ ๋๋ฌธ์ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ชป ํ ์๋ ์๋ค.
Detection
๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ํ์ฌ ์์ฒญํ๊ณ ์๋ ์์์ ์ ์ด์์ผ๋ก ์์ฒญํ์ง ์์ ๊ฒ์ด๋ผ ์๊ฐํ๊ณ Detectionํ๊ธฐ ๋๋ฌธ์ Best case๋ฅผ assumptionํ๋ค.
'HYU > ์ด์์ฒด์ (OS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
12. File System (2) | 2023.05.27 |
---|---|
11. Virtual Memory (2) (0) | 2023.05.19 |
10. Virtual Memory (1) (1) | 2023.05.12 |
9. Memory Management (2) (0) | 2023.05.07 |
8. Memory Management (1) (0) | 2023.05.02 |