ํจ์คํธ์บ ํผ์ค ์ด์์ฒด์ ๊ฐ์์ ์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์ด์์ฒด์ ๊ต์ฌ์ ๋ํ TIL์ ๋๋ค.
๋ฉํฐ ํ๋ก์ธ์ค๋ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ํ์ ๋ ์์์ ๊ฐ์ง๊ณ ๊ณต๋์ผ๋ก ์์ ํ ์ ์๋๋ฐ ์ด๋, ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ฒฝ์ ์ํ
๊ณต์ ์์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ณต๋์ผ๋ก ์ด์ฉํ๋ ๋ณ์, ๋ฉ๋ชจ๋ฆฌ, ํ์ผ ๋ฑ์ ๋งํ๋ค. ๊ณต์ ์์์ ๊ณต๋์ผ๋ก ์ด์ฉ๋๊ธฐ ๋๋ฌธ์ ๋๊ฐ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๋๋์ ๋ฐ๋ผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๊ณ ์ด๋ฅผ ๋ฐ์ดํฐ ๋ถ์ผ์น(Data Inconsistency)๋ผ๊ณ ํ๋ค. 2๊ฐ ์ด์์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ๋ณํํด์ ์ฝ๊ฑฐ๋ ์ฐ๋ ์ํฉ์ ๊ฒฝ์ ์ํ(Race Condition)๋ผ๊ณ ํ๋ค.
๋ฐ๋ผ์, ๋๊ธฐํ๋ ๊ฒฝ์ ์ํ๋ฅผ ๋ง๊ณ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ(Data Consistency)์ ์ ์งํ๊ธฐ ์ํด์ ํ๋ก์ธ์ค ๊ฐ์ ์คํ ์์๋ฅผ ์ ํด์ฃผ๋ ๋ฉ์ปค๋์ฆ์ด๋ค.
์๊ณ ๊ตฌ์ญ
์๊ณ ๊ตฌ์ญ(Critical Section)์ ์ฝ๋ ์์์ ๊ฒฝ์ ์ํ๊ฐ ์ผ์ด๋ ์ ์๋ ํน์ ๋ถ๋ถ์ ๋งํ๋ค.
์๊ณ ๊ตฌ์ญ๊ณผ ๊ด๋ จ๋ ์ ํต์ ์ธ ๋ฌธ์ ๋ก ์์ฐ์-์๋น์ ๋ฌธ์ (Producer-Consumer Problem)๊ฐ ์๋ค.
์์ฐ์๋ ๋ฌผ๊ฑด์ ๊ณ์ ์์ฐํด์ ๋ฒํผ์ ๋ฃ๊ณ ์๋น์๋ ๋ฒํผ์์ ๊ณ์ ๋ฌผ๊ฑด์ ๊ฐ์ ธ์จ๋ค. ๋ฒํผ๊ฐ ๋น์๋์ง ๊ฐ๋ ์ฐผ๋์ง ํ์ธํ๊ธฐ ์ํด ์ ์ญ ๋ณ์ sum์ ์ฌ์ฉํ๋๋ฐ, sum์๋ ํ์ฌ ๋ฒํผ์ ์๋ ์ํ์ ์ด์๊ฐ ์ ์ฅ๋๋ค.
์ด๋, ์์ฐ์์ ์๋น์๊ฐ ์๋ก sum์ ๊ฐ์ ์ ๊ทผํด์ ๋ฐ๊พธ๋ ค ํ ๋ ์ ๊ทผ ์์์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด ์์์น ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๋ค. ๋ฐ๋ผ์, sum์ ๊ฐ์ ์กฐ์ํ๋ ค๋ ๋ถ๋ถ์ ์๊ณ ๊ตฌ์ญ์ด๋ผ๊ณ ์ง์ ํ ์ ์๋ค.
์๊ณ ๊ตฌ์ญ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
์๊ณ ๊ตฌ์ญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง์ด๋ค. ์ด๋, ์ด๋ค ๋ฐฉ๋ฒ์ด๋ ๋ค์ ์ธ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
์ํธ ๋ฐฐ์ (Mutal Exclusion)
ํ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค/์ค๋ ๋๋ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ์ ์๋ค.
ํ์ ๋๊ธฐ(Bounded Waiting)
์ด๋ค ํ๋ก์ธ์ค/์ค๋ ๋๋ ์๊ณ ์์ญ์ ์ง์ ํ์ง ๋ชปํ์ฌ ๋ฌดํ ๋๊ธฐ ํ์ง ์์์ผ ํ๋ค. (๊ธฐ์ ์ํ ํด๊ฒฐ)
์งํ์ ์ตํต์ฑ(Progress Flexibility)
์๊ณ ๊ตฌ์ญ์์ ์์ ์ค์ธ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์๋ค๋ฉด ์ธ์ ๋ ๋ค์ด์์ ์์ ํ ์ ์์ด์ผ ํ๋ค. ์ฆ, ์๊ณ ๊ตฌ์ญ์ด ๋น์ด์๊ธฐ๋ง ํ๋ค๋ฉด ํ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค/์ค๋ ๋์ ์ํฅ์ ๋ฐ์ง ์๊ณ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด์ ์์ ํ ์ ์์ด์ผ ํ๋ค. (๊ต์ฐฉ ์ํ ํด๊ฒฐ)
์๊ณ ๊ตฌ์ญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋จ์ํ ๋ฐฉ๋ฒ์ ์ ๊ธ(Lock)์ ์ด์ฉํ๋ ๊ฒ์ด๋ค. ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๊ตฌ์ญ ์ง์ ์ง์ ์ ์ ๊ทธ๊ณ ์๊ณ ๊ตฌ์ญ์์์ ์์ ์ด ๋๋๋ฉด ์ ๊ธ ํด์ (Unlock)์ ๋์์ ๋๊ธฐํ ์ ํธ๋ฅผ ๋ณด๋ด ๋ค๋ฅธ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ๋ค์ด์๋ ์ข๋ค๋ ์ฌ์ค์ ์๋ฆผ์ผ๋ก์จ ์๊ณ ๊ตฌ์ญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
ํ์ง๋ง, ์์์ ๋งํ๋ฏ ์ํธ ๋ฐฐ์ , ํ์ ๋๊ธฐ, ์งํ์ ์ตํต์ฑ์ ๋ชจ๋ ๋ง์กฑํ๋ฉด์ ํด๊ฒฐํด์ผ ํ๋ค. ๋ค์์ ๊ฐ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ ๋ฐฉ๋ฒ๋ค์ด๋ค.
์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๋ ๊ฒฝ์ฐ
์์ ์ฝ๋๋ ์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํ ์ ๊ธ์ ์ด์ฉํ ๋ฐฉ๋ฒ์ด๋ค. ๊ฒ๋ณด๊ธฐ์๋ ์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋ฌธ๋งฅ ๊ตํ ๋๋ฌธ์ ์ถฉ์กฑํ์ง ๋ชปํ๊ฒ ๋๋ค. P1์์ ๋จผ์ while(lock==true)
๋ฅผ ํต๊ณผํ๊ณ lock=true
๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋ฌ๋ค๊ณ ์๊ฐํด ๋ณด์. ์ด๋ ๊ฒ ๋๋ฉด ์์ง lock ๋ณ์๊ฐ true๋ก ๋ฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ P2๋ while(lock==true)
๋ฅผ ํต๊ณผํ๊ณ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด์ฌ ์ ์๊ฒ ๋๋ค. ๋ฐ๋ผ์ P1, P2 ๋ชจ๋ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด์์ผ๋ ์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํ๊ฒ ๋๋ค.
ํ์ ๋๊ธฐ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๋ ๊ฒฝ์ฐ
์์ ์ฝ๋๋ lock ๋ณ์๋ฅผ ํ๋ก์ธ์ค ๊ฐ์๋งํผ ์ฌ์ฉํจ์ผ๋ก์จ ์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์๋ค. ํ์ง๋ง, ํจ์จ์ ์ด์ง ์์๋ฟ๋๋ฌ ๋ฌธ๋งฅ ๊ตํ ๋๋ฌธ์ ํ์ ๋๊ธฐ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํ์๋ค.
P1์์ lock1=true
๋ฅผ ์คํํ๊ณ ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋์ P2๋ก ๋์ด๊ฐ๋ค๊ณ ์๊ฐํด ๋ณด์. ์ด๋, P2๋ lock2=true
๋ฅผ ์คํํ๊ณ ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋์ P1์ผ๋ก ๋์ด๊ฐ๋ค๊ณ ๊ฐ์ ํ๋ฉด P1, P2 ๋ ํ๋ก์ธ์ค ๋ชจ๋ ๊ฐ์์ while ์กฐ๊ฑด๋ฌธ์ ๊ฑธ๋ ค ๋ฌดํ ๋ฃจํ์ ๋น ์ ธ์ ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ๋ ํ๋ก์ธ์ค ๋ชจ๋ ๋ฌดํ ๋๊ธฐ๋ฅผ ํ๊ฒ ๋๋ฏ๋ก ํ์ ๋๊ธฐ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ค.
์งํ์ ์ตํต์ฑ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๋ ๊ฒฝ์ฐ
์์ ์ฝ๋๋ ๋ค๋ฅธ ๋ ์ฝ๋์ ๋ฌ๋ฆฌ lock ๋ณ์๋ฅผ boolean์ด ์๋ int ํ์
์ผ๋ก ์ ์ธํด์ P1์ด ์ง์
ํ ์ฐจ๋ก์ด๋ฉด lock=1
, P2๊ฐ ์ง์
ํ ์ฐจ๋ก์ด๋ฉด lock=2
๋ฅผ ํจ์ผ๋ก์จ ์ํธ ๋ฐฐ์ , ํ์ ๋๊ธฐ ์กฐ๊ฑด์ ์ถฉ์กฑํ ๋ฐฉ๋ฒ์ด๋ค.
ํ์ง๋ง, ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ํ ํ๋ก์ธ์ค๊ฐ ์ฐ๋ฌ์ ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ๊ณ ์ถ์ด๋ ๊ทธ๋ด ์ ์๋ค. ์๋ฅผ ๋ค์ด, P1์ lock=2
๋ฅผ ์คํํจ์ผ๋ก์จ ๋ฌด์กฐ๊ฑด ๋ค์ ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ ํ๋ก์ธ์ค๋ P2์์ ์๋ฆฐ๋ค. ์ฆ, P1์ P2์ ์ํฅ์ ๋ฐ์ P1์ด ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ ์ ์๋ ์ํฉ์์๋ ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ์ง ๋ชปํ๊ฒ ๋ ์ ์๋ค. ์ด๋ ์๊ณ ๊ตฌ์ญ์ด ๋น์ด์๊ธฐ๋ง ํ๋ค๋ฉด ์ด๋ค ํ๋ก์ธ์ค/์ค๋ ๋๋ ๋ค์ด์ฌ ์ ์์ด์ผ ํ๋ค๋ ์งํ์ ์ตํต์ฑ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํ๋ค. ์ด๋ ๊ฒ ํ๋ก์ธ์ค์ ์งํ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ธํด ๋ฐฉํด๋ฐ๋ ํ์์ ๊ฒฝ์ง๋ ๋๊ธฐํ๋ผ๊ณ ํ๋ค.
๋ค์์ ์ธ ๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ์ถฉ์กฑํ๊ณ ์๊ณ ๊ตฌ์ญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ๋ค์ด๋ค.
๊ฒ์ฌ์ ์ง์ (test-and-set)
์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ด๋ ํ์ ๋๊ธฐ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํ๋ ์ฝ๋๋ค์ while(lock==true)๊ณผ lock=true๊ฐ ๋ถ๋ฆฌ๋์ด์ ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋ฌ์ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํด์ ๊ฐ ์กฐ๊ฑด๋ค์ ์ถฉ์กฑํ์ง ๋ชปํ๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ, ํ๋์จ์ด์ ๋์์ ๋ฐ์ ๋ ์ฝ๋๋ฅผ ๋์์ ์คํํ ์ ์๊ฒ ํด ์ค ์ ์๋ค. ์์ ๊ทธ๋ฆผ์ฒ๋ผ ๊ฒ์ฌ์ ์ง์ ์ฝ๋๋ฅผ ์ด์ฉํ๋ฉด ๋ช ๋ น์ด ์คํ ์ค๊ฐ์ ํ์์์์ด ๊ฑธ๋ ค ์๊ณ ๊ตฌ์ญ์ ๋ณดํธํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
ํ์ง๋ง, ๋ฐ์ ๋๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ฌํ์ฌ ์์ ๋ญ๋น๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด์ง ๋ชปํ๋ค.
ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ
ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ์ ์์ด๋์ด๋ ๊ฐ๋จํ๋ค. ํ๋ก์ธ์ค๊ฐ ์์ ๋ง์ lock ๋ณ์๋ก ์๊ณ ๊ตฌ์ญ์ ํต๊ณผํ ์ ์๊ฒ ํ๊ณ turn ๋ณ์๋ก ์ด๋ค ํ๋ก์ธ์ค๊ฐ ํ์ฌ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด์๋์ง ์๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ด๋ค.
ํ๋ก์ธ์ค ๊ณ ์ ์ lock ๋ณ์๋ฅผ ๊ฐ์ง์ผ๋ก์จ ์ํธ ๋ฐฐ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์๊ณ , turn์ด๋ผ๋ ๋ณ์๋ก ํ์ ๋๊ธฐ ์กฐ๊ฑด๋ ์ถฉ์กฑํ์๋ค. ํ์ง๋ง, ๊ฒ๋ณด๊ธฐ์๋ turn ๋ณ์๋ก ์๊ณ ๊ตฌ์ญ์ ๋ค์ด์ฌ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์ง์ ํด ์ฃผ๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ ์งํ์ ์ตํต์ฑ ์กฐ๊ฑด์ ๋ง์กฑ์์ผฐ๋๊ฐ์ ๋ํ ์๋ฌธ์ด ๋ค ์ ์๋ค.
while์ ์กฐ๊ฑด๋ฌธ์ ์์ธํ๊ฒ ๋ณด๋ฉด ์๋ฌธ์ด ํ๋ฆฐ๋ค. P1์์ while๋ฌธ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ turn=2
๋ฅผ ํจ์ผ๋ก์จ ๋ค์์๋ P2๊ฐ ๋ค์ด์ฌ ์ฐจ๋ก์ธ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ํ์ง๋ง while์ ์กฐ๊ฑด๋ฌธ์ ๋ณด๊ฒ ๋๋ฉด turn==2
๋ผ๋ ์กฐ๊ฑด์ด lock2==true
๋ผ๋ ์กฐ๊ฑด ๋ค์ ์์นํ๋ค. ์ด๋ lock2 ๋ณ์์ ๊ฐ์ด false๋ผ๋ฉด turn==2
์กฐ๊ฑด์ ๊ฒ์ฌ๋ ํ์ง ์๊ฒ ๋๋ค. ์ฆ, P2์์ lock2=true
๋ฅผ ํ์ง ์๊ธฐ ์ ๊น์ง turn ๋ณ์์ ๊ฐ์ด 2๋ผ๋ ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ, P1์ด ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ ์ ์๋ ์ํฉ์์๋ P2์ ์ํฅ์ ๋ฐ์ ์ง์
ํ์ง ๋ชปํ๊ฒ ๋๋ ํ์์ด ๋ฒ์ด์ง์ง ์๋๋ค. P2์์ lock2=true
๋ฅผ ์คํํด์ผ ๋น๋ก์ P1์ด ์๊ณ ๊ตฌ์ญ์ ์ง์
ํ์ง ๋ชปํ๊ฒ ๋๋ค. ๋ฐ๋ผ์, turn์ ์ด์ฉํ ์กฐ๊ฑด๋ฌธ์ด ๋ค์ ์์นํจ์ผ๋ก์จ ์งํ์ ์ตํต์ฑ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๋์์ ์๊ณ ๊ตฌ์ญ ์ง์
์์๋ฅผ ์ง์ ํ์ฌ ์๊ณ ๊ตฌ์ญ์ P1, P2๊ฐ ๋์์ ๋ค์ด์ค์ง ๋ชปํ๊ฒ ํ์ฌ ํ์ ๋๊ธฐ ์กฐ๊ฑด์ ์ถฉ์กฑํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง, ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ์ 2๊ฐ์ ํ๋ก์ธ์ค๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ ํ๊ณ๊ฐ ์๋ค. ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ํ๋์ ์๊ณ ๊ตฌ์ญ์ ์ฌ์ฉํ๋ ค๋ฉด ๊ณต์ ๋ณ์๋ฅผ ์ถ๊ฐํ๊ณ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋๋ฐ ๊ณต์ ๋ณ์๊ฐ ๋์ด๋ ์๋ก ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ํ๊ณ๊ฐ ์๋ค.
๋ฐ์ปค ์๊ณ ๋ฆฌ์ฆ
๋ฐ์ปค ์๊ณ ๋ฆฌ์ฆ์ ์์ด๋์ด๋ ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ์ ์์ด๋์ด์ ๋น์ทํ๋ค. ์๊ณ ๊ตฌ์ญ์ ์ง์ ํ๊ธฐ ์ํ ํ๋ก์ธ์ค ๊ณ ์ ์ lock ๋ณ์๊ฐ ์กด์ฌํ๊ณ turn ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์ด๋ค ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ์ ์ ๊ทผํด์ผ ํ๋์ง ์ง์ ํ ์ ์๋ค.
ํ์ง๋ง, ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ก์ธ์ค๊ฐ ๋์ด๋๋ฉด ๋ณ์๋ ๋์ด๋๊ณ ์ ์ฒด ์๊ณ ๋ฆฌ์ฆ๋ ๋ณต์กํด์ง๋ ๋จ์ ์ด ์กด์ฌํ๋ค.
์๊ณ ๊ตฌ์ญ ๋ณดํธ๋ฅผ ์ํ ์ํํธ์จ์ด์ ๋๊ตฌ
์๊ณ ๊ตฌ์ญ์ ๋ณดํธํ๊ธฐ ์ํด์ ํ๋์จ์ด์ ๋์์ ๋ฐ๊ฑฐ๋ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ ์์์ ๋ญ๋นํ๊ฑฐ๋ ๋ณต์กํ๋ค๋ ๋จ์ ์ด ์กด์ฌํ๋ค. ๋ฐ๋ผ์, ์ด๋ฅผ ์ํํธ์จ์ด์ ์ผ๋ก ํด๊ฒฐํ๊ณ ์ฌ์ฉ์์ ํธ๋ฆฌ์ฑ์ ์ํ ์ํํธ์จ์ด ๋๊ตฌ๋ค์ด ์กด์ฌํ๋ค.
๋ฎคํ ์ค(Mutex)
์ด ์ฑ ์๋ ๋ฎคํ ์ค์ ๋ํ ์ค๋ช ๋ฟ๋ง ์๋๋ผ ์ธ๊ธ์กฐ์ฐจ ์๋ค. ๋ฎคํ ์ค๋ ์์์ ์ค๋ช ํ์๋ Locking ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํด์ ์ง์ธ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์ํํธ์จ์ด์ ๋๊ตฌ๋ก ์ ๊ณตํ ๊ฒ์ด๋ค. ์์ธํ ์ค๋ช ์ ๋งํฌ๋ฅผ ์ฐธ์กฐํ๊ธธ ๋ฐ๋๋ค.
์ธ๋งํฌ์ด(Semaphore)
์ธ๋งํฌ์ด์ ๋์์ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์๊ณ ๊ตฌ์ญ์ ์ง์ ํ๊ธฐ ์ ์ ์ค์์น๋ฅผ ์ฌ์ฉ ์ค์ผ๋ก ๋๊ณ ์๊ณ ๊ตฌ์ญ์ผ๋ก ๋ค์ด๊ฐ๋ ๊ฒ์ผ๋ก ๋น์ ํด์ ์ค๋ช ํ ์ ์๋ค. ์ด๋, ๋ค๋ฅธ ํ๋ก์ธ์ค/์ค๋ ๋๋ ์์ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์์ ์ ๋ง์น ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋๋ฐ ์์ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์์ ์ ๋ง์น๋ฉด ์ธ๋งํฌ์ด๋ ๋ค์ ํ๋ก์ธ์ค/์ค๋ ๋์ ์๊ณ ๊ตฌ์ญ์ ์ฌ์ฉํ๋ผ๋ ๋๊ธฐํ ์ ํธ๋ฅผ ๋ณด๋ธ๋ค. ๋ฐ๋ผ์ ์ธ๋งํฌ์ด๋ ๋ค๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ค์ฒ๋ผ ์๊ณ ๊ตฌ์ญ์ด ์ ๊ฒผ๋์ง ์ง์ ์ ๊ฒํ๊ฑฐ๋, ๋ฐ์ ๋๊ธฐ๋ฅผ ํ ํ์๊ฐ ์๋ค.
์๋ ๊ทธ๋ฆผ์ ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํด์ ์๊ณ ๊ตฌ์ญ์ ๋ณดํธํ๋ ์ฝ๋์ด๋ค.
์ธ๋งํฌ์ด๋ ์ฌ์ฉ ์ ์ Semaphore(n)์ผ๋ก ์ด๊ธฐํ๋ฅผ ํด์ผ ํ๋๋ฐ, ์ด๋ n์ ๊ณต์ ๊ฐ๋ฅํ ์์์ ์์ด๋ค. ์๋ฅผ ๋ค์ด, ๊ณต์ ์์์ ๊ฐ์๊ฐ 1๊ฐ์ด๋ฉด Semaphore(1), 2๊ฐ์ด๋ฉด Semaphore(2)์ด๋ค.
์ธ๋งํฌ์ด๋ ์ด๊ธฐํ๊ฐ ๋๋ ํ ํ๋ก์ธ์ค๊ฐ ์๊ณ ๊ตฌ์ญ์ ์ง์ ํ๊ธฐ ์ ์ P()๋ก ์ฌ์ฉ ์ค์ด๋ผ๊ณ ํ์ํ๊ณ ์๊ณ ๊ตฌ์ญ์ ๋์ฌ ๋ V()๋ก ๋น์๋ค๊ณ ํ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์๊ณ ๊ตฌ์ญ์ ๋ณดํธํ๋ค.
๋ค์์ ์ธ๋งํฌ์ด์ ๋ด๋ถ ์ฝ๋์ด๋ค.
์ด๊ธฐํ๋ฅผ ํ ๋ ์ ์ญ ๋ณ์ RS๋ฅผ n์ผ๋ก ์ด๊ธฐํํ๋ค. P()๋ ์ ๊ธ์ ์ํํ๋ ์ฝ๋๋ก, RS๊ฐ 0๋ณด๋ค ํฌ๋ฉด 1๋งํผ ๊ฐ์์ํค๊ณ ์๊ณ ๊ตฌ์ญ์ ์ง์ ํ๋ค. ๋ง์ฝ RS๊ฐ 0๋ณด๋ค ์์ผ๋ฉด 0๋ณด๋ค ์ปค์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. block()์ wake_up()์ด ์ ํธ๋ฅผ ๋ณด๋ผ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ํจ์์ด๋ค. V()๋ ์ ๊ธ ํด์ ์ ๋๊ธฐํ๋ฅผ ๊ฐ์ด ์ํํ๋ ์ฝ๋๋ก RS ๊ฐ์ 1 ์ฆ๊ฐ์ํค๊ณ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค/์ค๋ ๋์๊ฒ ์๊ณ ๊ตฌ์ญ์ ์ง์ ํด๋ ์ข๋ค๋ wake_up() ์ ํธ๋ฅผ ๋ณด๋ธ๋ค.
์ธ๋งํฌ์ด์์ ์ ๊ธ์ด ํด์ ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค/์ค๋ ๋๋ ์ธ๋งํฌ์ด ํ์ ์ ์ฅ๋์ด ์๋ค๊ฐ wake_up() ์ ํธ๋ฅผ ๋ฐ์ผ๋ฉด ํ์์ ๋์ ์๊ณ ๊ตฌ์ญ์ ์ง์ ํ๋ค. ์ด๋, ์ธ๋งํฌ์ด์ P()๋ V()์ ๋ด๋ถ ์ฝ๋๊ฐ ์คํ๋๋ ๋์ค์ ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋ ๋ค๋ฅธ ์ฝ๋๊ฐ ์คํ๋๋ฉด ์ํธ ๋ฐฐ์ ์ ํ์ ๋๊ธฐ ์กฐ๊ฑด์ ๋ณด์ฅํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ๋ด๋ถ ์ฝ๋๋ ๊ฒ์ฌ์ ์ง์ ์ ์ฌ์ฉํ์ฌ ์์ ํ ์คํ๋๋๋ก ๊ตฌํ๋๋ค.
๋ค์์ ํ๋ก์ธ์ค๊ฐ 3๊ฐ์ด๊ณ ๊ณต์ ์์์ด 2๊ฐ์ผ ๋ ์ธ๋งํฌ์ด์ ๋ด๋ถ ๋์ ์์์ด๋ค.
ํ์ง๋ง, ์ธ๋งํฌ์ด๋ ์ด๋๊น์ง๋ ์ํํธ์จ์ด์ ๋๊ตฌ์ด๊ธฐ ๋๋ฌธ์ P()๋ฅผ ์จ์ผ ํ๋ ๊ณณ์ V()๋ฅผ ์ด๋ค๋์ง์ ์ฌ์ฉ์์ ์๋ชป๋ ์ฌ์ฉ์ผ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์, ์๋์ผ๋ก P()์ V()๊ฐ ์ฒ๋ฆฌ๋ ์ ์๊ฒ ๋ง๋ค๋ฉด ๋๋๋ฐ ์ด๋ฅผ ์ค์ ๋ก ๊ตฌํํ ๊ฒ์ด ๋ชจ๋ํฐ์ด๋ค.
๋ชจ๋ํฐ
๋ชจ๋ํฐ๋ ์ด์์ฒด์ ์ ์์คํ ํธ์ถ๊ณผ ๊ฐ์ด ๊ณต์ ์์์ ๋ด๋ถ์ ์ผ๋ก ์จ๊ธฐ๊ณ ๊ณต์ ์์์ ์ ๊ทผํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ง ์ ๊ณตํจ์ผ๋ก์จ ์์์ ๋ณดํธํ๊ณ ํ๋ก์ธ์ค ๊ฐ์ ๋๊ธฐํ์ํจ๋ค.
๋ชจ๋ํฐ๋์ ์๋ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค. ์๊ณ ๊ตฌ์ญ์ผ๋ก ์ง์ ๋ ๋ณ์๋ ์์์ ์ ๊ทผํ๊ณ ์ ํ๋ ํ๋ก์ธ์ค๋ ์ง์ P()๋ V()๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ชจ๋ํฐ์ ์์ ์์ฒญ์ ํ๋ค. ๋ชจ๋ํฐ๋ ์์ฒญ๋ฐ์ ์์ ์ ๋ชจ๋ํฐ ํ์ ์ ์ฅํ ํ ์์๋๋ก ์ฒ๋ฆฌํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ง ํด๋น ํ๋ก์ธ์ค์ ์๋ ค์ค๋ค.
'CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (0) | 2023.05.02 |
---|---|
[์ด์์ฒด์ ] ๊ต์ฐฉ ์ํ(Deadlock) (1) | 2023.04.23 |
[์ด์์ฒด์ ] IPC (1) | 2023.04.23 |
[์ด์์ฒด์ ] CPU ์ค์ผ์ค๋ง (0) | 2023.04.23 |
[์ด์์ฒด์ ] ์ค๋ ๋ (0) | 2023.04.14 |
๋๊ธ