ํญ๋ชฉ |
์ ์ ๋ฐ ํน์ง |
๊ณต์ ์์ (Shared Resource) |
์ ์: ์ฌ๋ฌ ์ฌ์ฉ์๋ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํ๊ฑฐ๋ ์ฌ์ฉํ๋ ์์คํ
๋ด์ ์์์ ์๋ฏธ |
- ๋ฆฌ์์ค ๋ญ๋น๋ฅผ ๋ฐฉ์งํ๊ณ ํจ์จ์ฑ์ ๊ทน๋ํํ๊ธฐ ์ํด
- ex) ํ์ผ ์์คํ
, ๋คํธ์ํฌ ํ๋ฆฐํฐ, ๋ฉ๋ชจ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ |
| ์๊ณ ์์ญ (Critical Section) | ์ ์: ๊ณต์ ์์์ ์ ๊ทผํ๋ ํ๋ก๊ทธ๋จ ์ฝ๋์ ์ผ๋ถ๋ถ
์ ์2: ๊ณต์ ์์์ ์ ๊ทผํ๋ ํ๋ก๊ทธ๋จ ์ฝ๋์ ์ผ๋ถ๋ถ์ผ๋ก, ๋์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์ ๊ทผํ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ ๊ตฌ๊ฐ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง: ๊ณต์ ์์์ด ์๋ชป๋ ์ํ๋ก ์์ ๋์ง ์๋๋ก ํ๋ค.
- ๊ฒฝํฉ ์กฐ๊ฑด(Race Condition) ๋ฐฉ์ง: ์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋๋ฉด์ ๊ณต์ ์์์ ๋น์ ์์ ์ธ ๋์(์ค๋ณต ์์ , ๋ฐ์ดํฐ ์์ค)์ด ๋ฐ์ํ์ง ์๋๋ก ํ๋ค. |
| ๋๊ธฐํ(Synchronization) | ์ ์: ์์
(์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค)์ด ๊ณต์ ์์์ ๋์์ ์ ๊ทผํ ๋ ๋ฐ์ํ ์ ์๋ ์ถฉ๋์ด๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ณ , ์์
์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ธฐ์
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์์ค: ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ฉด ์๋ํ์ง ์์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์
- ๋ฐ์ดํฐ ๊ฒฝํฉ: ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์์์ ๋์ ์ ๊ทผํ์ฌ ์คํ ์์์ ๋ฐ๋ผ ์์ธก ๋ถ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋
- ๋ฐ๋๋ฝ: ๋๊ธฐํ๊ฐ ์๋ชป ๊ตฌํ๋๋ฉด ์ค๋ ๋ ๊ฐ ์์ ์ ์ ์์๊ฐ ๊ผฌ์ฌ ๋ฌดํ ๋๊ธฐ์ ๋น ์ง ์ํ |
| ๋ฝ | ์ ์: ํ๋์ ์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ์์์ ์ ์ ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ค๋ ๋/ํ๋ก์ธ์ค๊ฐ ํด๋น ์์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ์ดํ๋ ๊ธฐ๋ฒ |
| ์์์ฑ | ์ ์: ๋ ์ด์ ๋๋ ์ ์๋ ์ต์ ๋จ์์ ์ฐ์ฐ |
| ๋ฐ๋๋ฝ | ์ ์: ๋๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ์๋ก๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ์์ํ ์ฐจ๋จ๋๋ ์ํ๋ฅผ ์๋ฏธ |
| ๊ธฐ์ ํ์ | ์ ์: ํน์ ํ๋ก์ธ์ค์ ์ฐ์ ์์๊ฐ ๋ฎ์์ ์ํ๋ ์์์ ๊ณ์ ํ ๋น๋ฐ์ง ๋ชปํ๋ ์ํ |
| ๋ฝ-ํ๋ฆฌ (Lock-Free) ์๊ณ ๋ฆฌ์ฆ | ์ ์: ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋์์ ๋์ ํธ์ถํ๋๋ผ๋ ํน์ ๋จ์ ์๊ฐ์๋ ์ ์ด๋ ํ๊ฐ์ ํธ์ถ์ด ์๋ฃ๋๋ ์๊ณ ๋ฆฌ์ฆ
- ์์คํ
์ ์ด๋ ํ ์ค๋ ๋๋ผ๋ ๊ณ์ ์งํ๋ ์ ์์
- ํน์ ์ค๋ ๋๊ฐ ๊ณ์ ์คํจํ ์๋ ์์ง๋ง, ๋ค๋ฅธ ์ค๋ ๋๋ ๊ณ์ํด์ ์์
์ ์งํํ ์ ์์
- ๋ฐ๋๋ฝ(Deadlock)์ด ๋ฐ์ํ์ง ์์
- ํ์ง๋ง ํน์ ์ค๋ ๋๊ฐ ๋ฌดํํ ์ฌ์๋ํ ๊ฐ๋ฅ์ฑ์ด ์์(๋ผ์ด๋ธ๋ฝ(Livelock) ๊ฐ๋ฅ)
โ
๋ณด์ฅํ๋ ๊ฒ: ์ ์ด๋ ํ ๊ฐ์ ์ค๋ ๋๋ ๊ณ์ ์คํ๋จ
โ ๏ธ ๋ณด์ฅํ์ง ์๋ ๊ฒ: ๋ชจ๋ ์ค๋ ๋๊ฐ ์ ํํ ์๊ฐ ๋ด์ ์๋ฃ๋ ์ง ์ฌ๋ถ |
| ์จ์ดํธ-ํ๋ฆฌ (Wait-Free) ์๊ณ ๋ฆฌ์ฆ | ์ ์: ๋ชจ๋ ์ค๋ ๋๊ฐ ์ ํํ ๋จ๊ณ ์์์ ๋ฐ๋์ ์๋ฃ๋ ์ ์๋๋ก ๋ณด์ฅํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋ชจ๋ ์ค๋ ๋๊ฐ ์ ํํ ์ฐ์ฐ(์ ํ๋ ๋จ๊ณ) ์์์ ๋ฐ๋์ ์๋ฃ๋จ
- ๊ณต์ ์ฑ(Fairness)์ด ๋ณด์ฅ๋จ โ ํน์ ์ค๋ ๋๊ฐ ๊ณ์ ์คํจํ์ง ์์
- ๋ฐ๋๋ฝ(Deadlock)์ด ๋ฐ์ํ์ง ์์
- ๋ผ์ด๋ธ๋ฝ ๋ฐ์ํ์ง ์์
โ
๋ณด์ฅํ๋ ๊ฒ: ๋ชจ๋ ์ค๋ ๋๊ฐ ์ ํํ ์๊ฐ ๋ด์ ์์
์ ์๋ฃํจ
โ ๏ธ ๋ณด์ฅํ์ง ์๋ ๊ฒ: ๊ตฌํ์ด ๋ณต์กํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ํด ์ ์์ |
๐ย ๊ธฐ์กด ๋ฝ ๊ธฐ๋ฐ ๋๊ธฐํ ๊ธฐ๋ฒ(Mutex, Semaphore, Read-Write Lock, Spinlock, Distributed Lock ๋ฑ)์ ๊ณต์ ์์์ ๋ณดํธํ๊ธฐ ์ํด ๋ฝ์ ์ฌ์ฉํ์ง๋ง, ๋ฝ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ์ ๊ต์ฐฉ ์ํ(Deadlock) ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด.
- ๋ฝ์ ์ฌ์ฉํ์ง ์๊ณ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด Wait-Free & Lock-Free ์๊ณ ๋ฆฌ์ฆ
- ์ด๋ฌํ ๊ธฐ๋ฒ๋ค์ ๋น์ฐจ๋จ(Non-Blocking) ์๊ณ ๋ฆฌ์ฆ์ ์ํ๋ฉฐ, CAS(Compare-And-Swap) ์ฐ์ฐ ๊ฐ์ ์์์ ์ฐ์ฐ(Atomic Operation)์ ํ์ฉํด ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ๋ค.
1๏ธโฃย ์ฌ๋ฌ ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ์์ ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํ๋ ๋๊ธฐํ ์กฐ๊ฑด 3๊ฐ์ง
1. Mutual Exclusion (์ํธ ๋ฐฐ์ )
- ํ๋์ ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ(Critical Section)์ ๋ค์ด๊ฐ์ ์์์ ์ฌ์ฉํ๊ณ ์์ ๋, ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ํด๋น ์์์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค. ์ฆ, ๋์์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ์๊ณ ๊ตฌ์ญ์ ์คํํ ์ ์์.
ex)
- Lock (์ ๊ธ ๊ธฐ๋ฒ, ์: Mutex, Spinlock)
- Semaphore (์ธ๋งํฌ์ด)
2. Progress (์งํ)
- ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ์ผ ํ ํ์๊ฐ ์์ ๋, ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ๋ฌดํ์ ๋ฐฉํดํ์ง ์์์ผ ํ๋ค. ์ฆ, ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ๋ ค๋ ํ๋ก์ธ์ค๊ฐ ์์ ๊ฒฝ์ฐ, ์ ํ๋ ์๊ฐ์ด ์ง๋๋ฉด ๋ฐ๋์ ์คํ๋ ์ ์์ด์ผ ํ๋ค.
ex)
- Context Switching์ ํตํ CPU ์ ์ ๊ถ ์๋ณด
3. Bounded Waiting (์ ํํ ๋๊ธฐ)
- ํน์ ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ๊ธฐ ์ํด ๋๊ธฐํ ๋, ๋ฌดํ์ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ก ํด์ผ ํ๋ค.
ex)