๐ํ๋ก์ธ์ค์ ์ค๋ ๋
ํ๋ก์ธ์ค
ํ๋ก์ธ์ค๋ ์ปดํจํฐ์์ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ด๋ค. ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ๊ฐ๊ฐ ๋ณ๋์ ์ฃผ์ ๊ณต๊ฐ์ ํ ๋น ๋ฐ๋๋ค.
์ค๋ ๋
์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด ์์ ์ ํ๋ฆ์ผ๋ก ํ๋ก์ธ์ค์ ์คํ ๊ฐ๋ฅํ ๊ฐ์ฅ ์์ ๋จ์์ด๋ค. ๊ฐ ํ๋ก์ธ๋ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์๋ค. ๋ํ ์ฝ๋, ๋ฐ์ดํฐ, ์คํ, ํ์ ๊ฐ๊ฐ ์์ฑํ๋ ํ๋ก์ธ์ค์ ๋ฌ๋ฆฌ ์ค๋ ๋๋ ์ฝ๋, ๋ฐ์ดํฐ, ํ์ ์ค๋ ๋๋ผ๋ฆฌ ๊ณต์ ํ๊ณ , ๊ทธ ์ธ์ ์์ญ์ ๊ฐ๊ฐ ์์ฑ๋๋ค.
*๋์ ์์ญ
-์คํ: ์ง์ญ ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฆฌํด ๊ฐ
-ํ: ๋์ ํ ๋น ์์ ์ฌ์ฉ
*์ ์ ์์ญ
-๋ฐ์ดํฐ: ์ ์ญ ๋ณ์, ์ ์ ๋ณ์, ๋ฐฐ์ด ๋ฑ
-์ฝ๋: ์ฝ๋ ์์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ
์ค๋ ๋๊ฐ Stack ์์ญ๋ง ๋ฐ๋ก ํ ๋น ๋ฐ๋ ์ด์ ?
- ์ค๋ ๋๋ ๋ ๋ฆฝ์ ์ธ ๋์์ ์ํํ๊ธฐ ์ํด ์กด์ฌํ๋ค.
- ์ฆ, ๋ ๋ฆฝ์ ์ผ๋ก ํจ์๋ฅผ ํธ์ถํ ์ ์์ด์ผ ํ๋ค.
- ๋๋ฌธ์ ํจ์์ ๋งค๊ฐ ๋ณ์, ์ง์ญ ๋ณ์ ๋ฑ์ ์ ์ฅํ๋ ์คํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น ๋ฐ์์ผ ํ๋ค.
๐๋ฉํฐํ๋ก์ธ์ฑ๊ณผ ๋ฉํฐ์ค๋ ๋ฉ
๋ฉํฐํ๋ก์ธ์ค
๋ฉํฐํ๋ก์ธ์ค๋ ํ๋์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑํ์ฌ ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์์ ์ ์ํํ๋ ๊ฒ์ ๋งํ๋ค.
-์ฅ์ : ์์ ์ฑ(๋ฉ๋ชจ๋ฆฌ ์นจ๋ฒ ๋ฌธ์ ๋ฅผ OS ์ฐจ์์์ ํด๊ฒฐํ๋ค.)
-๋จ์ : ๊ฐ๊ฐ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๊ณ ์์ด, ์์ ๋์ด ๋ง์์๋ก ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค. Context Switching์ผ๋ก ์ธํ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฉํฐ์ค๋ ๋ฉ
๋ฉํฐ์ค๋ ๋ฉ์ ํ๋ก์ธ์ค ๋ด ์์ ์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋, ๋ฉํฐ์ค๋ ๋๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ์ด๋ฉฐ ์ค๋ ๋๋ผ๋ฆฌ ์๋ก ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ฑ์ด ๋๋ค.
- ์ฅ์ : ๋ ๋ฆฝ์ ์ธ ํ๋ก์ธ์ค์ ๋นํด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋งํ์ ์๊ฐ, ์์ ์์ค์ด ๊ฐ์ํ์ฌ ์ ์ญ ๋ณ์์ ์ ์ ๋ณ์์ ๋ํ ์๋ฃ๋ฅผ ๊ณต์ ํ ์ ์๋ค.
๋จ์ : ์์ ์ฑ ๋ฌธ์ . ํ๋์ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ๋ง๊ฐ๋จ๋ฆฌ๋ฉด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ค๋ ๋๊ฐ ์๋ ๋ถ๋ฅ ์ํ์ ๋น ์ง๋ค.
๐์์ฝ
- ํ๋ก์ธ์ค๋ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋งํ๋ฉฐ, ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด ์์ ์ ํ๋ฆ์ ๋งํ๋ค.
- ๋ฉํฐํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ด์ฉํ์ฌ ์์ ์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ฉฐ, ๋ฉํฐ์ค๋ ๋ฉ์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ์ด์ฉํ์ฌ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ค.
- ๋ฉํฐํ๋ก์ธ์ค๋ ๋ฐ์ดํฐ, ์ฝ๋, ํ, ์คํ ์์ญ ๋ฑ์ ๊ณต์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ ์ฑ์ด ๋๋ค. ํ์ง๋ง ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ๋ฉํฐ ์ค๋ ๋๋ ์คํ ์์ญ์ ๊ณต์ ํ๋ฉฐ, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋งํผ์ ์๊ฐ๊ณผ ๋น์ฉ์ ์ค์ผ ์ ์๋ค. ํ์ง๋ง ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ธํด์ ํ๋์ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ๋ง๊ฐ๋จ๋ฆผ๋ ๋ชจ๋ ์ค๋ ๋๊ฐ ์๋ ๋ถ๋ฅ ์ํ์ ๋น ์ง๋ค.
๐๊ณต์ ์์๊ณผ ์๊ณ ์์ญ
๊ณต์ ์์
๊ณต์ ์์์ ์์คํ ์์์ ๊ฐ ํ๋ก์ธ์ค, ์ค๋ ๋๊ฐ ํจ๊ป ์ ๊ทผํ ์ ์๋ ์์์ ๋งํ๋ค. ์ด ๊ณต์ ์์์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ฝ๊ฑฐ๋ ์ฐ๋ ์ํฉ์ ๊ฒฝ์ ์ํฉ(race condition)์ด๋ผ๊ณ ํ๋ค.
์๊ณ ์์ญ
์๊ณ ์์ญ์ ๋ ์ด์์ ํ๋ก์ธ์ค, ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ ๋ ์์ ๋ฑ์ ์ด์ ๋ก ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ์ฝ๋ ์์ญ์ ๋งํ๋ค. ์๊ณ ์์ญ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 1) ๋ฎคํ ์ค, 2) ์ธ๋งํฌ์ด, 3) ๋ชจ๋ํฐ ์ธ ๊ฐ์ง๊ฐ ์์ผ๋ฉฐ, ์ด ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ํธ ๋ฐฐ์ , ํ์ ๋๊ธฐ, ์ตํต์ฑ์ด๋ผ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
1) ๋ฎคํ ์ค
๋ฎคํ ์ค๋ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ lock()์ ํตํด ์ ๊ธ ์ค์ ํ๊ณ ์ฌ์ฉํ ํ์๋ unlock()์ ํตํด ์ ๊ธ ํด์ ํ๋ ๊ฐ์ฒด๋ก, ์ ๊ธ์ด ์ค์ ๋๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ ์ ๊ธด ์ฝ๋ ์์ญ์ ์ ๊ทผํ ์ ์๊ณ ํด์ ๋ ๊ทธ์ ๋ฐ๋์ด๋ค. ๋ํ ๋ฎคํ ์ค๋ ์ ๊ธ ๋๋ ์ ๊ธ ํด์ ํ๋ ์ํ๋ง์ ๊ฐ์ง๋ค.
2) ์ธ๋งํฌ์ด
์ธ๋งํฌ์ด๋ ์ผ๋ฐํ๋ ๋ฎคํ ์ค๋ก ๊ฐ๋จํ ์ ์ ๊ฐ๊ณผ ๋ ๊ฐ์ง ํจ์ wait ๋ฐ signal๋ก ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ์ฒ๋ฆฌํ๋ค. ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ๋ฉด ์ธ๋งํฌ์ด์์ wait() ์์ ์ ์ํํ๊ณ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ํด์ ํ๋ฉด ์ธ๋งํฌ์ด์์ signal() ์์ ์ ์ํํ๋ค. ์ธ๋งํฌ์ด์์๋ ์กฐ๊ฑด ๋ณ์๊ฐ ์๊ณ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์ธ๋งํฌ์ด ๊ฐ์ ์์ ํ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ ๋์์ ์ธ๋งํฌ์ด ๊ฐ์ ์์ ํ ์ ์๋ค. - ๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด, ์นด์ดํ ์ธ๋งํฌ์ด ๋ฑ
3) ๋ชจ๋ํฐ
๋ชจ๋ํฐ๋ ๋ ์ด์์ ์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์์ ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ๊ณต์ ์์์ ์จ๊ธฐ๊ณ ํด๋น ์ ๊ทผ์ ๋ํ ์ธํฐํ์ด์ค๋ง ์ ๊ณตํ๋ค.
๐๊ต์ฐฉ ์ํ(๋ฐ๋๋ฝ, deadlock)
๊ต์ฐฉ ์ํ(deadlock)์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๋ค์ด ์๋ก๊ฐ ๊ฐ์ง ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ์ค๋จ๋ ์ํ๋ฅผ ๋งํ๋ค.
๊ต์ฐฉ ์ํ์ ์์ธ
- ์ํธ ๋ฐฐ์ : ํ ํ๋ก์ธ์ค๊ฐ ์์์ ๋ ์ ํ๊ณ ์์ผ๋ฉฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ์ ๊ทผ์ด ๋ถ๊ฐํ๋ค.
- ์ ์ ๋๊ธฐ: ํน์ ํ๋ก์ธ์ค๊ฐ ์ ์ ํ ์์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์์ฒญํ๋ ์ํ์ด๋ค.
- ๋น์ ์ : ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์์์ ๊ฐ์ ์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ํํ ๋๊ธฐ: ํ๋ก์ธ์ค A๋ ํ๋ก์ธ์ค B์ ์์์ ์๊ตฌํ๊ณ , ํ๋ก์ธ์ค B๋ ํ๋ก์ธ์ค A์ ์์์ ์๊ตฌํ๋ ๋ฑ ์๋ก๊ฐ ์๋ก์ ์์์ ์๊ตฌํ๋ ์ํฉ์ ๋งํ๋ค.
๊ต์ฐฉ ์ํ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
1. ์์์ ํ ๋นํ ๋ ์ ์ด์ ์กฐ๊ฑด์ผ ์ฑ๋ฆฝ๋์ง ์๋๋ก ์ค๊ณํ๋ค.
2. ๊ต์ฐฉ ์ํ์ ๊ฐ๋ฅ์ฑ์ด ์์ ๋์๋ง ์์์ ํ ๋นํ๋ฉฐ, ํ๋ก์ธ์ค ๋น ์์ฒญํ ์์๋ค์ ์ต๋์น๋ฅผ ํตํด ์์ ํ ๋น ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ ํ๋ "์ํ์ ์๊ณ ๋ฆฌ์ฆ"์ ์ฌ์ฉํ๋ค.
3. ๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํ๋ฉด ์ฌ์ดํด์ด ์๋์ง ์ฐพ์๋ณด๊ณ ์ด์ ๊ด๋ จ๋ ํ๋ก์ธ์ค๋ฅผ ํ ๊ฐ์ฉ ์ง์ด๋ค.
4. ๊ต์ฐฉ ์ํ๋ ๋งค์ฐ ๋๋ฌผ๊ฒ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋น์ฉ์ด ๋ ์ปค์ ๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํ๋ฉด ์ฌ์ฉ์๊ฐ ์์ ์ ์ข ๋ฃํ๋ค.
*Java์์ ๋์์ฑ ์ ์ด
Java์์๋ synchronized ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ฑ ์ ์ด๋ฅผ ์ํํ๋ค. synchronized๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ๊ณต์ ๋ฆฌ์์ค(์: ๊ฐ์ฒด, ๋ฉ์๋)์ ์ ๊ทผํ ๋ ๋ฐ์ํ ์ ์๋ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์ด๋ฅผ ํตํด ํน์ ์ฝ๋ ๋ธ๋ก ๋๋ ๋ฉ์๋๋ฅผ ๋๊ธฐํํ์ฌ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ทผํ๋๋ก ๋ณด์ฅํ๋ค.
synchronized (lockA) {
synchronized (lockB) {
// critical section
}
}
'๐CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP, Object-Oriented Programming) (0) | 2024.11.20 |
---|---|
์ํํธ์จ์ด V&V(Verification & Validation) (2) | 2024.11.20 |
[OS]ํ๋ก์ธ์ค์ ์ค๋ ๋(1) (0) | 2024.11.13 |
ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง, ์ ์ ์ฝ๋ ๋ถ์/๋์ ์ฝ๋ ๋ถ์ (0) | 2024.11.11 |
์ ๋ก ํธ๋ฌ์คํธ (2) | 2024.11.04 |