week10_incheol_2 - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
๊ต์ฐฉ์ํ๋?
๊ต์ฐฉ์ํ(Dead Lock)์ ๋ ์ด์์ ํ๋ก์ธ์ค๋ค์ด ์์์ ์ ์ ํ ์ํ์์ ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ์ ํ๊ณ ์๋ ์์์ ์๊ตฌํ๋ฉฐ ๋ฌดํ์ ๊ธฐ๋ค๋ฆฌ๋ ํ์์ ์๋ฏธํ๋ค.
๊ต์ฐฉ์ํ ๋ฐ์ ์กฐ๊ฑด
์ฃผ๋ก ๋ฉํฐ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์์ ํ์ ๋ ์์์ ์ป๊ธฐ ์ํด ์๋ก ๊ฒฝ์ํ๋ ์ํฉ์์ ๋ฐ์ํ๋ค.
๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๊ธฐ ์ํด์๋ ๋ค์์ ๋ค๊ฐ์ง ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ด์ผ ํ๋๋ฐ, ์ด ๋ค๊ฐ์ง ์กฐ๊ฑด์ค ํ๋๋ผ๋ ์ถฉ์กฑ๋์ง ์์ผ๋ฉด ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
์ํธ๋ฐฐ์ (Mutual Exclusion)
์์์ ํ ๋ฒ์ ํ ํ๋ก์ธ์ค๋ง์ด ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค. ์ํธ ๋ฐฐ์ ๊ธฐ๋ฒ์๋ ๋ฎคํ ์ค, ์ธ๋งํฌ์ด ๋ฑ์ด ์๋ค.
์ ์ ์ ๋๊ธฐ(Hold and Wait)
์ต์ํ ํ๋์ ์์์ ์ ์ ํ๊ณ ์์ผ๋ฉด์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ํ ๋น๋์ด ์ฌ์ฉํ๊ณ ์๋ ์์์ ์ถ๊ฐ๋ก ์ ์ ํ๊ธฐ ์ํด ๋๊ธฐํ๋ ํ๋ก์ธ์ค๊ฐ ์์ด์ผ ํ๋ค.
๋น์ ์ (Non-preemption)
๋ค๋ฅธ ํ๋ก์ธ์ค์ ํ ๋น๋ ์์์ ์ฌ์ฉ์ด ๋๋ ๋๊น์ง ๊ฐ์ ๋ก ๋นผ์์ ์ ์์ด์ผ ํ๋ค.
ํ๊ฒฝ ๋๊ธฐ(Circular Wait)
์๋ก ๋ค๋ฅธ ๊ณต์ ์์์ ์ฌ์ฉํ๊ธฐ ์ํด ๋๊ธฐํ๋ ํ๋ก์ธ์ค๋ค์ด ์ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ด ์์ ์๊ฒ ํ ๋น๋ ์์์ ์ ์ ํ๋ฉด์ ์์ด๋ ๋ค์ ์๋ ํ๋ก์ธ์ค์ ์์์ ์๊ตฌํ๋ค.
๊ต์ฐฉ์ํ ํด๊ฒฐ ๋ฐฉ์
์๋ฐฉ(Prevention)
๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ฌ์ ์ ์์คํ ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ต์ฐฉ์ํ ๋ฐ์์ ๋ค๊ฐ์ง ์กฐ๊ฑด ์ค์์ ์ด๋ ํ๋๋ฅผ ์ ๊ฑฐํ๋ค. ๋จ, ์์ ๋ญ๋น๊ฐ ๊ฐ์ฅ ์ฌํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ค.
- ์ํธ ๋ฐฐ์ (Mutual Exclusion)๋ถ์ : ํ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
- ์ ์ ๋ฐ ๋๊ธฐ(Hold and Wait) ๋ถ์ : ํ๋ก์ธ์ค๊ฐ ์คํ๋๊ธฐ ์ ํ์ํ ๋ชจ๋ ์์์ ํ ๋นํ์ฌ ํ๋ก์ธ์ค ๋๊ธฐ๋ฅผ ์์ ๊ฑฐ๋ ์์์ด ์ ์ ๋์ง ์์ ์ํ์์๋ง ์์์ ์๊ตฌํ๋ค.
- ๋น์ ์ (Non-preemption)๋ถ์ : ์์์ ์ ์ ํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ์์์ ์๊ตฌํ ๋ ์ ์ ํ๊ณ ์๋ ์์์ ๋ฐ๋ฉํ๊ณ , ์๊ตฌํ ์์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฐ๋ค.
- ํํ ๋๊ธฐ(Circular Wait)๋ถ์ : ์์์ ์ ํ ์์๋ก ๋ถ๋ฅํ์ฌ ๊ณ ์ ๋ฒํธ๋ฅผ ํ ๋นํ๊ณ , ๊ฐ ํ๋ก์ธ์ค๋ ํ์ฌ ์ ์ ํ ์์์ ๊ณ ์ ๋ฒํธ๋ณด๋ค ์์ด๋ ๋ค ์ด๋ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ์์์ ์๊ตฌํ๋๋ก ํ๋ค.
ํํผ(Avoidance)
๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ๋ฐฐ์ ํ์ง ์๊ณ ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ ํ ํผํด๋๊ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์ฃผ๋ก ์ํ์ ์๊ณ ๋ฆฌ์ฆ(Banker's Algorithm)์ด ์ฌ์ฉ๋๋ค.
์ํ์ ์๊ณ ๋ฆฌ์ฆ
- ์ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ต์คํธ๋ผ๊ฐ ์ ์ํ ๊ธฐ๋ฒ์ผ๋ก, ์ํ์์ ๋ชจ๋ ๊ณ ๊ฐ์ ์๊ตฌ๊ฐ ์ถฉ์กฑ๋๋๋ก ํ๊ธ์ ํ ๋นํ๋๋ฐ์ ์ ๋ํ ๊ธฐ๋ฒ์ด๋ค.
- ๊ฐ ํ๋ก์ธ์ค์๊ฒ ์์์ ํ ๋นํ์ฌ ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉฐ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ์ ์๋ ์ํ๋ฅผ ์์ ์ํ, ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ ์ ์๋ ์ํ๋ฅผ ๋ถ์์ ์ํ๋ผ๊ณ ํ๋ค.
- ์ํ์ ์์์ ํ ๋นํ ํ์๋ ์์ ์ํ๋ก ๋จ์์๋์ง ๊ฒ์ฌํ์ฌ ์์ ์ํ์ ์์ผ๋ฉด ์์์ ํ ๋นํ๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ์์์ ํด์ ํ ๋๊น์ง ๋๊ธฐํ๋ค.
- ์ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๊ธฐ ์ํด์๋ ์์์ ์๊ณผ ์ฌ์ฉ์(ํ๋ก์ธ์ค) ์๊ฐ ์ผ์ ํด์ผ ํ๋ค.
- ์ํ์ ์๊ณ ๋ฆฌ์ฆ์ ํ๋ก์ธ์ค์ ๋ชจ๋ ์๊ตฌ๋ฅผ ์ ํํ ์๊ฐ์์ ํ ๋นํ๋ ๊ฒ์ ๋ณด์ฅํ๋ค.
ํ์ง(Detection)
์์คํ ์ ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๋์ง ์ ๊ฒํ์ฌ ๊ต์ฐฉ์ํ์ ์๋ ํ๋ก์ธ์ค์ ์์์ ๋ฐ๊ฒฌํ๋ค.
- ๊ต์ฐฉ์ํ ๋ฐ๊ฒฌ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์์ ํ ๋น ๊ทธ๋ํ ๋ฑ์ ์ฌ์ฉ ํ ์ ์๋ค.
๋ณต๊ตฌ(Recovery)
๊ต์ฐฉ์ํ๋ฅผ ์ผ์ผํจ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๊ฑฐ๋ ๊ต์ฐฉ์ํ์ ํ๋ก์ธ์ค์ ํ ๋น๋ ์์์ ์ ์ ํ์ฌ ํ๋ก์ธ์ค๋ ์์์ ํ๋ณตํ๋ค.
ํ๋ก์ธ์ค ์ข ๋ฃ
- ๊ต์ฐฉ์ํ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃ
- ๊ต์ฐฉ์ํ์ ์๋ ํ๋ก์ธ์ค๋ค์ ํ๋์ฉ ์ข ๋ฃ
์์์ ์
- ๊ต์ฐฉ์ํ์ ํ๋ก์ธ์ค๊ฐ ์ ์ ํ๊ณ ์๋ ์์์ ์ ์ ํ์ฌ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ๋ฉฐ, ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ผ์ ์ ์ง์ํค๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค, ์ํ๋ ์ ๋๊ฐ ์ ์ ํ๋ก์ธ์ค, ์ฌ์ฉ๋๋ ์์์ด ์ ์ ํ๋ก์ธ์ค ๋ฑ์ ์์ฃผ๋ก ํด๋น ํ๋ก์ธ์ค์ ์์์ ์ ์ ํ๋ค.
๋ฎคํ ์ค(mutex)
๋ฎคํ ์ค๋ Key ์ ํด๋นํ๋ ์ด๋ค ์ค๋ธ์ ํธ๊ฐ ์์ผ๋ฉฐ ์ด ์ค๋ธ์ ํธ๋ฅผ ์์ ํ (์ฐ๋ ๋,ํ๋ก์ธ์ค) ๋ง์ด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ค.
๊ณผ์
- 1๋ฒ ํ๋ก์ธ์ค๊ฐ ์์์ ์ ๊ทผํ๊ธฐ ์ํด Key๋ฅผ ์ ์ ํ๋ค.
- 1๋ฒ ํ๋ก์ธ์ค๋ ํค๋ฅผ ์ ์ ํ๊ธฐ ๋๋ฌธ์ ๊ณต์ ์์์ ์ฌ์ฉํ๋ค.
- 2๋ฒ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ค.
- 2๋ฒ ํ๋ก์ธ์ค๋ ํค๋ฅผ ์ ์ ํ๊ธฐ ์ํด ๋๊ธฐํ๋ค.
- 3๋ฒ ํ๋ก์ธ์ค ๋ํ ๊ณต์ ์์์ ์ฌ์ฉํ๊ธฐ ์ํด 2๋ฒ ํ๋ก์ธ์ค ๋ค์ ์๋ฒ์ผ๋ก ๋๊ธฐํ๋ค.
- 1๋ฒ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ๋ค ์ฌ์ฉํ๊ณ Key๋ฅผ ๋ฐํํ๋ค.
- 2๋ฒ ํ๋ก์ธ์ค๋ ๋๊ธฐํ๊ณ ์๋ค๊ฐ ๋ฐํ๋ Key๋ฅผ ์ ์ ํ๊ณ ๊ณต์ ์์์ ์ฌ์ฉํ๋ค.
์ธ๋งํฌ์ด(Semaphore)
๊ณต์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋ ์ต๋ ํ์ฉ์น ๋งํผ ๋์ ์ฌ์ฉ์(์ฐ๋ ๋, ํ๋ก์ธ์ค) ์ ๊ทผ์ ํ์ฉํ๊ฒ ํ๋ค.
๊ณผ์
- ๊ณต์ ์์์ ๋ํ ์ต๋ ํ์ฉ์น๋ฅผ ์ ์ํ๋ค. ์ฐ์ , 3์ผ๋ก ํด๋ณด๊ฒ ๋ค.
- 1๋ฒ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ๋ค. ํ์ฉ์น๋ 2๋ก ๊ฐ์ํ์๋ค.
- 2๋ฒ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ๋ค. ํ์ฉ์น๋ 1๋ก ๊ฐ์ํ์๋ค.
- 3๋ฒ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ๋ค. ํ์ฉ์น๋ 0๋ก ๊ฐ์ํ์๋ค.
- 4๋ฒ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ๋ค. ํ์ฉ์น๊ฐ 0์ด๋ฏ๋ก ๋๊ธฐํ๋ค.
- 2๋ฒ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ๋ค ์ฌ์ฉํ์๋ค. ํ์ฉ์น๋ 1๋ก ์ฆ๊ฐํ์๋ค.
- 4๋ฒ ํ๋ก์ธ์ค๋ ๋๊ธฐ ํ๋ค ํ์ฉ์น๊ฐ 1๋ก ์ฆ๊ฐ๋์ด ๊ณต์ ์์์ ์ ๊ทผํ๋ค. ํ์ฉ์น๋ ๋ค์ 0์ผ๋ก ๊ฐ์ํ์๋ค.
๋ฎคํ ์ค์ ์ธ๋งํฌ์ด์ ์ฐจ์ด
- ์ธ๋งํฌ์ด๋ ๋ฎคํ ์ค๊ฐ ๋ ์ ์์ง๋ง, ๋ฎคํ ์ค๋ ์ธ๋งํฌ์ด๊ฐ ๋ ์ ์๋ค.
- ์ธ๋งํฌ์ด๋ ์์ ํ ์ ์์ผ๋ฉฐ, ๋ฎคํ ์ค๋ ์์ ํ ์ ์๊ณ ์์ ์ฃผ๊ฐ ๊ทธ์ ๋ํ ์ฑ ์์ ๊ฐ์ง๋ค.
- ์ธ๋งํฌ์ด๋ ๋๊ธฐํ ๋์์ด ์ฌ๋ฌ๊ฐ ์ผ ๋ ์ฌ์ฉํ๊ณ , ๋ฎคํ ์ค๋ ๋๊ธฐํ ๋์์ด ์ค๋ก์ง ํ๋ ์ผ ๋ ์ฌ์ฉ๋๋ค.
์ฐธ๊ณ
- https://medium.com/@abhishekdesilva/avoiding-deadlocks-and-performance-tuning-for-mssql-with-wso2-servers-c0014affd1e
- https://prepinsta.com/operating-systems/mutex/
- https://prepinsta.com/operating-systems/semaphore/
- https://kim6394.tistory.com/193
- https://jhnyang.tistory.com/4?category=815411
- https://includestdio.tistory.com/12
- https://coding-factory.tistory.com/311
- https://worthpreading.tistory.com/90