Process Synchronization (ํ๋ก์ธ์ค ๋๊ธฐํ)
์ฌ๋ฌ ํ๋ก์ธ์ค๋ค ๋๋ ์ค๋ ๋๋ค์ด ๋์์ ๋์ํ ๋, ๊ทธ๋ค์ด ๊ณต์ ํ๋ ๋ฐ์ดํฐ์ ๋ํด์ ์์ ํ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ
ํ๋ก์ธ์ค ๋๊ธฐํ๊ฐ ์ ํ์ํ ๊น?
๋ง์ฝ ๊ณต์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ด ๊ทธ ๋ฐ์ดํฐ์ ๋ํด ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋ฉด ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง, ๋์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ฌ ๊ฐ์ ๋ฐ๊พธ๋ ค๊ณ ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
Race Condition
์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํด์ ๊ฐ์ ๋ฐ๊พธ๋ ค๊ณ ํ๋ ์ํฉ
=> ์ ์์ ์ธ ์ฐ์ ์ ๊ฒฐ๊ณผ๊ฐ ์๋ ์ ์ผ ๋ง์ง๋ง์ ์ด ๊ฐ์ผ๋ก ๊ฐ์ด ๊ฒฐ์ ๋์ด ๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
=> ์๋์น ์๊ฒ ์ต์ข ์ ์ธ ๋ฐ์ดํฐ์ ๊ฐ์ด ์๋ชป๋ ๊ฐ์ผ๋ก ๊ฒฐ์
Q. ๊ทธ๋ ๋ค๋ฉด ํ๋์ ํ๋ก์ธ์ค๋ Write๋ฅผ ํ๋ ค๊ณ ํ๊ณ , ๋ค๋ฅธ ํ๋๋ Read๋ง ํ๋ค๋ฉด ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊น?
OS์ ๊ด์ ์์ ๋ต์ "์๋๋ค". ํ๋์ ํ๋ก์ธ์ค๋ง Write๋ฅผ ํ๋ ๊ฒฝ์ฐ์๋ ์๋ชป๋ ๊ฐ์ด ์ฐ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ OS์๋ Readํ ๋๋ ํญ์ ์ต์ ๊ฐ์ Readํ๋ค ๋ผ๋ ์์น์ด ์๋๋ฐ, Readํ์ ๊ฐ์ด ๋ฐ๋๋ค๊ณ ํด๋ Read ํ ๋น์์๋ ํด๋น ๊ฐ์ด ์ต์ ๊ฐ์ด์์ผ๋๊น ๋ฌธ์ ๊ฐ ์๋ค.
๊ทธ๋ฐ๋ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๋งค์ฐ ์ปค์, Writeํ๋๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ, ์ ์ฒด ์ค ์ผ๋ถ ๋นํธ์๋ง ๊ฐ์ ์ด ์์ค์ Read๋ฅผ ํ๋ค๋ฉด ๊นจ์ง ๊ฐ์ ์ฝ๊ฒ ๋๋ค. ์ด๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์.
=> ๊ฒฐ๊ตญ, Writeํ๊ณ ์์ ๋๋ Read๋ฅผ ํ์ง ์๋ ๊ฒ ๋ง์.
ํ๋ก์ธ์ค๋ค์ด ์๋ก๊ฐ ์๋ก์ ์ํฉ์ ์๊ณ ๊ทธ์ ๋ง๊ฒ ์ ํ๋จํด์ ์ ์ ํ๊ฒ ์์ง์ผ ๋ ๋๊ธฐํ๋์ด ์์ง์ธ๋ค๊ณ ํ๋ค.
=> ๋๊ธฐํ๋ ์๋ก๊ฐ ์ฐ๊ด์ด ์์ ๋๋ง ํ์ํ๋ค. ์ฆ, Race Condition์ด ๋ฐ์ํ๋ ์ฌ์ด์๋ง ํ์ํ๋ค.
Race Condition์ ์ํด ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ํฉ์ ๋ณด์
X์ ๊ฐ์ 1 ์ฆ๊ฐ์ํค๋ Operation๊ณผ 1 ๊ฐ์์ํค๋ Operation์ ๋์์ ์ํํ๋๋ฐ, ์ต์ข ์ ์ธ ๊ฒฐ๊ณผ๋ ๊ธฐ์กด X์ ๊ฐ์ธ 2์์ 1์ ๊ฐ์์ํจ 1์ด ์ ์ฅ๋์๋ค. ๊ทธ๋ฌ๋ ์ฐ์ ์ ์ผ๋ก ์ ์์ ์ธ ๊ฐ์ 2๊ฐ ์ ์ฅ๋์ด์ผ ํ๋ค.
๊ฐ์ ๋ฐ์ดํฐ์ ๋ํ ๋ Operation์ด ๋์์ ์ํ๋๋ฉด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ ์, ๋จผ์ ๋ฌธ์ ๋ฅผ ์ ํํ ํด์ผ ํ๋ค.
Critical Section Problem
n๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ํ๋ ๋ฐ์ดํฐ์ ๋ํด ๊ฒฝ์์ ์ผ๋ก ์ ๊ทผํ๋ ์ํฉ์ด ์์ ๋, ๊ฐ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์ฝ๋๊ฐ ์์ ๊ฒ์ด๋ค. ๊ทธ ์ฝ๋ ๋ถ๋ถ์ ๊ทธ ํ๋ก์ธ์ค์ critical section์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฆ, ๊ฐ ํ๋ก์ธ์ค๋ critical section์ ์ํํ ๋ ๊ณต์ ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํด์ ๊ฐ์ ๋ฐ๊ฟ ๊ฒ์ด๋ค.
์ด๋ค ํ๋ก์ธ์ค๊ฐ ์์ ์ critical section์ ์ํ ์ค์ด๋ฉด ๋ค๋ฅธ ์ด๋ค ํ๋ก์ธ์ค๋ ์์ ์ critical section์ ์ํํ์ง ๋ชปํ๋๋ก ๋ง๋ ๊ฒ์ด Problem์ด๋ค.
=> ์ฆ, 2๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์์ ์ critical section์ ์ํํ๋ ์ผ์ด ์์ด์๋ ์ ๋๋ค.
=> Solution์ ์ด๊ฒ์ ๋ง๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๊ฒ
Requirements for the Solution
Critical Section Problem์ ํด๊ฒฐ์ฑ ์ผ๋ก ์ ์๋ Solution์ด ๊ฐ์ถฐ์ผ ํ ์กฐ๊ฑด๋ค์ด๋ค.
Mutual Exclusion
: ์ํธ ๋ฐฐํ์ ์ผ๋ก critical section์ ์ํํ๋๋ก ํ๋ ๊ฒ.
ํ ํ๋ก์ธ์ค๊ฐ critical section์ ์ํ ์ค์ด๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์์ ์ critical section์ ์ํํ์ง ๋ชปํ๋๋ก ํ ์ ์์ด์ผ ํ๋ค.
๊ทธ๋ฅ ๋จ์ํ ๋ชป ๋ค์ด๊ฐ๊ฒ ๋ง๋ ๊ฒ์ ์ฝ๋ค. ๊ทธ๋ฐ๋ฐ ๋๋ฌด ๊ณผ๋ํ๊ฒ ๋ง์ผ๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
๋ค์ด๊ฐ์ง ๋ชปํ๊ฒ ๋ง๋, ๋ค์ด๊ฐ๋ ๋๋ ์ํฉ์๋ ๋ค์ด๊ฐ ์ ์๊ฒ ํด์ผ throughput์ ์ ์งํ ์ ์๋ค.
์ฌ๋ฐ๋ฅธ ํด๊ฒฐ์ฑ
์ ๋ง๊ธฐ๋ ํ์ง๋ง ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๊ฒ์ ํ์ฉํ์ง ๋ง์์ผ ํ๋ค.
=> ์ด๊ฑธ ์ํด์ Progress์ Bounded Waiting์ด ํ์
Progress
ํ์ฌ critical section์ ์ํํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ํ๋๋ ์๋ค๋ฉด, ๋๊ตฐ๊ฐ๋ ๋ค์ด๊ฐ๋ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ์ํฉ์์ ๋๊ตฐ๊ฐ๊ฐ critical section์ผ๋ก ๋ค์ด๊ฐ๊ณ ์ ํ๋ฉด ๊ทธ ๋์ ๋ฐ๋์ ๋ค์ด๊ฐ ์ ์์ด์ผ ํ๋ค.
๋๋ฌด ๊ณผ๋ํ๊ฒ ๋ง์์, ์๋ฌด๋ critical section์ ์ํํ์ง ์๊ณ ์๋๋ฐ๋ critical section์ ๋ค์ด๊ฐ์ง ๋ชปํ๋ ์ํฉ์ ๋ฐ์ํ์ง ์์์ผ ํ๋ค.
Bounded Waiting
์ด๋ฏธ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ critical section์ ๋ค์ด๊ฐ ์๋ค๋ฉด ๊ธฐ๋ค๋ ค์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํ๋ก์ธ์ค๊ฐ critical section ์ํ์ ๋ง์น๋ฉด ๋ด๊ฐ ๋ค์ด๊ฐ์ผ ํ๋๋ฐ, ๋ง์ฝ ๊ทธ ์ฌ์ด์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ๋ค์ด๊ฐ ๋ฒ๋ฆฌ๋ฉด ๋ ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
์ด๋ฐ ์์ผ๋ก ํ์ ์์ด ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ํฉ์ ๋ง์์ผ ํ๋ค.
์ฆ, ์ด๋ค ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ๊ณ ์ ํ ๋ ์ธ์ ๊ฐ๋ ๋ค์ด๊ฐ ์ ์๋๋ก ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ Bound๊ฐ ์ ๊ณต๋์ด์ผ ํ๋ค.
=> ์ง๋ ์๊ฐ์ ๋ฐฐ์ด Starvation๊ณผ ๋น์ทํ ๋๋.
์ด์ Mutual Exclusion, Progress, Bounded Waiting์ ๋ง์กฑ์ํค๋ Solution์ด ๋ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด๋ณด์.
์๊ฐํ๊ธฐ ์ฝ๋๋ก ๋จ 2๊ฐ์ ํ๋ก์ธ์ค๋ง ์๋ค๊ณ ๊ฐ์ ํ๋ค.
critical section์ ๋ฌด์์ ๋ค์ด๊ฐ ๋ฒ๋ฆฌ๋ฉด ์ ๋๋ค. ๋๊ตฐ๊ฐ critical section์ ์ํ ์ค์ธ์ง ํ์ธ์ ํ๊ณ ๋ค์ด๊ฐ์ผ ํ๋ค.
๊ทธ ํ์ธ์ ํ๋ ๋ถ๋ถ์ด entry section.
๊ทธ๋ฆฌ๊ณ ๋ค์ด๊ฐ ์ ์๋ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ด ๋ค์ด๊ฐ๋ค๊ณ ์น์. ๊ทธ ์ผ์ ๋ค ๋๋๊ณ ๋น ์ ธ๋์ฌ ๋, ๊ทธ๋ฅ ๋น ์ ธ๋์ค๋ฉด ์ ๋๋ค. ๋ด๊ฐ ๋ค์ด์์ด์ ๋ชป ๋ค์ด์ค๊ณ ์๋ ์ ๋ค์ด ์์ ์ ์๊ธฐ ๋๋ฌธ
๊ทธ๋์ ๋ด๊ฐ ๋น ์ ธ ๋์์ผ๋๊น ์ด์ ๋ค์ด๊ฐ๋ ๋ผ ๋ผ๊ณ ์๋ ค์ฃผ๋ ๋ถ๋ถ์ด exit section.
๊ทธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก critical section problem์ ํด๊ฒฐํ๋ Solution๋ค์ critical section ์๋ค๋ก entry section๊ณผ exit section์ ๋ฐ๋์ ๊ฐ์ ธ์ผ ํ๋ค.
์ด entry section๊ณผ exit section์ ์ด๋ค ๋ด์ฉ์ด ๋ค์ด๊ฐ์ง๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
์ฒซ ๋ฒ์งธ ์๊ณ ๋ฆฌ์ฆ์ ๋ณด์. turn์ด๋ผ๋ ๊ณต์ ๋ณ์๊ฐ ์๊ณ , turn == i ์ผ ๋ i ๋ฒ ํ๋ก์ธ์ค๊ฐ critical section์ ๋ค์ด๊ฐ ์ ์๋ค.
while๋ฌธ์ ํตํด ์์ ์ turn์ด ์๋๋ฉด ๊ณ์ ๋ฃจํ๋ฅผ ๋๋ฉฐ ๊ธฐ๋ค๋ฆฐ๋ค.
turn์ ์ด๊ธฐ๊ฐ์ 0์ด๊ธฐ ๋๋ฌธ์ ์ฒ์์ 0๋ฒ ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ critical section์ ๋ง์น ํ ๋น ์ ธ๋์ค๋ฉด์ turn์ 1๋ก ๋ฐ๊พผ๋ค.
๊ทธ๋ฌ๋ฉด ๋ค์ ๋์๊ฐ์ ๋๋ turn์ด 1์ด๊ธฐ ๋๋ฌธ์ 0๋ฒ ํ๋ก์ธ์ค๋ while๋ฌธ์ ๊ฑธ๋ ค์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค.
์ฌ์ง์ ๋์์์ง ์์ง๋ง, Process 1์ ์ฝ๋๋ while(turn != 1) ๋ก ์์ ์ ํด์ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ critical section์ ๋๋ด๊ณ ๋น ์ ธ๋์ฌ ๋ turn์ 0์ผ๋ก ๋ฐ๊ฟ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ P0์ P1์ ์๋ก ํ ๋ฒ์ฉ ๋ฒ๊ฐ์๊ฐ๋ฉด์ critical section์ ๋ค์ด๊ฐ ์ ์๋ค. ํ ๋ฒ์ฉ ๋์๊ฐ๋ฉด์ ๋ค์ด๊ฐ๋ค๊ณ ํด์ Swap-turn์ด๋ผ๊ณ ํ๋ค.
์ต๋ ํ๋์ ํ๋ก์ธ์ค๋ง critical section์ ๋ค์ด๊ฐ ์ ์์ผ๋ฏ๋ก Mutual exclusion์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง๋ง Progress๋ ๋ง์กฑํ์ง ๋ชปํ๋ค.
์?
๋ง์ฝ, 0๋ฒ ํ๋ก์ธ์ค๊ฐ critical section์ ์ํํ๊ณ turn์ 1๋ก ๋ฐ๊พผ ํ ๋น ์ ธ๋์๋ค๊ณ ํ์. ๊ทธ๋ผ 0๋ฒ ํ๋ก์ธ์ค๋ 1๋ฒ ํ๋ก์ธ์ค๊ฐ turn์ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ ์ ๊น์ง๋ ๊ณ์ while๋ฌธ์ ๋๋ฉด์ ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๋ง์ฝ P1์ critical section๊ณผ ์ ํ ๊ด๋ จ ์๋ ๋ถ๋ถ์ ์ํํ๊ณ ์์ด์ critical section์ ๋ค์ด๊ฐ๋ ์๋์กฐ์ฐจ ํ์ง ์๊ณ ์๋ค๋ฉด? ํ์ฌ ์๋ฌด๋ critical section์ ๋ค์ด๊ฐ์ง ์์์ผ๋ฏ๋ก P0๋ ๋ค์ด๊ฐ ์ ์์ด์ผ ํ๋๋ฐ ๋ค์ด๊ฐ์ง ๋ชป ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
Algorithm 1์ ๋ฌธ์ ๋ ์๋๋ฐฉ์ด critical section์ ๋ค์ด๊ฐ๊ณ ์ ํ๋ ์์ง๊ฐ ์๋๋ฐ๋ ๋ค์ด๊ฐ์ง ๋ชปํ๊ณ ๊ธฐ๋ค๋ ค์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ด์๋ค.
=> ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์๋๋ฐฉ์ด critical section์ ๋ค์ด๊ฐ๋ ค๋ ์์ง๊ฐ ์๋์ง ํ์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ๋์ ๋ ๋ฒ์งธ ์๊ณ ๋ฆฌ์ฆ์์๋ ์๋๋ฐฉ์ ์์ง๋ฅผ ํ์ ํ๊ธฐ ์ํด flag๋ผ๋ ๊ณต์ ๋ณ์๋ฅผ ๋ง๋ค์๋ค.
flag[i] == true๋ผ๋ ๊ฒ์ i๋ฒ ํ๋ก์ธ์ค๊ฐ critical section์ ๋ค์ด๊ฐ๋ ค๋ ์์ง๊ฐ ์๋ค๋ ๋ป์ด๋ค.
๋ค์ด๊ฐ๊ธฐ ์ ์ ๋์ flag๋ฅผ true๋ก ๋ฐ๊พธ๊ณ ์๋๋ฐฉ์ flag๋ฅผ ํ์ธํ๋ค.
์๋๋ฐฉ์ flag๊ฐ false๊ฐ ๋๋ฉด while๋ฌธ์ ๋น ์ ธ๋์์ critical section์ผ๋ก ์ง์
ํ๋ ๊ตฌ์กฐ
=> ์ด๋ ๊ฒ ํ๋ฉด Swap-turn ํ์์ด ๋ฐ์ํ์ง ์๋๋ค.
์๋๋ฐฉ์ด ๋ค์ด๊ฐ ์์ง๊ฐ ์์ผ๋ฉด, ์ฐ์ํด์ ๊ณ์ ๋ค์ด๊ฐ ์ ์์ผ๋ฏ๋ก Algorithm 1์์์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ์๋๊ฐ ๋ค์ด๊ฐ๊ณ ์ ํ๋ฉด ๋๋ while๋ฌธ์ ๋๋ฉด์ ๊ธฐ๋ค๋ฆฌ๋๊น Mutual exclusion๋ ๋ง์กฑํ๋ค.
๊ทธ๋ฌ๋ ์ฌ์ ํ Progress ์กฐ๊ฑด์ ๋ง์กฑ์ํค์ง ๋ชปํ๋ค.
์?
Pi์ Pj ๋ ๋ค ๋ค์ด๊ฐ๊ฒ ๋ค๊ณ flag๋ฅผ true๋ก ๋ฐ๊พธ๋ฉด ๋์ด ๋์์ while๋ฌธ์ ๋๊ฒ ๋๋ค.
=> critical section์ ์๋ฌด๋ ์ ๋ค์ด๊ฐ๋๋ฐ, ์๋ก ์๋ณดํ๋๋ผ ์๋ฌด๋ ๋ค์ด๊ฐ์ง ์๊ฒ ๋๋ค.
=> ๋ฐ๋ผ์ Algorithm 2๋ Solution์ด ๋์ง ๋ชปํ๋ค.
Algorithm 2๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋ค์ด๊ฐ๊ณ ์ ํ ๋, ๋๊ฐ ๋ค์ด๊ฐ! ๋ผ๊ณ ํต์ ํด์ฃผ๋ ์ ๊ฐ ์๋ ๊ฒ์ด ๋ฌธ์ .
๊ทธ๋ฐ๋ฐ ์ด๋ฐ ์ญํ ์ ํ๋ ์ ๊ฐ Algorithm 1์ ์์๋ค. ๋ฐ๋ก turn์ด๋ค. turn์ด ๋ช ํํ๊ฒ ์ด๋ฒ์ ๋ค์ด๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ง์ ํ๋ ์ญํ ์ ํ๋ค.
๊ทธ๋์ 1๋ฒ๊ณผ 2๋ฒ Algorithm์ ์์ ๊ฒ์ด Peterson's Algorithm์ด๋ผ ๋ถ๋ฆฌ๋ ์ธ ๋ฒ์งธ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
flag[i] = true๋ก ๋ณ๊ฒฝํด์ ๋ค์ด๊ฐ๊ฒ ๋ค๋ ์์ง๋ฅผ ๋ฐํ๋ค. ๊ทธ๋ฆฌ๊ณ turn = j๋ก ์ค์ ํด์ ์๋์๊ฒ ํด์ ๋จผ์ ์๋ณดํ๋ค.
while(flag[j] and turn == j)๋ฅผ ํตํด ํด์ ์ด๋ฏธ ์๋๋ก ๋ฐ์ด์คฌ์ผ๋, ์๋๊ฐ ๋ค์ด๊ฐ ์์ง๊ฐ ์๋ค๋ฉด ๋ฃจํ๋ฅผ ๋๋ฉฐ ๊ธฐ๋ค๋ฆฐ๋ค.
๋ ํ๋ก์ธ์ค๊ฐ ๋์์ turn์ ์๋ก์๊ฒ ๋ฐ์ด์ค ์๋ ์์ง๋ง, ์๋ฌดํผ ์ต์ข ์ ์ผ๋ก๋ ํ ํ๋ก์ธ์ค๊ฐ turn์ ๊ฐ์งํ ๋ ์๋ก ์๋ณดํ๋๋ผ ๋ ๋ค critical section์ ๋ค์ด๊ฐ์ง ๋ชปํ๊ณ ๋ฃจํ๋ฅผ ๋๋ ์ํฉ์ ๋ฐ์ํ์ง ์๋๋ค.
=> ์ฌ๊ธฐ์ turn์ ๋ฐ์ด์คฌ์ง๋ง ์๋๊ฐ ์์ง๊ฐ ์์ผ๋ฉด flag[j] == false ์ผํ ๋ while ๋ฃจํ๋ฅผ ํ์ถํ๊ฒ ๋๋ฏ๋ก Swap-turn์ด ๋ฐ์ํ์ง ์๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋๋ฐฉ์ด critical section์ ๋๋ด๊ณ ์์ ์ flag๋ฅผ false๋ก ๋ฐ๊พธ๋ ์๊ฐ while๋ฌธ์ ํ์ถํ๊ฒ ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด Mutual Exclusion๋ ์งํค๊ณ , Progress๋ ๋ง์กฑํ๊ฒ ๋๋ฏ๋ก Solution์ด ๋๋ค.
๊ทธ๋ฌ๋ CPU๋ฅผ ์ฐ๋ฉด์ while loop๋ฅผ ๋๊ฒ ๋๋ค๋ ๋จ์ ์ด ์๋ค.
=> ์์คํ ์์ ๋ฌด์๋ฏธํ๊ฒ CPU๋ฅผ ์ฐ๋ ๊ฒ์ ์ข์ง ์๋ค๊ณ ํ๋ค.
ํผํฐ์จ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ ์ธ์๋ Lock์ ์ฌ์ฉํด์ critical section problem์ ํด๊ฒฐํ ์๋ ์๋ค.
critical section์ ๋ค์ด๊ฐ๊ธฐ ์ ํ๋ก์ธ์ค๋ lock์ ์ก์ผ๋ ค๋ ์๋๋ฅผ ํ๋ค. lock์ ์ก์ผ๋ฉด critical section์ ๋ค์ด๊ฐ๊ฒ ๋๊ณ lock์ ์ก์ง ๋ชปํ๋ฉด ๋ค์ด๊ฐ์ง ๋ชปํ๊ณ ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ critical section์ ๋ค์ด๊ฐ ํ๋ก์ธ์ค๋ ๋น ์ ธ๋์ฌ ๋ lock์ ๋ฐ๋ฉํด์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ lock์ ์ก์์ ๋ค์ด์ฌ ์ ์๋๋ก ํด์ค๋ค.
์ค์ง ํ๋์ ํ๋ก์ธ์ค๋ง lock์ ์ก์ ์ ์๋ค๋ ์ ์ ์กฐ๊ฑด๋ง ๋ง์กฑํ๋ค๋ฉด Solution์ด ๋ ๊ฒ์ด๋ค.
locking system์ด๋ผ๊ณ ํ๋ฉด ํ๋์จ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค๊ณ ์๊ฐํ๋ ์ฌ๋๋ค์ด ์๋๋ฐ, locking system์ด๋ผ๋ ๊ฒ์ ๋ฒ์๋ ์์ฒญ ๋๋ค. ์ด์ ๋ฅผ ํ ํ๋ก์ธ์ค๋ง ์ก์ ์ ์๋๋ก ํ๊ณ , ์ด์ ๋ฅผ ์ก์ ํ๋ก์ธ์ค๋ง ์ํํ ์ ์๋๋ก ํ๋ ๋งค์ปค๋์ฆ ์์ฒด๊ฐ locking system์ด๋ผ๊ณ ํ ์ ์๋ค.
๋ค์์ ๋ค๋ฃฐ ๋ชจ๋ ๋๊ธฐํ ๋ฌธ์ ์๋ฃจ์ ๋ค๋ ๋ชจ๋ locking system์ ์ผ๋ถ๋ผ๊ณ ํ ์ ์๋ค. ๊ทธ ์ค ํ๋๊ฐ ํ๋์จ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ธ ๊ฒ์ด์ง, locking system์ด ํ๋์จ์ด ๊ธฐ๋ฐ์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ ์๋๋ค.
๊ฐ๋ฐ์์ ์ ์ฅ์์ ํผํฐ์จ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ Lock์ ์ฌ์ฉํ๋ ๊ฒ ์ค์ ์ด๋ค ๊ฒ์ด ๋ ํธํ ๊น?
ํผํฐ์จ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค๋ฉด, ํผํฐ์จ์ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ ๊ฐ๋ฐ์๋ง critical section์ด ํฌํจ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
ํ์ง๋ง lock์ ์ด์ฉํ๋ฉด ๊ทธ๋ฌํ ์ดํด ํ์์์ด critical section ์๋ค๋ก acquire lock๊ณผ release lock๋ง ํธ์ถํ๋ฉด ์ฝ๊ฒ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ผ๋ฏ๋ก ํจ์ฌ ํธ๋ฆฌํ ๊ฒ์ด๋ค.
ํ๋์จ์ด๋ฅผ ์ด์ฉํด์๋ critical section problem์ ํด๊ฒฐํ ์ ์๋ค.
critical section problem์ด ๋ฐ์ํ๋ ์ด์ ๋ ์๊น X=X+1์ด๋ผ๋ ๋ช
๋ น์ ์คํํ๊ธฐ ์ํด ์ค์ ๋ก๋ Load, Add, Store 3๋จ๊ณ์ instruction์ด ์ํ๋์ด์ผ ํ๋ค๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ P0์ P1์ Load, ์ฐ์ฐ, Store instruction๋ค์ด ์๋ก ์์ฌ์ interleaved ํ๊ฒ ์ํ๋๋ค ๋ณด๋ Critical section problem์ด ๋ฐ์ํ๊ฒ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด P0์ instruction์ ์ญ ์ํํ๊ณ P1์ instruction์ด ์ญ ์ํ๋๊ฒ ํ๋ฉด ๋๋๋ฐ ์๋ค๊ฐ ์ ์์ฌ์ ์ํ๋๋ ๊ฒ์ผ๊น?
CPU Scheduling ๋๋ฌธ์ด๋ค.
P0๊ฐ Load instruction์ ๊ฐ์ ธ์์ ์ํํ๋๋ฐ CPU Scheduling์ด ๋ฐ์ํด์ P1์๊ฒ CPU๋ฅผ ๋๊ฒจ์ฃผ๊ฒ ๋๊ณ , P1์ด Load instruction์ ์ํํ๊ณ ๋ CPU Scheduling์ด ๋ฐ์ํ๊ณ P0๊ฐ CPU๋ฅผ ๋ฐ์ Add instruction์ ์ํํ๊ณ ์ด๋ฐ ์์ด๋ค.
๋ง์ฝ P1์ด Load instruction์ ์ํํ๊ธฐ ์ ์ CPU Scheduling์ด ๋ฐ์ํ์ง ์๊ฒ ๋ง๋ค์ด ๋ฒ๋ฆฐ๋ค๋ฉด?
Load, Sub, Store๋ฅผ ํ ๋ฒ์ ๋ค ์ํํ ์ ์๊ฒ ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฝ์ด๊ฐ ํ๋๋ผ๋ฉด ์ ๋ ๋ ํ๋ก์ธ์ค์ instruction์ด ์์ฌ์ ์ํ๋๋ ์ผ์ ์๋ค.
๋ด๊ฐ CPU๋ฅผ ์ก๊ณ ์๋ค๊ฐ ๋์์ผ ํ๋ ๊ฒฝ์ฐ๋ 2๊ฐ์ง๊ฐ ์๋ค.
I/O๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, Time quantum์ด ๋์ด ๋์ ๋์์ผ ํ๋ ๊ฒฝ์ฐ.
critical section์์๋ I/O๊ฐ ๋ฐ์ํ ์ผ์ ์๋ค.
๋ฐ๋ผ์ critical section์์ CPU๋ฅผ ๋์์ผ ํ๋ ์ผ์ Time quantum์ ๋ชจ๋ ์์งํ ๊ฒฝ์ฐ ๋ฟ์ด๋ค.
Time quantum์ด ๋๋ ๊ฒ์ ํ์ธํ๋ ์ฃผ์ฒด๋ Timer. ์๊ฐ ์๊ฐ์ ์ธก์ ํด์ ๋๋๋ฉด interrupt๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ด Timer device์ interrupt๋ฅผ disabled ์์ผ๋ฒ๋ฆฌ๋ฉด, interrupt๋ฅผ ์ฒดํฌํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฃผ์ด์ง Time quantum์ ๋ค ์์งํด๋ Timer interrupt๋ฅผ ํ์ธํ์ง ์๊ธฐ ๋๋ฌธ์ CPU๋ฅผ ๊ณ์ ์ธ ์ ์๊ฒ ๋๋ค.
critical section์ ๋ค์ด๊ฐ๊ธฐ ์ ์ Timer interrupt๋ฅผ disabled ์ํจ ๋ค์์ critical section์ ๋ค์ด๊ฐ๋ฉด CPU ์ค์ผ์ค๋ง์ด ๋ฐ์ํ ์๊ฐ ์์. ๊ทธ๋ฆฌ๊ณ ๋น ์ ธ ๋์ค๋ฉด์ enable ์ํจ๋ค.
=> ๊ทธ๋ฐ๋ฐ ์ด๊ฒ ๋ง๋ณํต์น์ฝ์ ์๋๋ค, CPU๊ฐ ํ๋์ธ ์ฑ๊ธ ์ฝ์ด์์๋ง ์ฌ์ฉํ ์ ์๋ ๋ฐฉ์์ด๋ค.
๊ทธ๋์ instruction๋ค์ด atomicํ๊ฒ ์ํ๋ ์ ์๋๋ก ํด์ฃผ๋ ํ๋์จ์ด๊ฐ ์๋๋ฐ ๊ทธ๊ฒ ๋ฐ๋ก Synchronization Hardware๋ค.
๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ฆ CPU๋ ํน๋ณํ ํ๋์จ์ด ํ๋ก๋ฅผ ์ ๊ณตํ๋ค.
์ด ํ๋ก๋ single cycle์ ๊ธฐ๋ฅ์ ๋ค ๋๋ง์น ์ ์๋๋ก ๋ณด์ฅํ๋ค.
์ด ํ๋ก๊ฐ ์ด๋ค ํจ์๋ฅผ ๊ตฌํํ๋ค๊ณ ํ๋ฉด ์ด ํจ์๊ฐ ์ผ๋จ ์คํ๋๋ฉด ๋๊น์ง ๊ฐ๋ค๋ ๊ฒ์ ๋ณด์ฅํด์ค๋ค.
=> Atomic Hardware
์ด ํ๋์จ์ด๋ฅผ ์ด์ฉํ๋ฉด ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋ํ์ ์ผ๋ก Test and Set (TAS)๊ณผ Swap 2๊ฐ์ง๊ฐ ์๋ค.
TAS( Test and Set )
TAS ํ๋์จ์ด๋ ๋ค์๊ณผ ๊ฐ์ TestAndSet ๋ก์ง์ atomicํ๊ฒ ์คํํ๋๋ก ๊ตฌํ๋ ํ๋์จ์ด์ด๋ค.
TestAndSet ํจ์๋ target ๊ฐ์ true๋ก ๋ณ๊ฒฝํ๊ณ , ๋ณ๊ฒฝํ๊ธฐ ์ ๊ธฐ์กด์ target๊ฐ์ ๋ฆฌํดํ๋ ๋จ์ํ ํจ์์ด๋ค.
์ด๋ฌํ ๋ก์ง์ ์ํํ๋ TAS๋ฅผ ์ด์ฉํด์ ์ด๋ป๊ฒ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊น?
๋งจ ์ฒ์ ์ง์ ์ ์๋ํ ํ๋ก์ธ์ค๋ TestAndSet์ ํธ์ถํ์ฌ lock์ true๋ก ๋ฐ๊พธ๊ณ ์ด๊ธฐ lock ๊ฐ์ธ false๋ฅผ ๋ฆฌํด๋ฐ์ critical section์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ง์ ์ ์ํด TestAndSet์ ํธ์ถํ๋ฉด, lock์ true๋ก ๋ฐ๋์ด์๊ธฐ ๋๋ฌธ์ true๋ฅผ ๋ฆฌํด๋ฐ์ while๋ฌธ์ ๋๋ฉฐ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด์ ์ง์ ํ ํ๋ก์ธ์ค๊ฐ critical section์ ๋๋ด๊ณ lock์ false๋ก ๋ฐ๊พธ๋ ์๊ฐ lock์ true๋ก ๋ฐ๊พธ๊ณ false๋ฅผ ๋ฆฌํด๋ฐ์ critical section์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
atomic ํ๋์จ์ด ๋๋ถ์ ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ํจ์ฌ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๊ฒ ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์๋ TestAndSet(lock)์ ํธ์ถํ๋ ๊ฒ๋ง์ผ๋ก ๊ฐ๋จํ๊ฒ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฒ ๋๋ค.
Swap
Swap์ ๊ธฐ์กด์ ์ ์๋ ค์ง Swap ์ฝ๋๋ฅผ atomicํ๊ฒ ์คํํด์ฃผ๋ ํ๋์จ์ด์ด๋ค.
์ด๋ฌํ Swap ํ๋์จ์ด๋ฅผ ์ด์ฉํด์ ์ด๋ป๊ฒ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊น?
critical section์ ๋ค์ด๊ฐ๊ธฐ ์ key = true๋ก ์ค์ ํ๊ณ Swap์ ํธ์ถํ๋ค.
์ด๋ฏธ ๋ค์ด๊ฐ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ํด๋น ํ๋ก์ธ์ค๊ฐ Swap์ ํตํด lock ๊ฐ์ true๋ก ๋ฐ๊ฟ๋์์ ๊ฒ์ด๋ฏ๋ก key์ lock์ ์๋ก swapํด๋ ์๋ฏธ๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋จผ์ ์ง์ ํ ํ๋ก์ธ์ค๊ฐ critical section์ ๋๋ด๊ณ lock์ false๋ก ๋ฐ๊พธ๋ ์๊ฐ lock์ด false์ด๋ฏ๋ก Swap์ ํธ์ถํ ํ๋ก์ธ์ค๋ key = false๊ฐ ๋์ด while ๋ฃจํ๋ฅผ ํ์ถํ๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด 2๊ฐ์ง๋ atomic hardware๊ฐ ์ ๊ณต๋์ด์ผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ์์ด๋ค.
ํ๋์จ์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋ชฉ์ ์ ๋ฌ์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์๊น?
( ์ฌ๊ธฐ์์ ๋ชฉ์ ์ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด์๋ ๊ฐ๋ฐ์์ ๋ถ๋ด์ ๋์ด์ฃผ๋ ๊ฒ )
Semaphore
์ธ๋งํฌ์ด ๋ณ์ S๋ integer variable์ด๊ณ 2๊ฐ์ atomicํ operation P(), V() ๋ฅผ ํตํด ์ ๊ทผ๋ ์ ์๋ค.
P๋ S๊ฐ ์์๊ฐ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ์์๊ฐ ๋๋ฉด ๋น ์ ธ๋์ค๋ฉด์ S๋ฅผ 1 ๊ฐ์์ํจ๋ค.
V๋ ๋จ์ํ S์ ๊ฐ์ 1 ์ฆ๊ฐ์ํค๋ Operation์ด๋ค.
์ธ๋งํฌ์ด ๋ณ์ ํ๋์ P(), V() Operation์ ํตํด ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
์ด๊ธฐ์ mutex ๊ฐ์ 1์ด๊ธฐ ๋๋ฌธ์ ๋งจ ์ฒ์ ์ง์ ์ ์๋ํ ํ๋ก์ธ์ค๊ฐ P๋ฅผ ํธ์ถํ๋ฉด while๋ฌธ์ ๊ฑธ๋ฆฌ์ง ์๊ณ mutex๊ฐ์ 0์ผ๋ก ๋ฐ๊พผ๋ค. ๊ทธ๋ฆฌ๊ณ critical section์ ์ง์ ํ๊ฒ ๋๋ค.
์ด๋ ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ง์ ์ ์๋ํ๊ธฐ ์ํด P๋ฅผ ํธ์ถํ๋ฉด mutex๊ฐ 0์ด๊ธฐ ๋๋ฌธ์ while๋ฌธ์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ค๊ฐ ์์ ์ง์ ํ ํ๋ก์ธ์ค๊ฐ critical section์ ๋๋ด๊ณ ๋์ค๋ฉด์ V๋ฅผ ํธ์ถํ๋ฉด mutex๊ฐ์ด 1 ์ฆ๊ฐ๋์ด 1์ด ๋๋ค.
๊ทธ๋ฌ๋ฉด ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค ์ค ํ๋๊ฐ ์ง์ ํ ์ ์๊ฒ ๋๊ณ ๋ mutex ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๊ฒ ๋๋ค.
๊ฐ๋ฐ์๋ ๊ทธ๋ฅ critical section ์ ๋ค๋ก P์ V๋ฅผ ํธ์ถํ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด๊ฒ ์ด๋ป๊ฒ ๊ฐ๋ฅํ ๊น?
์์ ๋งํ๋ฏ์ด P์ V๊ฐ atomicํ ํจ์์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
P์ V๊ฐ atomicํ์ง ์๊ฒ ๋์ํ๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊น?
์ง์ ํ๊ณ ์ ํ๋ ํ๋ก์ธ์ค๋ค์ด ๋์์ P๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด mutex ๊ฐ์ Loadํ๊ฒ ๋๋๋ฐ, atomicํ์ง ์๊ฒ ์ํ๋๋ฉด ๋ชจ๋ mutex ๊ฐ์ 1๋ก Load ํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ critical section์ ์ง์ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
์๋ ์ด๋ป๊ฒ software๋ง์ผ๋ก atomicํ๊ฒ ๋์ํ๊ฒ ๋ง๋ค ์ ์์์๊น??
์ฑ๊ธ ํ๋ก์ธ์ค์ธ ๊ฒฝ์ฐ์๋ ๊ฐ๋จํ๋ค.
P์ V๋ฅผ ํธ์ถํ๊ธฐ ์ ์ Timer interrupt๋ฅผ disable ์ํค๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด Timeout์ด ๋์ด๋ CPU๋ฅผ ๋บ๊ธฐ์ง ์๊ณ , ๋ชจ๋ instruction์ ์ํํ ์ ์๋ค.
Q. ๋๋ ์ฌ๊ธฐ์ ๊ถ๊ธํ ์ ์ด ํ๋ ์๊ฒผ๋ค. ์ธ๋งํฌ์ด๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋ ค๋ฉด P, V ํจ์๊ฐ atomicํ๊ฒ ์ํ๋์ด์ผ ํ๋ค๊ณ ํ๋๋ฐ, ์ด๊ฑด ๋จ์ผ ํ๋ก์ธ์์ผ ๋์ ์๊ธฐ ์๋๊ฐ? ๋ฉํฐ ํ๋ก์ธ์ ํ๊ฒฝ์ด๋ผ๋ฉด atomicํ๊ฒ ์ํ๋๋ค๊ณ ํ๋๋ผ๋ ๊ฐ๊ฐ์ ํ๋ก์ธ์์์ atomicํ ํจ์๋ฅผ ํตํด ์ธ๋งํฌ์ด ๋ณ์์ ์ ๊ทผํ๋ฉด ๊ฒฐ๊ตญ์ Race condition์ด ๋ฐ์ํ์ง ์์๊น? ๋ผ๋ ์๊ฐ์ด์๋ค.
atomicํ๋ค๋ ๋ง์ ์ฌ๋ฌ ํ๋ก์ธ์ค ์ค ๋จ ํ๋์ ํ๋ก์ธ์ค๋ง ์ํํ ์ ์๋๋ก ํ๋ค๋ ๊ฐ๋ ์ด ํฌํจ๋ ๊ฑด๊ฐ? ํท๊ฐ๋ ธ๋ค.
๊ทธ๋์ ๊ต์๋๊ป ์ง๋ฌธ์ ๋๋ ธ๋ค.
A. ๋ง์ต๋๋ค. ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ทธ๋์ ๊ทธ ์ ์ ๊ณ ๋ คํด์ atomic operation์ "๊ตฌํ" ํด์ผ ํ๋ฉฐ, ๋ฐ๋ผ์ multi-core ์์คํ ์์์ atomic operation ๊ตฌํ์ ๋ ๋ณต์กํด์ง๋๋ค.
์ผ๋ฐ์ ์ผ๋ก atomic operation์ด multi-core ์์คํ ์์๋ "atomic" ํ๋๋ก ๊ตฌํํ๊ธฐ ์ํด, operation์ด ์ฌ์ฉํ๋ memory data (์: test-and-set์์์ 'target' )์ ๋ํ ์ ๊ทผ์ด ๋ฐฐํ์ ์ผ๋ก (exclusively) ์ผ์ด๋๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ฆ, ์ด๋ค core์์ test-and-set์ ํธ์ถํ๋ฉด์ target์ ์ ๊ทผํ๊ฒ ๋๋ฉด ๋ค๋ฅธ core์์ ๋์์ (๊ทธ๋ฌ๋ ๊ฐ๋ฐ์ ์ฐจ์ด๋ก ๋ฆ๊ฒ) test-and-set์ ์คํํ๋ฉด target์ ์ ๊ทผํ์ง ๋ชปํ๊ณ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ง๋ญ๋๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ์ฌ๋ฌ core ์์ test-and-set์ด ๊ฐ๊ฐ ์คํ๋๋๋ผ๋ ๊ทธ๋ค ์ฌ์ด์ ๋๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๊ฒ ๋์ด "atomic"ํ๊ฒ ๋์ฃ . Memory data์ ๋ํ ๋ฐฐํ์ ์ ๊ทผ์ ๊ตฌํํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์, memory์ ์ ๊ทผํ๊ธฐ ์ ์ ๋จผ์ memory bus์ LOCK signal์ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค. ๊ทธ signal์ ๋ค๋ฅธ core๋ค์ memory ์ ๊ทผ์ operation ์ข ๋ฃ ์๊น์ง ๊ธ์ง์ํค๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๊ตฌํ๋ atomic hardware๋ฅผ ์ฌ์ฉํด์ P(), V()๋ฅผ atomicํ๊ฒ ๋ง๋ค๋ฉด, multi-core ๋๋ multi-processor ์์คํ ์์๋ semaphore๋ฅผ ๋๊ธฐํ ๋๊ตฌ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ฌผ๋ก peterson์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด๋ ๋ฉ๋๋ค.
์ด๋ฌ๋ฉด ์ดํด๊ฐ ํจ์ฌ ๋ ์ฌ์์ง ๊ฒ์ด๋ค. P, V๋ฅผ ํธ์ถํ๋ ๊ฒ๋ง์ผ๋ก ์ธ๋งํฌ์ด ๋ณ์์๋ ๋จ ํ๋์ ํ๋ก์ธ์๋ง ์ ๊ทผํ๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ ๋ป์ critical section์ ๋ค์ด๊ฐ๋ ํ๋ก์ธ์ค๋ ํ๋ ๋ฐ์ ์์์ ์๋ฏธํ๋ค.
=> ์๋ ๊ทธ๋ฌ๋ฉด ์ฒ์๋ถํฐ ๊ทธ๋ฅ ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ๋์ง, ๊ตณ์ด ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ P,V๋ฅผ ์ฌ์ฉํ๊ฒ ํด์ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋?
์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด critical section์ ๋ง๋ ๋๋ง๋ค ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
=> ๊ทธ๋ฐ๋ฐ ์ธ๋งํฌ์ด ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด P์ V ํจ์๋ฅผ ์ ์ํ ๋๋ง ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด์ ์ฝ๋ฉํด๋๋ฉด, critical section์ ๋ง๋๋ฉด P์ V๋ฅผ ๊ทธ๋ฅ ํธ์ถํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
=> ๊ฐ๋ฐ์ ์
์ฅ์์ ์ฝ๋ฉ์ด ๋งค์ฐ ๊ฐ๋จํด์ง๋ค.
๊ทธ๋ฌ๋ ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํด๋ ์ฌ์ ํ CPU๋ฅผ ์ฌ์ฉํ๋ฉด์ while๋ฌธ์ ๋์์ผ ํ๋ busy waiting์ด ๋ฐ์ํ๋ค.
=> ์ด ์ค๋ฒํค๋๋ critical section์ด ์ปค์ง ์๋ก ๊ฐ์ด ์ปค์ง๋ค.
Block/Wakeup Implementation
ํ๋ก์ธ์ค๋ค์ด while๋ฌธ์ ๋๋ฉด์ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ ๊ฒ์ด ์๋๋ผ Sleep(Block)์ผ๋ก ์ฌ์ด ๋ค์, critical section์ ์ง์ ํ ์กฐ๊ฑด์ด ๋๋ฉด Wakeup์ผ๋ก ๊นจ์์ฃผ์.
์ด๋๋ ์ธ๋งํฌ์ด ๋ณ์๋ฅผ integer variable์ด ์๋ ๊ตฌ์กฐ์ฒด๋ก ์ ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ Linked List์ ํํ๋ก ํ์ฌ ์ ๋ค์ด ์๋ ํ๋ก์ธ์ค๋ค์ ๊ด๋ฆฌํ๋ค.
critical section์์ ํ๋ก์ธ์ค๊ฐ ๋น ์ ธ๋์ค๋ฉด ์ด ๋ฆฌ์คํธ์ ํ๋ก์ธ์ค ์ค ํ๋๋ฅผ ๊นจ์์ค๋ค.
ํ๋ก์ธ์ค๊ฐ critical section์ ์ง์ ํ๊ธฐ ์ํด P๋ฅผ ํธ์ถํ๋ฉด ์ผ๋จ S.value ๊ฐ์ 1 ๊ฐ์์ํจ๋ค.
๊ทธ๋ฆฌ๊ณ S.value๊ฐ 0๋ณด๋ค ์๋ค๋ฉด ์ด๋ฏธ ๋ค์ด๊ฐ ์๋ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ ๋ป์ด๋ฏ๋ก ํ๋ก์ธ์ค๋ฅผ ๋ฆฌ์คํธ์ ๋ฃ๊ณ ์ฌ์ด๋ค.
(์ด๊ธฐ์ S.value ๊ฐ์ 1์ด๋ฏ๋ก, ๋งจ ์ฒ์์ S.value๋ฅผ 1 ๊ฐ์์ํค๋ฉด S.value๊ฐ 0์ผ ๊ฒ์)
critical section ์ํ์ ๋ง์น๋ฉด V๋ฅผ ํธ์ถํ์ฌ S.value๋ฅผ 1 ์ฆ๊ฐ์ํจ๋ค.
๊ทธ๋ฆฌ๊ณ S.value <= 0 ์ด๋ผ๋ฉด ๋ฆฌ์คํธ์ ํ๋ก์ธ์ค ์ค์ ํ๋๋ฅผ ๊นจ์ด๋ค.
์ S.value <= 0 ์ผ๋๋ง ๊นจ์ฐ๋๋, S.value๋ฅผ 1 ์ฆ๊ฐ์์ผฐ๋๋ฐ S.value๊ฐ 0๋ณด๋ค ์๋ค๋ ๊ฒ์ S.value๋ฅผ 1 ๊ฐ์์ํค๊ณ ์ ๋ค์ด ์๋ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ ๋ป์. ๋ง์ฝ ์์๋ค๋ฉด ๋ด๊ฐ S.value๋ฅผ 0์ผ๋ก ๋ง๋ค๊ณ ์ง์ ํ์ผ๋๊น ๋ค์ 1 ์ฆ๊ฐ์์ผฐ์ ๋ 1์ด ๋์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ฉด ์ฌ๊ธฐ์ S.value๊ฐ ์ค์ํ ์๋ฏธ๋ฅผ ๊ฐ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค. S.value์ ์ ๋๊ฐ์ ํ์ฌ ๋๊ธฐ์ค์ธ ํ๋ก์ธ์ค์ ์๋ฅผ ์๋ฏธํ๋ค.
์ด๋ ๊ฒ ์ธ๋งํฌ์ด ๋ณ์์ ๊ฐ์ด ์๋ฏธ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉด integer semaphore๋ผ๊ณ ํ๋ค.
๋จ์ง, ์๋ค/์๋ค๋ฅผ ํ์ ํ๋ ์ฉ๋๋ก๋ง ์ฌ์ฉ๋๋ฉด binary semaphore๋ผ๊ณ ํ๋ค.
Busy waiting or Block/Wakeup overhead ?
ํ๋ก์ธ์ค๋ฅผ Block ์ํค๊ณ List์ ์ฐ๊ฒฐํ๊ณ ๋์ค์ Wakeup ์ํค๋ ๊ฒ๋ ๋ค ์ค๋ฒํค๋๋ค.
๊ทธ๋์ Critical section์ด ์์ฒญ ์๋ค๊ณ ํ๋ฉด ๊ทธ๋ฅ while ๋ฃจํ๋ฅผ ๋๋ฉด์ ๊ธฐ๋ค๋ฆฌ๋ ์ธ๋งํฌ์ด ๋ฐฉ์์ด ๋ ๋น ๋ฅผ ์๋ ์๋ค.
critical section์ ํฌ๊ธฐ์ ๋ฐ๋ผ์ block/wakeup ์ธ๋งํฌ์ด๋ฅผ ์ธ์ง ๊ทธ๋ฅ ์ผ๋ฐ ์ธ๋งํฌ์ด๋ฅผ ์ธ์ง ๊ฒฐ์ ํด์ผ ํ๋ค.
๋๋ ๋์์ ๋๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ๋งค์ฐ ๋ง๋ค๊ณ ํ๋ฉด ๊ทธ ๋ง์ ํ๋ก์ธ์ค๋ค์ด ๊ฐ์ while๋ฃจํ๋ฅผ ๋๋ ๊ฒ์ ์์ฒญ ๋ญ๋น๋ค.
๊ทธ๋ด ๋ ๊ทธ๋ฅ ์ฌ์ฐ๋ ๊ฒ ๋ ์ข์ ์๋ ์๋ค.
์ด๊ฑด ๊ฐ๋ฐ์๊ฐ ํ๋จํด์ผ ํ ์์
์ง๊ธ๊น์ง Critical Section Problem์ ํด๊ฒฐํ๋ Solution์ ๋ํด์ ์ดํด๋ดค๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ฐ ๊ฑธ ์ Operating System ์๊ฐ์ ๋ฐฐ์ฐ๋ ๊ฑธ๊น?
์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ด ํ๋์ ๋ฐ์ดํฐ์ ๋ํด์ ์ ๊ทผํ์ฌ ์ผ์ ํ๋ ์ผ์ด์ค๊ฐ OS ๋ด์์ ๋ฐ์ํ ๊น?
์ด๋ฐ ๊ฑด ๋ณดํต ์ ํ๋ฆฌ์ผ์ด์
์์์ ์ผ์ด๋๋ ํ์๋ค์ด ์๋๊ฐ. ๊ณต์ ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ฌ๋ฌ ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋๊ฐ ์ ๊ทผํด์ DB์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ๋ ์์ฃผ ์ผ์ด๋ ๊ฒ ๊ฐ์๋ฐ, ๊ทธ๋ผ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์๊ฐ์ ๋ฐฐ์์ผ ํ๋ ๊ฒ ์๋๊ฐ??
๋ต์ OS ๋ด์์๋ ๋ฐ์ํ๋ค.
1. Interrupt ํธ๋ค๋ฌ์ Kernel Code ์ฌ์ด์ critical section problem ๋ฐ์
CPU๊ฐ ํ๋๋ผ๋ฉด critical section ์ ๋ค๋ก interrupt๋ฅผ disable ์ํค๊ณ enable ์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
๋๋ ์์์ ๋ฐฐ์ด ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ๋ค์ ์ฌ์ฉํด์ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์๋ ์์.
2. ๊ฐ Userprogram์์ ํธ์ถํ ์ปค๋ ์ฝ๋ ์ฌ์ด์ critical section problem
3. Multiprocessor
CPU๊ฐ ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ Interrupt๋ฅผ dis/enable ์ํค๋ ๊ฒ๋ง์ผ๋ก critical section problem์ด ํด๊ฒฐ๋์ง ์๋๋ค.
๋ชจ๋ ์ปค๋ ๋ณ์์ ๋ํด์ ์ธ๋งํฌ์ด๋ก ๋ณดํธ๋ฅผ ํ๋ , ํผํฐ์จ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ณดํธ๋ฅผ ํ๋ , atomic ํ๋์จ์ด๋ก ๋ณดํธ๋ฅผ ํ๋ ๋ชจ๋ ์ปค๋ ๋ณ์ ํ๋ ํ๋๋ฅผ ๋ณดํธํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๋๋ OS ์์ฒด๋ฅผ ํ๋์ ๊ฑฐ๋ํ critical section์ผ๋ก ์ทจ๊ธํด์ ์ด๋ค ํ๋์ ํ๋ก์ธ์ค๊ฐ OS ์ฝ๋๋ฅผ ์ํํ๊ณ ์์ผ๋ฉด (๋ชจ๋ ๋นํธ๋ก ๊ตฌ๋ถํ ์ ์๊ฒ ์ง) ๋ค๋ฅธ CPU๋ ์ปค๋ ๋ชจ๋๋ก ์ํํ์ง ๋ชปํ๋๋ก ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
OS ์ปค๋ ์์ฒด๋ฅผ ํ๋์ critical section์ผ๋ก ์๊ฐํ๋ ๋ฐฉ๋ฒ์ ํ๋์ CPU๊ฐ ์ปค๋ ๋ชจ๋์์ ๋์ํ๋ ๋์์ ๋ค๋ฅธ CPU๋ ์ปค๋ ๋ชจ๋๋ก ์ํํ ์๊ฐ ์์ด์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ System call์ ํธ์ถํด๋ ์ํํด ์ค ์๊ฐ ์์ผ๋ฏ๋ก ์ฑ๋ฅ์์ ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
=> ๋จ์ํ๊ณ ์ฑ๋ฅ์ด ์กฐ๊ธ ๋จ์ด์ง๋ ๋ฐฉ๋ฒ์ ์ ํํ ๊ฒ์ธ๊ฐ, ๋ณต์กํ์ง๋ง ์ฑ๋ฅ์ด ์ ์ง๋๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ ์ ํํด์ผ ํ๋ค.
โป๋ชจ๋ ๋ด์ฉ์ ํ์๋ํ๊ต ๊ฐ์์ฉ ๊ต์๋์ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑ๋์์ต๋๋ค.
'HYU > ์ด์์ฒด์ (OS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
8. Memory Management (1) (0) | 2023.05.02 |
---|---|
6. Process Syncronization (2) (1) | 2023.04.07 |
4. CPU Scheduling (3) | 2023.03.24 |
3. Processes and Threads (0) | 2023.03.23 |
2. Operating System Overview (2) (0) | 2023.03.23 |