Initial Attempts to Solve Process Synchronization Problem
Last updated
Last updated
mutual exclusion ์ํธ๋ฐฐ์
ํ๋ก์ธ์ค Pi ๊ฐ critical section ๋ถ๋ถ์ ์ํ์ค์ด๋ฉด ๋ค๋ฅธ ๋ชจ๋ ํ๋ก์ธ์ค๋ค์ ๊ทธ๋ค์ critical section ์ ๋ค์ด๊ฐ๋ฉด ์๋๋ค.
progress
์๋ฌด๋ critical section ์ ์์ง ์์ ์ํ์์ critical section ์ ๋ค์ด๊ฐ๊ณ ์ ํ๋ ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฉด critical section ์ ๋ค์ด๊ฐ๊ฒ ํด์ฃผ์ด์ผ ํ๋ค.
bounded waiting ์ ํ๋๊ธฐ
ํ๋ก์ธ์ค๊ฐ critical section ์ ๋ค์ด๊ฐ๋ ค๊ณ ์์ฒญํ ํ ๋ถํฐ ๊ทธ ์์ฒญ์ด ํ์ฉ๋ ๋๊น์ง ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด critical section ์ ๋ค์ด๊ฐ๋ ํ์์ ํ๊ณ๊ฐ ์์ด์ผ ํ๋ค.
์์ฒญํ ํ์ ํน์ ์๊ฐ ์ด๋ด์๋ ๋ค์ด๊ฐ ์ ์์ด์ผ ํ๋ค.
๋ชจ๋ ํ๋ก์ธ์ค์ ์ํ์๋๋ 0๋ณด๋ค ํฌ๋ค.
ํ๋ก์ธ์ค๋ค ๊ฐ์ ์๋์ ์ธ ์ํ์๋๋ ๊ฐ์ ํ์ง ์๋๋ค.
mutual exclusion ์ ์ถฉ์กฑํ์ง๋ง, progress ๋ ์ถฉ์กฑํ์ง ๋ชปํ๋ค.
๊ณผ์๋ณดํธ๊ฐ ๋ฐ์ํ๊ฒ ๋จ. ๋ฐ๋์ ๊ต๋๋ก ํ๋ฒ์ฉ ๋ค์ด๊ฐ์ผ ํ๋๋ฐ, ๊ทธ๊ฐ turn ์ ๋ด ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ค์ผ๋ง ๋ด๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
ํน์ ํ๋ก์ธ์ค๊ฐ ๋ ๋น๋ฒํ critical section ์ ๋ค์ด๊ฐ์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
ํ๋๊ทธ๊ฐ ๋์์ ์ผ์ง ๋, ์๋ก ํ๋๊ทธ๊ฐ ์ผ์ง ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ while ๋ฌธ ์์ผ๋ก ์ง์ ํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
mutual exclusion, progress, bounded waiting ์ ์ธ ๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋๋ค critical section ์ ๋ค์ด๊ฐ๊ณ ์ ํ ๋, turn ์ ๋ฐ์ง๋ค.
๋๋ค ๋ค์ด๊ฐ๊ณ ์ถ์ง ์๋ค๋ฉด, turn ๋๋ก ๋ค์ด๊ฐ๋ค.
๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ : busy waiting = spin lock
๊ณ ๊ธ์ธ์ด์์๋ ํ์ฐ์ ์ผ๋ก instruction ์ด ์ฌ๋ฌ ๊ฐ๋ก ๋๋์ด์ง๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์๊ณ ๋ฆฌ์ฆ๋ค์ ๊ณ ๋ฏผํด์ผํ๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ช ๋ น๊ณผ ์ฐ๋ ๋ช ๋ น์ ๋์์ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ด๋ค.
ํ์ง๋ง ํ๋์ instruction ์ผ๋ก ๋ฐ์ดํฐ์ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ ๋์์ ์ํํ ์ ์๋ค๋ฉด, ์ฌ์ค ๊ณ ๋ฏผํ ๋ฌธ์ ๊ฐ ์๋๋ค.
ํ๋์จ์ด์ ์ผ๋ก test & modify ๋ฅผ atomic ํ๊ฒ ์ํํ ์ ์๋๋ก ์ง์ํ๋ ๊ฒฝ์ฐ, ์์ ๋ฌธ์ ๋ ๊ฐ๋จํ ํด๊ฒฐ๋ ์ ์๋ค.
test and set a : a์ ๊ฐ์ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ ๋์์ ์ํํ๋ ๋ช ๋ น
ํ์ง๋ง ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ฐ ์ผ์ ๊ณ์ ํ๋ก๊ทธ๋จ ๋ด์์ ํ๋ ๊ฒ์ ๊ต์ฅํ ๋ถํธํ ์ผ์ด๋ค. ์ด๋ ์ฐ๋ฆฌ๋ semaphore ๋ฅผ ์ด์ฉํ ์ ์๋ค.