์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ด ๋์์ ๋ฐ์ดํฐ ์ ๊ทผํ๋ ์ํฉ
๊ณต์ ๋ฐ์ดํฐ์ ๋์ ์ ๊ทผ์ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
๋ฐ๋ผ์ ์ด๋ค ์์๋ก ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ง ์ ํด์ผ ํ๋ค.
์ด๋ฐ ํ๋ก์ธ์ค ๊ฐ ์คํ์์๋ฅผ ์ ํ๋ ๋ฐฉ์์ ๋๊ธฐํ(Synchornization
) ์ด๋ผ๊ณ ํ๋ค.
๊ฐ ํ๋ก์ธ์ค๋ ๋ฐ์ดํฐ ๊ณต๊ฐ์ด ๋ ๋ฆฝ์ ์ด๋ค. ๊ทธ๋์ ๋ณดํต ๊ฒฝ์์ํ๋ ์ค๋ ๋ ๋จ์์์ ๋ฐ์ํ๋ค.
๊ทธ๋ผ์๋ ํ๋ก์ธ์ค์์ ๊ฒฝ์์ํ๊ฐ ๋ฐ์ํ ๋๋, ์์คํ ์ฝ์ ์ํํ๋ฉฐ ๊ฐ์ ์ปค๋ ์ฃผ์ ๊ณต๊ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋์ด๋ค.
- ์ปค๋๋ชจ๋ ์ํ ์ค ์ธํฐ๋ฝํธ
- ํ๋ก์ธ์ค๊ฐ ์์คํ ์ฝ์ ํธ์ถํด ์ปค๋๋ชจ๋ ์ํ ์ค์ธ๋ฐ ์ปจํ ์คํธ ์ค์์นญ ๋ฐ์
- ๋ฉํฐ ํ๋ก์ธ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ด ์ปค๋ ๋ฐ์ดํฐ์ ์ ๊ทผ
์์ ๊ฒฝ์์ํ๊ฐ ๋ฐ์ํ๋ ๊ตฌ์ญ์ ์๊ณ๊ตฌ์ญ์ด๋ผ๊ณ ํ๋ค.
์์ ์๊ณ๊ตฌ์ญ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
- ์ํธ ๋ฐฐ์ (
Mutual Exclusion
) : ํ๋ฒ์ ํ๋์ ์์ ๋จ์(ํ๋ก์ธ์ค) ๋ง์ด ์์์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค. - ์งํ(
Progress
) : ์๊ณ๊ตฌ์ญ์ ์ ๊ทผ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด, ์ ๊ทผ์ ์ํ๋ ํ๋ก์ธ์ค๊ฐ ์ง์ ๊ฐ๋ฅํด์ผ ํ๋ค. - ํ์ ๋๊ธฐ(
Bounded Waiting
) : ๋๊ธฐ์ค์ธ ํ๋ก์ธ์ค๋ ๋ฌดํ์ ๋๊ธฐํด์๋ ์๋๋ค. ์ผ์ ์๊ฐ๋์๋ง ์๊ณ์์ญ ์ง์ ์ ์ํด ๋๊ธฐํด์ผ ํ๋ค.
ํ์ฌ Critical Section
์ ๋ค์ด๊ฐ ํ๋ก์ธ์ค๊ฐ ์ด๋ค ํ๋ก์ธ์ค์ธ์ง๋ฅผ turn ๋ณ์๋ก ๋ํ๋ด์ด
์ผ์นํ๋ ํ๋ก์ธ์ค๋ง ์ง์ ํ๋ค.
์ฆ, ๋ค์ด๊ฐ๋ ํ๋ก์ธ์ค๋ค์ด ๋ค์ด๊ฐ ์ ์๋ ๋น๋๊ฐ ์์๊ฐ ์๊ณ ๋์ผํ๋ค!
(A ๊ธฐํโB ๊ธฐํโA ๊ธฐํโB ๊ธฐํ)
๋ฌธ์ : progress
๋ง์กฑํ์ง ๋ชปํ๋ค. B ํ๋ก์ธ์ค๊ฐ ๋ ๋ง์ด ์์์ ์ ๊ทผํ๊ณ ์ถ์ด๋ ๋ฐฉ๋ฒ์ด ์๋ค.
ํ๋ก์ธ์ค๋ค์ flag ๋ณ์๋ฅผ ํตํด ์์ ์ด ์๊ณ๊ตฌ์ญ์ ๋ค์ด๊ฐ๊ณ ์ถ๋ค๊ณ ์์ฌ๋ฅผ ํ์ํ๋ค.
๋ฌธ์ : ์ญ์ Progress
๋ง์กฑ ๋ชปํ๋ค.
๋ ํ๋ก์ธ์ค๊ฐ flag = true
๊น์ง๋ง ์ํํ๊ณ ๋๋ฉด,
๋ ํ๋ก์ธ์ค ๋ชจ๋ ๋ฌดํํ Critical Section
์ ์ง์
ํ์ง ๋ชปํ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
์ฆ, ํ๋ก์ธ์ค๋ค์ด ์๋ก ๋์์์ด ์๋ณดํ๊ฒ ๋๋ค!
์ ๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํฉ!
- ๊น๋ฐ๋ก ์์ฌ ํ์ + ์์ ํ์ธ
- ์๋๋ฐฉ์ด ๋ ์ค ํ๋๋ผ๋ ๋ง์กฑํ์ง ๋ชปํ๋ค๋ฉด, ๋ด ํ๋ก์ธ์ค๊ฐ ์๊ณ๊ตฌ์ญ์ ๋ค์ด๊ฐ๊ฒ ๋ค!
โ ์๊ณ๊ตฌ์ญ ๋ฌธ์ ํด๊ฒฐ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ค!
ํ์ง๋ง ์คํ๋ฝ์ busy waiting
๋ฌธ์ ๊ฐ ์๋คโฆ
๋๊ธฐ์ค์ธ ํ๋ก์ธ์ค๋ ์ง์ ๊ฐ๋ฅํ ๋๊น์ง ๋ฃจํ๋ฅผ ๋๋ฉด์ ์๊ณ๊ตฌ์ญ ์ ๊ทผ์ ์ฌ์๋!
๋๊ธฐ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๊ณ์ ์์ ์ด ํ๋ก์ธ์ค์ ์ ๊ทผ ๊ฐ๋ฅํ์ง ํ์ธํด์ผ ํจ.
๋ฐ๋ผ์, CPU, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์๊ธด๋ค!
์ด๋ฅผ Busy Waiting
์ด๋ผ๊ณ ํ๋ค.
๋ค๋ง, ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ๋ณด๋ค ๊ธฐ๋ค๋ฆฌ๋ ๋น์ฉ์ด ๋ ํจ์จ์ ์ผ ๋,
์ฆ ์๊ณ์์ญ ๋๊ธฐ์๊ฐ์ด ๋งค์ฐ ์งง์ ์์ ์คํ๋ฝ์ด ๋ ์ ์ฉํ๋ค.
๋ณดํต ๋ฉํฐ ํ๋ก์ธ์ ์์คํ ์์ ์์ฃผ ์ฌ์ฉ๋๋ค.
ํ๋์จ์ด์ ์ผ๋ก ์๊ณ๊ตฌ์ญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ!
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ์ ๋๋ง๋ค ๋ฝ์ ๊ฑธ์ด์ฃผ๊ณ , ์ฝ์ ๊ฐ์ ํด๋น ์ฝ์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ(์ฌํ ๋น)ํ๋ค!
ํ ํ๋ก์ธ์ค๊ฐ ์๊ณ์์ญ์ ์ง์ ํด ์์ ์ค์ผ ์, ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ์๊ณ์์ญ์ ๋ชป ๋ค์ด๊ฐ๋ค!
์ฆ, ํ๋์ ์์ ๋จ์๋ง ์๊ณ์์ญ ์ง์ ์ด ๊ฐ๋ฅํ๋ค!
๋ฌธ์ : ์์ ์๊ณ ๋ฆฌ์ฆ 3๊ณผ ๊ฐ์ ๋ฐฉ์์ด๋ฏ๋ก, ์คํ๋ฝ์ busy waiting
๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ฎคํ
์ค์ ๋ฌ๋ฆฌ busy waiting
๋ฐฉ์์ ์ฐ์ง ์๋๋ค.
์ฌ๋ฌ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์๊ณ์์ญ ์ง์ ์ด ๊ฐ๋ฅํ๋ค!
busy waiting
: ๊ณ์ ์ด์ฉ ๊ฐ๋ฅํ์ง ๋ฌผ์ด๋ณธ๋คblock & wakeup
: ์ผ๋จ ์ ๋ค์๋ค๊ฐ, ์์์ด ๋ฐ๋ฉ๋ ๋ ๊นจ์๋นํ๋ค. ๋ณดํต ๋ ์ข๋ค.
- ์นด์ดํฐ๋ฅผ ํตํด ๋์ ์ ๊ทผ๊ฐ๋ฅํ ํ๋ก์ธ์ค ์(์์ ๊ฐ์)๋ฅผ ์ ํํ๋ค.
- ์ ๊ทผํ ํ๋ก์ธ์ค๋ค ์ค ํ๋๊ฐ ์๊ณ์์ญ ๋ณ์๋ฅผ ์์ ํ ๋, ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ๋ณ์ ์์ ๋ถ๊ฐ๋ฅํ๋ค.
- ๊ฐ ์ ๊ทผํ ํ๋ก์ธ์ค๋ค์ ์์ ํ๋ ์ฐ์ฐ(P ์ฐ์ฐ), ์์ ๋ฐ๋ฉ ์ฐ์ฐ(V ์ฐ์ฐ) ์ค ํ๋๋ฅผ ์ํํ๊ฒ ๋๋ค.
Binary Semaphore
: 0,1๊ฐ๋ง ๊ฐ์ง ์ ์๋ ์ธ๋งํฌ์ด. ์ฆ, ๋ฎคํ ์ค!Counting Semaphore
: ๋ฎคํ ์ค๊ฐ ์๋ ์ธ๋งํฌ์ด. ์ฆ, ์นด์ดํฐ ๊ฐ์๊ฐ 2 ์ด์์ธ ์ธ๋งํฌ์ด.
[์ด์์ฒด์ (OS)] 6. ํ๋ก์ธ์ค ๋๊ธฐํ(Process Synchronization)