๐พ Deadlock
Deadlock์ด๋ ์ผ์ด๋์ง ์์ ์ฌ๊ฑด์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ์งํ์ด ๋ฉ์ถฐ๋ฒ๋ฆฌ๋ ํ์์ ๋งํฉ๋๋ค.
๋ค์์ Deadlock์ด ๋ฐ์ํ์ง ์์ ๊ฒฝ์ฐ์ Deadlock์ด ๋ฐ์ํ ๊ฒฝ์ฐ๋ฅผ Resource-Allocation Graph๋ก ํํํ ๊ฒ์ ๋๋ค.
- Deadlock์ด ๋ฐ์ํ์ง ์์ ๊ฒฝ์ฐ
Resource A
ํ๋๋ฅผProcess 1
์ ํ ๋นResource A
ํ๋์Resource B
ํ๋๋ฅผProcess 2
์ ํ ๋นProcess 3
์Process 1
๋๋Process 2
์ค ํ๋์ Process์์Resource A
์ฌ์ฉ์ด ๋๋๋ฉด ํ ๋น ๋ฐ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ
- Deadlock์ด ๋ฐ์ํ ๊ฒฝ์ฐ
Process 1
์Resource A
๋ฅผ ํ ๋น ๋ฐ๊ณProcess 2
์Resource B
์ฌ์ฉ์ด ๋๋๋ฉด ํ ๋น ๋ฐ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฌ๋ ์ํฉProcess 2
๋Resource B
๋ฅผ ํ ๋น ๋ฐ๊ณProcess 1
์Resource A
์ฌ์ฉ์ด ๋๋๋ฉด ํ ๋น ๋ฐ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ
๐พ Deadlock ๋ฐ์ ์กฐ๊ฑด
Deadlock ๋ฐ์ ์กฐ๊ฑด | Definition |
---|---|
Mutual Exclusion(์ํธ ๋ฒ ์ฌ) | ํ๋์ ์์์ ํ ๋ฒ์ ํ๋์ Process(Thread)๋ง ์ฌ์ฉ๊ฐ๋ฅํ ์ํฉ |
Hold and Wait(์ ์ ์ ๋๊ธฐ) | ์์์ ํ ๋น ๋ฐ์ ์ํ์์ ๋ค๋ฅธ ์์์ ํ ๋น ๋ฐ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ |
Nonpreemptive(๋น์ ์ ) | Process(Thread)๊ฐ ์์์ ๋น์ ์ ํ๋ ์ํฉ |
Circular Wait(์ํ ๋๊ธฐ) | Resource-Allocation Graph๊ฐ ์์ ํํ๋ก ๊ทธ๋ ค์ง๋ ์ํฉ |
๐พ Deadlock ํด๊ฒฐ ๋ฐฉ๋ฒ
OS(Operating System)์ ์๋ฐฉ๊ณผ ํํผ๋ฅผ ํตํด Deadlock์ ๋ง๊ณ ๊ฒ์ถ ํ ํ๋ณต์ ํตํด ์ด๋ฏธ ๋ฐ์ํ Deadlock์ ํด๊ฒฐํ๊ณ ์ ํฉ๋๋ค.
๐พ Deadlock ์๋ฐฉ
Deadlock์ ์๋ฐฉํ๋ ๋ฐฉ๋ฒ์ Deadlock ๋ฐ์ ์กฐ๊ฑด ์ค ํ๋๋ฅผ ์ถฉ์กฑํ์ง ๋ชปํ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
Deadlock ๋ฐ์ ์กฐ๊ฑด ์ ์ธ | ์ ์ธ ๋ฐฉ๋ฒ | ๋จ์ |
---|---|---|
Mutual Exclusion | Process(Thread)๋ค์ด ํ๋์ ์์์ ๊ณต์ | ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅ |
Hold and Wait | OS๋ ํน์ Process(Thread)์ ์์์ ๋ชจ๋ ํ ๋น | โข ์์ ํ์ฉ๋ฅ ์ด ๋ฎ์์ง โข ๊ธฐ์ ํ์ ๋ฐ์ |
Nonpreemptive | Process(Thread)๊ฐ ์์์ ์ ์ ํ์ฌ ์ฌ์ฉ | ๋ฒ์ฉ์ฑ์ด ๋จ์ด์ง(Ex. ํ๋ฆฐํฐ ์์์ ์ ์ ํ๊ธฐ ์ด๋ ค์) |
Circular Wait | ์์์ ๋ฒํธ๋ฅผ ๋ถ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์์์ ํ ๋น | โข ๋ชจ๋ ์์์ ๋ฒํธ๋ฅผ ๋ถ์ด๋ ์ผ์ ๊ฐ๋จํ์ง ์์ โข ๋ฒํธ์ ๋ฐ๋ผ ํน์ ์์์ ํ์ฉ๋ฅ ์ด ๋ฎ์์ง ์ ์์ |
๐พ Deadlock ํํผ
OS๋ Deadlock์ ํ์ ๋ ์์์ ๋ฌด๋ถ๋ณํ ํ ๋น์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ฃผํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Deadlock์ด ๋ฐ์ํ์ง ์์ ์ ๋์ ์์ ์์ Process(Thread)์ ๋ฐฐ๋ถํ์ฌ Deadlock์ ํํผํฉ๋๋ค.
Deadlock ์์ด Process(Thread)์๊ฒ ์์ ํ๊ฒ ์์์ ํ ๋นํ ์ ์๋ ์์๋ฅผ ์์ ์์์ด(Safe Sequence)๋ผ๊ณ ํฉ๋๋ค.
์ด์ฒ๋ผ ์์ ์์์ด์ด ์๋ ์ํ๋ฅผ ์์ ์ํ(Safe State), ์์ ์์์ด์ด ์๋ ์ํ๋ฅผ ๋ถ์์ ์ํ(Unsafe State)๋ผ๊ณ ํฉ๋๋ค.
๐พ Deadlock ๊ฒ์ถ ํ ํ๋ณต
OS๋ Process(Thread)๋ค์ด ์์์ ์๊ตฌํ ๋๋ง๋ค ๊ทธ๋๊ทธ๋ ํ ๋นํ๋ฉฐ Deadlock ๋ฐ์ ์ฌ๋ถ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Deadlock์ด ๊ฒ์ถ๋๋ฉด ์ ์ ์ ํตํ ํ๋ณต์ด๋ Process(Thread) ๊ฐ์ ์ข ๋ฃ๋ฅผ ํตํ ํ๋ณต์ ํฉ๋๋ค.
- ์ ์ ์ ํตํ ํ๋ณต: Deadlock์ด ํด๊ฒฐ๋ ๋๊น์ง ๋ค๋ฅธ Process(Thread)๋ก๋ถํฐ ์์์ ๊ฐ์ ๋ก ๋นผ์๊ณ ํ Process(Thread)์๊ฒ ์์์ ๋ชฐ์์ฃผ๋ ๋ฐฉ์
- Deadlock์ ๋์ธ ๋ชจ๋ Process(Thread)๋ฅผ ๊ฐ์ ์ข ๋ฃ๋ฅผ ํตํ ํ๋ณต: ๋ง์ Process(Thread)๋ค์ด ์์ ๋ด์ญ์ ์๊ฒ ๋จ
- Deadlock์ด ์์ด์ง ๋๊น์ง ํ๋์ Process(Thread)์ฉ ๊ฐ์ ์ข ๋ฃ๋ฅผ ํตํ ํ๋ณต: Deadlock์ด ์์ด์ก๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ณผ์ ์์ Overhead๊ฐ ์ผ๊ธฐ๋จ