๋ฉํฐ์ค๋ ๋ฉ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค ๋ณด๋ฉด ๋ฐ์ดํฐ์ ๊ฒฐ๊ณผ๊ฐ ์์๊ณผ ๋ค๋ฅธ ์ํฉ์ ๋ง์ฃผํ ๋๊ฐ ์๋ค.
์ด๊ฑด ๋์์ฑ ๋ฌธ์ ๋๋ฌธ์ธ๋ฐ, ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ค์ป๋๋ฉด์ ์๋ก ๊ฐ์ญ์ ํ๊ฒ ๋์ด ๊ฒฐ๊ณผ๊ฐ ๊ผฌ์ด๋ ๊ฒ์ด๋ค.
์ด๋ฒ ๊ธ์์๋ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋๊ธฐํ์ ๋ฝ์ ๊ฐ๋ ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
โ๏ธ ๊ธฐ๋ณธ ๊ฐ๋
โ๏ธ ๋์์ฑ ๋ฌธ์ (Concurrency Problem)
๋์์ฑ ๋ฌธ์ ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ์๋ฏธํ๋ค. ์ด๋ ์ฃผ๋ก ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ด๋ ์ผ๊ด์ฑ ๋ฌธ์ , ๋ฐ๋๋ฝ(Deadlock), ๊ฒฝ์ ์กฐ๊ฑด(Race Condition) ๋ฑ์ ํํ๋ก ๋ํ๋๋ค.
์ฐธ๊ณ ๋ก ๋ฐ๋๋ฝ์ ๋ค์์ ๋ ์์ธํ ๋ค๋ฃจ๊ธฐ ์ํด ์ด๋ฒ ๊ธ์์๋ ์ถ๊ฐ์ ์ผ๋ก ์ธ๊ธํ์ง ์์ ์์ ์ด๋ค.
โ๏ธ Race condition(๊ฒฝ์ ์กฐ๊ฑด)
์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋, ์ด๋ค ์์๋ก ์คํ๋๋์ง์ ๋ฐ๋ผ ์์ํ์ง ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์๋ ์๋ ์ํฉ์ ๊ฒฝ์ ์กฐ๊ฑด(Race Condition)์ด๋ผ ํ๋ค. ์ด๋ ์ฃผ๋ก ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๊นจ๋จ๋ฆฌ๋ ๋ฌธ์ ๋ก ๋ํ๋๋ฉฐ, ๋๊ธฐํ๋ฅผ ํตํด ํด๊ฒฐํ ์ ์๋ค.
โ๏ธ Synchronization(๋๊ธฐํ)
๋๊ธฐํ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๋์์ ์ด๋ค ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋๋ผ๋, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋๋ก ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.
โ๏ธ Critical section(์๊ณ ์์ญ)
์๊ณ ์์ญ์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ ๊ตฌ๊ฐ์ ๋งํ๋ค. ๋ฐ๋ผ์ ์ด ์์ญ์๋ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋๋ง ์ง์ ํ ์ ์์ด์ผ ํ๋ค.
โ๏ธ Mutual exclusion(์ํธ ๋ฐฐ์ )
์ํธ ๋ฐฐ์ ๋ ์๊ณ ์์ญ์ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ทผํ๋๋ก ๋ณด์ฅํ๋ ์์น์ด๋ค.
โ๏ธ Atomic(์์์ฑ)
์์์ฑ์ด๋ ์ฌ๋ฌ ์ฐ์ฐ์ด ํ๋์ ๋ฌถ์์ผ๋ก ์ฒ๋ฆฌ๋์ด ์ค๊ฐ์ ์ค๋จ๋์ง ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
atomicํ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ ๋ค์ด์จ ๋ช ๋ น์ด๋ค์ ๋๊ธฐํ์์ผ ์คํ์ํค์ง, ๋์์ ์คํ๋์ง ์๋๋ก ํ๋ค.
๐ฅ๏ธ Lock์ ๊ธฐ๋ณธ ๊ฐ๋
- Lock์ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํต์ฌ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค!
- ์ํธ ๋ฐฐ์ ๋ฅผ ๊ตฌํํด์ ํน์ ์ค๋ ๋๊ฐ ์์์ ์ฐ๋ ๋์ ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ๋ง์์ฃผ๋ ๋ฉ์ปค๋์ฆ์ด๋ค.
- ๋ฝ(Lock)์ ์๊ณ ์์ญ์ ๋ณดํธํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
- ๋ง์ฝ ๋ฝ์ด ์๋ค๋ฉด, ๊ฒฝ์ ์กฐ๊ฑด์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฝ์ ์ฌ์ฉํด์ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํด์ผ ํ๋ค.
- ๋ฐ๋ผ์, ๋ฝ์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ ๋๋ ๋ถ์ฐ ์์คํ ์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๋์์ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ ๋, ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํ์์ ์ด๋ค.
Lock์ ๊ฐ๋จํ ๋์ ์๋ฆฌ
- ์ค๋ ๋๊ฐ Lock์ ๊ฑธ๊ณ ์๊ณ ์์ญ์ ๋ค์ด๊ฐ.
- ๋ค๋ฅธ ์ค๋ ๋๋ Lock์ด ํ๋ฆด ๋๊น์ง ๊ธฐ๋ค๋ฆผ.
- ์์ ๋๋๋ฉด Lock์ ํ๊ณ ๋ค์ ์ค๋ ๋๊ฐ ๋ค์ด๊ฐ.
โ ๏ธ Lock์ ์ข ๋ฅ์ ํน์ฑ
Mutex Lock (์ํธ ๋ฐฐ์ ์ ๊ธ)
- ๋ฎคํ ์ค๋ Mutual Exclusion์ Mut์ ex๋ฅผ ํฉ์น ๋จ์ด์ด๋ค!
- ๋ฎคํ ์ค ๋ฝ์ ํ๋์ ์ฃผ์ฒด๋ง ๋ฝ์ ํ๋ํ ์ ์๋๋ก ํ๋ค.
- ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ฝ์ ์ ์ ์ค์ด์ด์ ํ์ฌ ์ค๋ ๋๊ฐ ๋ฝ์ ํ๋ํ ์ ์๋ค๋ฉด, ์ด ์ค๋ ๋๋ ๋๊ธฐ ์ํ(sleep)๋ก ๋ค์ด๊ฐ๊ณ , ๋ฝ์ด ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ฉด ์ด์์ฒด์ ๊ฐ ํด๋น ์ค๋ ๋๋ฅผ ๊นจ์ด๋ค.
- ์ด ๋ฐฉ์์ ๋๊ธฐ ์ค CPU ์์์ ๋ญ๋นํ์ง ์๋๋ค.
๋์ ๋ฐฉ์ ์ํ์ค ๋ค์ด์ด๊ทธ๋จ
Spinlock (์คํ๋ฝ)
- ์คํ๋ฝ์ ๋ฝ์ด ํ๋ ๊ฐ๋ฅํ ๋๊น์ง ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ ํ์ธ(Spin)ํ๋ฉฐ ๋๊ธฐํ๋ ๋ฐฉ์์ด๋ค.
- ์ด ๋ฐฉ์์ ๋๊ธฐ ์ค์๋ CPU ์์์ ์ง์์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ CPU ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์๋ค.
while (lock is not available) { // ๋ฝ ํ์ธ
// ๊ณ์ ์๋ํ๋ฉฐ ๋๊ธฐ (spin)
}
lock.acquire();
// critical section
lock.release(); // ๋ฝ ํด์
๐คจ ์คํ๋ฝ๋ณด๋ค ๋ฎคํ ์ค ๋ฝ์ด ํญ์ ๋ ์ข์๊น?
๊ทธ๋ ์ง ์๋ค!
๋ง์ฝ ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์ด๊ณ ์๊ณ ์์ญ์ ์คํ ์๊ฐ์ด ์ปจํ ์คํธ ์ค์์นญ ์๊ฐ๋ณด๋ค ๋ ์งง๋ค๋ฉด, ๋ฎคํ ์ค๋ณด๋ค ์คํ๋ฝ์ด ์ ๋ฆฌํ ์ ์๋ค.
์๋ํ๋ฉด ๋ฎคํ ์ค๋ ๋๊ธฐ ์ํ๋ก ์ง์ ํ๊ฑฐ๋ ๋น ์ ธ๋์ฌ ๋ ์ปจํ ์คํธ ์ค์์นญ(context switching)์ด ํ์ํ๋ฐ, ์คํ๋ฝ์ ๊ณ์ ๊นจ์ด ์๋ ์ํ๋ก ๋ฝ ํด์ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ๋๋ฌธ์ ์ปจํ ์คํธ ์ค์์นญ์ด ํ์๊ฐ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ง์ฝ ์๊ณ์์ญ ์คํ ์๊ฐ์ด ์์ฒญ ์งง์ผ๋ฉด, ๋ฎคํ ์ค ๋ฐฉ์ ์์คํ ์์ ์ปจํ ์คํธ ์ค์์นญ ํ๋ ๋์์ ์คํ๋ฝ ์์คํ ์์๋ ์ด๋ฏธ ๋ฝ์ ํ๋ํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ ๋ก ์ฑ๊ธ์ฝ์ด ํ๊ฒฝ์์๋ ์คํ๋ฝ์ ์ด์ ์ด ์๋ค.
์ด์ฐจํผ ํ๋์ ์ฝ์ด์์ ์์ ์ ์งํํ๋ฏ๋ก ์ปจํ ์คํธ ์ค์์นญ์ด ๋ฐ๋์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฑ๊ธ์ฝ์ด ํ๊ฒฝ๊ณผ ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์์ ์คํ๋ฝ ๋์์ ๋น๊ตํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ฑ๊ธ์ฝ์ด์์ ์คํ๋ฝ
- ์ํฉ: CPU๊ฐ ํ๋๋ฟ์ด๋ผ ํ ๋ฒ์ ํ ์ค๋ ๋๋ง ์คํ.
- ์คํ๋ฝ ํน์ง: ์ค๋ ๋2๊ฐ ๋ฝ์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ CPU๋ฅผ ์ก๊ณ "๋ฝ ํ๋ ธ๋?" ๊ณ์ ํ์ธ.
- ๋ฌธ์ : ์ค๋ ๋2๊ฐ CPU๋ฅผ ์ฐ๋ ๋์ ์ค๋ ๋1์ด ๋ฝ์ ํ ๊ธฐํ๋ฅผ ๋ชป ์ป์. OS๊ฐ ๊ฐ์ ๋ก CPU๋ฅผ ๋๋ ์ค๋ ๋ญ๋น๊ฐ ํผ.
- ๊ฒฐ๊ณผ: ๋๋ฆฌ๊ณ ๋นํจ์จ์ . ๋ฎคํ ์ค๊ฐ ๋์(์ค๋ ๋2๊ฐ ์ ๋ค๊ณ CPU๋ฅผ ์๋ณด).
๋ฉํฐ์ฝ์ด์์ ์คํ๋ฝ
- ์ํฉ: CPU๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ ์ค๋ ๋1๊ณผ ์ค๋ ๋2๊ฐ ๋์์ ์คํ ๊ฐ๋ฅ.
- ์คํ๋ฝ ํน์ง: ์ค๋ ๋2๊ฐ ํ ์ฝ์ด์์ "๋ฝ ํ๋ ธ๋?" ํ์ธ, ์ค๋ ๋1์ ๋ค๋ฅธ ์ฝ์ด์์ ์คํ.
- ์ฅ์ : ์ค๋ ๋1์ด ๋ฝ์ ํ๋ฉด ์ค๋ ๋2๊ฐ ๋ฐ๋ก ์ง์ . CPU ๋ญ๋น ์์ด ๋น ๋ฆ.
- ๊ฒฐ๊ณผ: ์๊ณ ์์ญ์ด ์งง์ผ๋ฉด ํจ์จ์ . ๋ฎคํ ์ค๋ณด๋ค ์ ๋ฆฌํ ์ ์์.
Semaphore(์ธ๋งํฌ์ด)
- ์ธ๋งํฌ์ด๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์๊ณ ์์ญ์ ๋ค์ด๊ฐ ์ ์๋๋ก, ๋์์ ์ ๊ทผ ๊ฐ๋ฅํ ์ค๋ ๋์ ๊ฐ์๋ฅผ ์ง์ ํ ์ ์๋ค.
- ๊ณต์ ์์์ ์ํ๋ฅผ ๋ํ๋ด๋ ์นด์ดํฐ๋ก ์ ๊ทผ ์๋ฅผ ์กฐ์ ํ๋ค.
- ์ด์ง ์ธ๋งํฌ์ด๋ฅผ ํ์ฉํด ์ํธ ๋ฐฐ์ ๋ฅผ ๊ตฌํํ ์ ์๋ค.
2๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์ํ์ค ๋ค์ด์ด๊ทธ๋จ

