Process Synchronization Problem
Last updated
Last updated
๋ณดํต ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณต์ผ ๊ฒ์ด๋ค.
storage box ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด์๊ณ
์ฐ์ฐํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์์
์ฐ์ฐ์ ์งํํ ๋ค์
์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ storage ์ ์ ์ฅํ๋ค.
์ด๋, ๋ฐ๋ก syncronization ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค. โ Race Condition
๊ฒฝ์์ํ์ ๊ฐ๋ฅ์ฑ!
๊ฐ์ storage ์ ์ฌ๋ฌ ์คํ ๋ฐ์ค๋ค์ด ์ ๊ทผํ๋ ๊ฒฝ์ฐ
์ด์์ฒด์ ์ปค๋ ๋ ๋ฒจ์์ ์ถฉ๋ถํ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
count ++ ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ, load, inc, store ๋ฑ ์ฌ๋ฌ ๋จ๊ณ์ ๊ฑธ์ณ์ ์ฐ์ฐ์ด ์ํ๋๋๋ฐ,
์ฐ์ฐ ๋์ค์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์ฐ์ฐ ๊ฒฐ๊ณผ์ ์ค์ผ์ด ๋ฐ์ํ ์ ์๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ
kernel ๋ชจ๋์์ ์ฐ์ฐ ์ํํ ๋, ์ธํฐ๋ฝํธ๋ฅผ ๋ง๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๊ณต์ ๋ฐ์ดํฐ์ ๋์์ ๊ทผ์ ๋ฐ์ดํฐ์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
์ผ๊ด์ฑ ์ ์ง๋ฅผ ์ํด์๋ ํ๋ ฅ ํ๋ก์ธ์ค ๊ฐ์ ์คํ ์์๋ฅผ ์ ํด์ฃผ๋ ๋งค์ปค๋์ฆ์ด ํ์ํ๋ค.
race condition
์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ด ๋์์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ์ํฉ
๋ฐ์ดํฐ์ ์ต์ข ์ฐ์ฐ ๊ฒฐ๊ณผ๋ ๋ง์ง๋ง์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ ํ๋ก์ธ์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ฒ ๋๋ค.
race condition ์ ๋ง๊ธฐ ์ํด์๋ concurrent process ๋ ๋๊ธฐํ synchronize ๋์ด์ผ ํ๋ค.
ํ๋ก์ธ์ค๊ฐ context switch ์์ฒด๊ฐ ๋ฌธ์ ๊ฐ ์๋๋ผ shared data ๋ฅผ ์ ๊ทผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ์ด๋ค.
n๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๋ ๊ฒฝ์ฐ
๊ฐ ํ๋ก์ธ์ค์ code segment ์๋ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ์ฝ๋์ธ critical section ์ด ์กด์ฌํ๋ค.
๋ฌธ์ ์
ํ๋์ ํ๋ก์ธ์ค๊ฐ critical section ์ ์์ ๋, ๋ค๋ฅธ ๋ชจ๋ ํ๋ก์ธ์ค๋ critical section ์ ๋ค์ด๊ฐ ์ ์์ด์ผ ํ๋ค.