2023. 3. 26. 15:32ใCS/CS ์คํฐ๋
๊ณต์ ์์ ์ ๊ทผ์ ๋ํด ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๊ฐ๋ฐ์์ ์ ์ฅ์์ ์ค์ํ ํ๋์ด๋ค.
๊ฐ๋ น,
๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์คํ์ ์ ์ธํ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ์ํฉ์ด๋
๋ค์ค ํ๋ก์ธ์ค ํ๊ฒฝ์์ IPC๋ฅผ ์ํด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ํฉ ๋ฑ์ด ์กด์ฌํ ์ ์๋ค.
์ด ๋ ํ์ฉํ ์ ์๋ ์คํฌ์ด ๋ฐ๋ก Mutex์ Semaphore์ด๋ค.
Mutex
๋ฎคํ ์ค๋ Mutual Exclusion์ ์ค์๋ง๋ก ์ํธ ๋ฐฐ์ ๋ผ๋ ๋ป์ ๊ฐ๋๋ค.
๋ฎคํ ์ค๋ ํน์ ๊ณต์ ์์์ ๋ํด ๋จ ํ๋์ ์ฃผ์ฒด๋ง์ด ์ ๊ทผํ ์ ์๊ฒ ๋ง๋๋ ๋ฝ์ ๊ฐ๋ ์ด๋ค.
๋ฎคํ ์ค์ ๊ตฌํ์ ํฌ๊ฒ lock()๊ณผ unlock()์ผ๋ก ์ด๋ฃจ์ด ์ง๋๋ฐ,
(wait()์ release()๋ก๋ ํํํ๋๋ฐ ์ฌ๊ธฐ์๋ lock()๊ณผ unlock()์ด ๋ ์ง๊ด์ ์ธ ์๋ฉ์ด๋ผ๊ณ ํ๋จ)
lock()์ ํน์ ๊ณต์ ์์์ ๋ํ ๋ค๋ฅธ ์ฃผ์ฒด์ ์ ๊ทผ์ ์ฐจ๋จํ๋ ๊ฒ์ด๊ณ unlock()์ lock()์ ์ํํ ์ฃผ์ฒด๊ฐ ๊ฑธ์๋ ๋ฝ์ ํด์ ํ๋ ๊ฐ๋ ์ด๋ค.
ํน์ ๊ณต์ ์์์์ ๋ฎคํ ์ค๋ฅผ ์ฐ๊ณ ์๋๋ฐ ๋์์ 3๊ฐ์ ์ค๋ ๋๊ฐ ์ ๊ทผํ๋ค๊ณ ๊ฐ์ ํ์.
3๊ฐ์ ์ค๋ ๋๋ค์ ๋ชจ๋ ๋ฎคํ ์ค์ lock() ์์ฒญ์ ์ ๋ฌํ๋ค.
๊ทธ ์ค ๊ฐ์ฅ ๋จผ์ ์์ฒญ์ ๋ณด๋ธ ์ค๋ ๋์ lock()์ด ์ฑ๊ณตํ๊ณ , ๋๋จธ์ง ์ค๋ ๋๋ค์ ์ด๋ฏธ ๋ฎคํ ์ค๊ฐ ๋ฝ ์ํ์ด๋ฏ๋ก ๋๊ธฐ์ ๋น ์ง๋ค.
๋ฝ์ ์ฑ๊ณตํ ์ค๋ ๋๊ฐ ์์ ์ ๋ง์น๊ณ unlock()์ ์ํํ๋ฉด ๊ทธ์ ์์ผ ๋ค์ ์๋ฒ์ ์ค๋ ๋๊ฐ ์์์ ์ ๊ทผํ ์ ์๊ฒ๋๋ค.
๋ฎคํ ์ค์์ lock() ์์ฒญ์ ์๋ฌด๋ ์ํํ ์ ์์ง๋ง, unlock() ์์ฒญ์ ์ค๋ก์ง ํ์ฌ ๊ณต์ ์์์ ์ ์ ํ๊ณ ์๋ ์ฃผ์ฒด ๋ง์ด ์ํ๊ฐ๋ฅํ๋ค.
Semaphore
๋ฎคํ ์ค๊ฐ ์ํธ ๋ฐฐ์ ์ ๋ํ ๊ธฐ์ ์ด๋ผ๊ณ ํ๋ค๋ฉด, ์ธ๋งํฌ์ด๋ ํด๋น ์ญํ ๋ฟ ์๋๋ผ ์์ ์ฃผ์ฒด๋ค ๊ฐ ์์๋ฅผ ๋ณด์ฅํ๋๋ฐ ์ฐ์ด๋ ๋ฑ ๋ฝ๊ณผ ์ปจ๋์ ๋ณ์ ๋ถ์ผ์ ํ์ฉ๋ ์ ์๋ค.
์ธ๋งํฌ์ด์์๋ ๋จผ์ ์ด๋ฅผ ์ด๊ธฐํํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ด ๋ ์ธ๋งํฌ์ด์ ๊ฐ์ ๋ฏธ๋ฆฌ ์ง์ ํด์ผ ํ๋๋ฐ, ํด๋น ๊ฐ์ ๋์์ ๊ณต์ ์์์ ์ ๊ทผํ๊ธฐ๋ฅผ ํ์ฉํ ์ฃผ์ฒด์ ์๋งํผ ์ค์ ํ๋ฉด ๋๋ค.
๊ฐ๋ น, 1๋ก ์ธ๋งํฌ์ด๋ฅผ ์ด๊ธฐํํ๋ค๋ฉด ํด๋น ๊ณต์ ์์์๋ ๋์์ ํ๋์ ์ฃผ์ฒด ๋ง์ด ์ ๊ทผ์ด ๊ฐ๋ฅํด์ง๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ์ธ๋งํฌ์ด๋ฅผ ์ด์ง ์ธ๋งํฌ์ด(Binary Semaphore)๋ผ๊ณ ํ๊ณ ์ด๋ ๋ฎคํ ์ค์ ๊ตฌํ์์ ํ์ฉ๋๋ ๋ฐฉ์ ์ค ํ๋์ด๋ค.
์ธ๋งํฌ์ด๋ฅผ ์ด๊ธฐํํ ๋ค ์ด๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ wait()์ release()๋ก ๋๋๋ค.
wait()๋ ์ธ๋งํฌ์ด์ ๊ฐ์ ํ๋ ๋ฎ์ถ๊ณ , ๋ง์ฝ ์ธ๋งํฌ์ด์ ๊ฐ์ด ์์๊ฐ ๋์๋ค๋ฉด ๋๊ธฐ์ ๋น ์ง๋ ์์ฒญ์ด๋ค.
๋ง์ฝ ์ธ๋งํฌ์ด์ ๊ฐ์ด ์์๊ฐ ์๋๋ผ๋ฉด, ๋๊ธฐ์์ด ๊ณง๋ฐ๋ก ์์ฒญ์ด ๋ฐํ๋๊ณ ๋ก์ง์ ๊ณ์ ์ํํ๋ค.
release()๋ ์ธ๋งํฌ์ด์ ๊ฐ์ ํ๋ ์์น์ํค๋ ๋ก์ง์ด๋ค.
๋ง์ฝ ํด๋น ์์ฒญ์ผ๋ก ์ธ๋งํฌ์ด์ ๊ฐ์ด ์์์์ ๋ฒ์ด๋๋ฉด,
ํ์์ ๋๊ธฐ ์ค์ธ ๋ค๋ฅธ ์ฃผ์ฒด์ wait() ์์ฒญ์ด ๋ฐํ๋์ด ํด๋น ์ฃผ์ฒด์ ๋ก์ง์ด ๋ง์ ์คํ๋๋ ๊ฒ์ด๋ค.
์ธ๋งํฌ์ด๋ 1๋ณด๋ค ๋ ํฐ ์๋ฅผ ํตํด์ ์ด๊ธฐํ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋์์ ๊ณต์ ์์์ ์ ๊ทผํ๋ ์ฃผ์ฒด์ ์๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ํํ ์ ์๋ค.
๋ํ ํน์ ์ํฉ์์ ์ธ๋งํฌ์ด์ ๊ฐ์ด ์์๋ผ๋ฉด, ์ด๋ ๊ทธ ์์ ์ ๋๊ฐ๋งํผ ์ฃผ์ฒด๋ค์ด ๋๊ธฐํ๊ณ ์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ ๊ฒ์ด๊ธฐ๋ ํ๋ค.
์ธ๋งํฌ์ด ์์ฉ (ํ๋ก์ธ์ค ๊ฐ ์๋ฃ ์์ ๋ณด์ฅ)
์ธ๋งํฌ์ด๋ฅผ ์์ฉํ๋ฉด ๋ ํ๋ก์ธ์ค ๊ฐ์ ์์๋ฅผ ๋ณด์ฅํ ์๋ ์๋ค.
์ด๋ฅผ ์ํด์๋ ์ธ๋งํฌ์ด๋ฅผ 1์ด ์๋ 0์ผ๋ก ์ด๊ธฐํ ํด์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋จผ์ ์คํ์ด ์๋ฃ๋์ด์ผ ํ๋ ํ๋ก์ธ์ค์์ release() ์์ฒญ์ ์ํํ๊ณ ,
๋ฆ๊ฒ ์๋ฃ๋์ด์ผ ํ๋ ํ๋ก์ธ์ค์์ wait() ์์ฒญ์ ์ํํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
์ด๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ๋ถ๋ชจ ํ๋ก์ธ์ค Parent์ ์์ ํ๋ก์ธ์ค Child๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ฐ์ , Parent๊ฐ ๋จผ์ ์คํ๋ ์ํฉ์ ์๊ฐํด๋ณด์.
Parent๋ ๋ด๋ถ์ ์ผ๋ก wait() ์์ฒญ์ ์ํํ ๊ฒ์ด๋ค.
์ด ๋ ์ธ๋งํฌ์ด์ ๊ฐ์ 0์ด๊ธฐ ๋๋ฌธ์,
wait() ์์ฒญ ์ -1์ด ๋๊ณ ์ด์ ๋ฐ๋ผ Parent๋ ๋๊ธฐ ์ํ์ ๋น ์ง๊ฒ ๋์ด CPU ์ ์ด๊ถ์ Child์๊ฒ ๋๊ธฐ๊ฒ ๋๋ค.
์ดํ Child()๊ฐ ์คํ๋์ด release() ์์ฒญ๊ณผ ํจ๊ป ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋๋ฉด ์ธ๋งํฌ์ด์ ๊ฐ์ ๋ค์ 0์ด ๋ ์ฑ Parent๊ฐ ๋๊ธฐ ์ํ์์ ๋ฒ์ด๋๊ฒ ๋๋ค.
๋ฐ๋ผ์ Child -> Parent ์์๊ฐ ๋ณด์ฅ๋๊ฒ ๋๋ค.
๋ฐ๋์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
Child๊ฐ ๋จผ์ ์ํ๋๋ค. ๊ทธ๋ฐ๋ฐ Child๊ฐ ์ํ๋๋ค๊ฐ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํด์ CPU ์ ์ด๊ถ์ด ์ด์์ฒด์ ๋ก ๋์ด๊ฐ๊ณ , ์ด์์ฒด์ ๋ ๋ค์ ์ฐจ๋ก๋ก Parent๋ฅผ ์ค์ผ์ค๋ง ํ๋ค๋ฉด?
ํด๋น ๊ฒฝ์ฐ์๋ Parent๊ฐ ์ํ๋๋ ๋์ค wait() ์์ฒญ์ ์ํํ๊ณ ์ด์ ๋ฐ๋ผ Parent๋ ๋๊ธฐ ์ํ๊ฐ ๋์ด Child๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ๋ฐ์ ์๋ค.
๋ฐ๋ผ์ ํด๋น ๊ฒฝ์ฐ์๋ Child -> Parent ์์๊ฐ ๋ณด์ฅ๋๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ์์ฉ์ด ๊ฐ๋ฅํ ๊ฒ์, ์ธ๋งํฌ์ด๋ ๋ฎคํ ์ค์ ๋ฌ๋ฆฌ ๊ทธ ๋๊ตฌ๋ผ๋ release() ์์ฒญ์ ์ํํ ์ ์๋๋ก ์ค๊ณ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฎคํ ์ค๋ lock()์ ๊ฑด ์ฃผ์ฒด๋ง์ด unlock()์ ์ํํ ์ ์์ง๋ง ์ธ๋งํฌ์ด์์๋ ๊ทธ๋ ์ง ์๋ค.
'CS > CS ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Dead Lock(๊ต์ฐฉ ์ํ) (0) | 2023.03.31 |
---|---|
Race Condition (0) | 2023.03.30 |
CPU ์ค์ผ์ค๋ง (0) | 2023.03.25 |
IPC(Interprocess Communication) (0) | 2023.03.19 |
ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB) (1) | 2023.03.18 |