๐คจ ๊ทธ๋ผ ๋ฎคํ ์ค์ ์ด์ง ์ธ๋งํฌ์ด๋ ๋๊ฐ์ ๊ฒ์ธ๊ฐ??
๊ทธ๋ ์ง ์๋ค!
- ๋ฎคํ ์ค: ๋ฝ์ ๊ฑด ์ค๋ ๋๋ง ํด์ ํ ์ ์๊ณ , Priority Inheritance๋ฅผ ์ง์ํ๋ค.
- ์ธ๋งํฌ์ด: ๋๊ตฌ๋ ๋ฝ์ ํด์ ํ ์ ์๊ณ , ์์ ์กฐ์ ์ ์ ์ฉํ์ง๋ง Priority Inheritance ์์.
Priority Inheritance๋?
์ค๋ ๋๊ฐ CPU ํ ๋น์ ๋๋ฌด ์ค๋ ๊ธฐ๋ค๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด, ๋ฎ์ ์ฐ์ ์์ ์ค๋ ๋๊ฐ ๋ฝ์ ์ก๊ณ ์์ผ๋ฉด ์ ๊น ์ฐ์ ์์๋ฅผ ์ฌ๋ ค์ค์ ๋นจ๋ฆฌ ๋๋ด๊ฒ ํ๋ ๊ฒ.
โ๏ธ ๊ฒฐ๋ก
๋์์ฑ ๋ฌธ์ ๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ๋์์ ์ ๊ทผํ๋ฉฐ ๋ฐ์ดํฐ ๋ถ์ผ์น๋ฅผ ์ด๋ํ๋ ์ํฉ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ ์ ํ Lock์ ํ์ฉํด์ผ ํ๋ค.
- Mutex: ๋ฝ ํ๋ ์คํจ ์ ์ค๋ ๋๊ฐ sleep ์ํ๋ก ์ ํ๋์ด CPU๋ฅผ ์ ์ฝ. ์ฑ๊ธ์ฝ์ด ํ๊ฒฝ์ด๋ ๊ธด ์๊ณ ์์ญ์ ์ ํฉ.
- Spinlock: ๋ฝ์ busy waiting์ผ๋ก ํ์ธํ๋ฉฐ ๋น ๋ฅธ ์ ํ ๊ฐ๋ฅ. ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์ ์งง์ ์๊ณ ์์ญ์ ์ ๋ฆฌ.
- Semaphore: ๋ค์ค ์ค๋ ๋ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ผ ํ๊ฑฐ๋, ์์ ๊ฐ์ ์คํ ์์๋ฅผ ์ ์ดํด์ผ ํ๋ ๊ฒฝ์ฐ. ๋ณต์กํ ๋๊ธฐํ ์๊ตฌ์ฌํญ์ ํจ๊ณผ์ ์.
'๐ป Computer Science > Operating System' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OS] OS ํ๋ก์ธ์ค, JAVA ์ค๋ ๋์ ์ํ๋ฅผ ๋น๊ตํด๋ณด์ ๐ค (0) | 2025.04.09 |
---|---|
[OS] ๋ฉํฐํ๋ก๊ทธ๋๋ฐ, ๋ฉํฐํ์คํน, ๋ฉํฐ์ค๋ ๋ฉ, ๋ฉํฐํ๋ก์ธ์ฑ (0) | 2025.04.07 |