Classical Problems of Synchronization
Synchronization Problem์ผ๋ก ๋ํ์ ์ธ ๋ฌธ์ ๋ ๋ค์์ 3๊ฐ์ง์ด๋ค.
1. Bounded-Buffer Problem
2. Readers and Writers Problem
3. Dining-Philosophers Problem
Bounded-Buffer Problem
์ผ๋ช Producer & Consumer ๋ฌธ์ ๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ์ด ๋ฌธ์ ๋ ํ๋ก๋์๊ฐ ๊ณต์ ๋ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ฉด ์ปจ์๋จธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๊ฐ๋ ํํ์ด๋ค. ์ด๋ ๋ฒํผ์ ์ฌ์ด์ฆ๋ ๋ฌด์ ํ์ด ์๋๋ผ ํ์ ๋์ด ์๋ค.
๋ฒํผ๋ ํ๋ก๋์์ ์ปจ์๋จธ ์ฌ์ด์ ๊ณต์ ๋๋ ๊ณต๊ฐ์ด๋ฏ๋ก ํ๋ก๋์๊ฐ ๋ฒํผ์ ๊ฐ์ ์ฐ๋ ๋์ ์ปจ์๋จธ๊ฐ ๊ฐ์ ์ฝ์ด๊ฐ๋ ์ ๋๊ณ , ์ปจ์๋จธ๊ฐ ๊ฐ์ ์ฝ๊ณ ์๋ ๋์ค์ ํ๋ก๋์๊ฐ ๊ฐ์ ์จ์๋ ์ ๋๋ค.
=> ์ฆ, ๋ฒํผ์ ๋ํ ์ ๊ทผ์ ๋๊ธฐํ๊ฐ ๋์ด์ผ ํ๋ค.
์ฝ๊ฒ ๋งํด์ ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ์ ๋, ๋ฒํผ์ ์ ๊ทผํ๊ธฐ ์ ์ S๋ฅผ ํธ์ถํ๊ณ ๋ฒํผ์ ์ ๊ทผํ ํ ๋น ์ ธ๋์ค๋ฉด์ V๋ฅผ ํธ์ถํ๋ฉด ์ด ๋ฌธ์ ๋ ์ฝ๊ฒ ํด๊ฒฐ์ด ๋๋ค.
๊ทธ๋ผ ๋ญ๊ฐ ๋ฌธ์ ์ผ๊น?
์ด ๋ฒํผ๋ ํ์ ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ค. ๊ทธ๋ผ ํ๋ก๋์๊ฐ ๋ฒํผ์ ํญ์ ๋ฐ์ดํฐ๋ฅผ ์ธ ์ ์๋ ๊ฒ์ ์๋๋ค. ๋ฒํผ๊ฐ ๊ฝ ์ฐจ์์ผ๋ฉด ํ๋ก๋์๋ ๋ฐ์ดํฐ๋ฅผ ๋ ์ด์ ์ฐ์ง ๋ชปํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ปจ์๋จธ ์
์ฅ์์ ํ๋ก๋์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ์ฒํ ์์ฐํ๋ ๋ฐ๋์ ๋ ์ด์ ์๋นํ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ฒํผ์์ ๊ฐ์ ์ฝ์ด๊ฐ์ง ๋ชป ํ๋ค.
๋ฌด์์ ๋ฒํผ์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ด ์๋๋ผ ๋ฒํผ์ ์ ๊ทผํด๋ ๋๋ ์ํฉ์ด๋ฉด ์ ๊ทผํ๊ณ ์๋๋ฉด ๋๊ธฐํ๊ณ ์ด๋ฐ ๊ฒ ํ์ํ๋ค.
ํ๋ก๋์ ์
์ฅ์์๋ ๋ฒํผ์ ๋น ๊ณต๊ฐ์ ๋ํ๋ด๋ empty buf๊ฐ 0๋ณด๋ค ํฌ๋ฉด ๊ฐ์ ์จ๋ ๋๊ณ , ์ปจ์๋จธ ์
์ฅ์์๋ full buf๊ฐ 0๋ณด๋ค ํฌ๋ฉด ๊ฐ์ ์ฝ์ด๋ ๋๋ค.
๊ทธ๋ฌ๋ฉด empty buf์ full buf ๋ผ๋ ๋ณ์๊ฐ ํ์ํ๋ฐ, full buf๋ฅผ ๋๋ ค์ฃผ๋ ์ฃผ์ฒด๋ ํ๋ก๋์๊ณ empty buf๋ฅผ ๋๋ ค์ฃผ๋ ์ฃผ์ฒด๋ ์ปจ์๋จธ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ด ๊ฐ ์์ฒด๊ฐ ๋ ํ๋ก๋์์ ์ปจ์๋จธ ์ฌ์ด์ ๊ณต์ ๋ณ์๊ฐ ๋๋ค.
=> ์ด ๋ณ์์ ๋ํ ๋ณดํธ๊ฐ ๋ ํ์ํ๋ค.
๋ฌผ๋ก ๋ณ๋์ ์ธ๋งํฌ์ด ๋ณ์๋ฅผ ์ด์ฉํด์ empty buf์ full buf๋ฅผ ๋ณดํธํด๋ ๋๊ฒ ์ง๋ง, ๊ณต์ ๋ณ์ ์์ฒด๋ฅผ ์ธ๋งํฌ์ด ๋ณ์๋ก ๋ง๋ค์ด์ ๋ณดํธํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
ํ๋ก๋์๋ buffer์ ๊ฐ์ ์ฐ๋ ค๊ณ ํ๊ธฐ ์ ์ ๋จผ์ empty_buf ๊ฐ ์๋์ง ๋จผ์ ํ์ธ์ ํด์ผ ํ๋ค.
๋ฐ๋๋ก ์ปจ์๋จธ๋ buffer์์ ๊ฐ์ ์ฝ์ผ๋ ค๊ณ ํ๊ธฐ ์ ์ ๋จผ์ full_buf๊ฐ ์๋์ง ๋จผ์ ํ์ธ์ ํด์ผ ํ๋ค.
ํ๋ก๋์๋ P(N_empty-buf)๋ฅผ ํธ์ถํด์ N_empty-buf๊ฐ 0๋ณด๋ค ํฐ์ง ํ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ 0๋ณด๋ค ํฌ๋ฉด buf์ ๊ฐ์ ์ฐ๊ธฐ ์ํด P(S_mutex)๋ฅผ ํธ์ถํ์ฌ buf์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ํ๋ํ๋ค.
critical section์ ๋น ์ ธ ๋์ค๋ฉด์๋ V(N_full-buf)๋ฅผ ํธ์ถํ์ฌ N_full-buf์ ๊ฐ์ 1 ์ฆ๊ฐ์์ผ์ค๋ค. ์ด๋ก์จ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ปจ์๋จธ๊ฐ ์์๋ค๋ฉด ๋น ์ ธ๋์ฌ ์ ์๊ฒ ๋๋ค.
๋น์ด์๋ ๋ฒํผ์ ์์, ์ฑ์์ง ๋ฒํผ์ ์๋ฅผ counting semaphore๋ฅผ ์ฌ์ฉํด์ ํด๊ฒฐ์ ํ๋ค.
์ ์ด๋ ๊ฒ ํ๋ฉด ํด๊ฒฐ์ด ๋ ๊น? empty buf์ full buf๊ฐ ๊ณต์ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ๊ณ ์์ ๋ ๋ณด๋ฉด ์ ๋๋ค. ์๋ฅผ ๋ค์ด, empty buf๋ฅผ ํ๋ก๋์๊ฐ 1 ์ฆ๊ฐ์ํค๋ ๋์ค์ ์ปจ์๋จธ๊ฐ ์ฝ์ผ๋ฉด ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ณ์ ๊ฐ๊ฐ์ P, V๋ก ๋ณดํธํด์ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ์๊ณ ์๋ก ํฌ๋ก์ค ํด์ P, V๋ฅผ ์ฌ์ฉํ๋ฉด ํด๊ฒฐ์ด ๋ ๊น? P, V๊ฐ "atomic" ํ๊ธฐ ๋๋ฌธ์ ํ๋ก๋์์ ์ปจ์๋จธ๊ฐ ๋์์ ์ ๊ทผํ๋ ๊ฒ์ ์์ฒ์ ์ผ๋ก ๋ด์ํ๋ค.
=> ๊ทธ๋์ ์ด ๋ฐฉ๋ฒ์ Solution์ด ๋ ์ ์๋ค.
=> ๋ณ๋์ ๋ณ์๋ฅผ ๋ณดํธํ๊ธฐ ์ํด์ ๋ ๋ค๋ฅธ ์ธ๋งํฌ์ด ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ๋ณด๋ค๋ ๊ทธ ๋ณ์ ์์ฒด๋ฅผ ์ธ๋งํฌ์ด ๋ณ์๋ก ์ฌ์ฉํด์ P,V ํจ์์ atomicํจ์ ์ด์ฉํด์ ์ค์ค๋ก ๋ณดํธํ๋๋ก ํ๋ค.
Readers-Writers Probelm
์ด ๋ฌธ์ ์ญ์ ํ๋ก๋์ ์ปจ์๋จธ ๋ฌธ์ ์ ์ ์ฌํ๋ค. Writer๊ฐ ๊ธ์ ์ฐ๋ฉด Reader๊ฐ ๊ธ์ ์ฝ์ด๊ฐ๋ ํํ์ด๋ค. Writer๊ฐ ๊ธ์ ์ธ ๋ Reader๊ฐ ๊ธ์ ์ฝ์ ์ ์๊ณ , Reader๊ฐ ๊ธ์ ์ฝ๊ณ ์์ผ๋ฉด Writer๊ฐ ๊ธ์ ์ธ ์ ์๋ ๊ฒ์ ๋๊ฐ๋ค. ๊ทธ๋์ DB์ ๋ํ ์ ๊ทผ์์ฒด๋ ์ํธ๋ฐฐ์ ๊ฐ ์ด๋ฃจ์ด ์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ db๋ผ๋ binary ์ธ๋งํฌ์ด ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋ฐ๋ฐ ์ฐจ์ด์ ์ด ์๋ค. ์ปจ์๋จธ๋ ๋ฐ์ดํฐ๋ฅผ ์๋นํ๋ ๋ฐ๋ฉด์ Reader๋ค์ ๊ฐ์ ์ฝ๊ธฐ๋ง ํ๋ค. ์ฆ, Read-only์ด๋ค.
๋ฐ๋ผ์ Reader๋ค๋ผ๋ฆฌ๋ DB์ ๋์์ ์ ๊ทผํด๋ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ํ Reader๊ฐ ์ฝ๊ณ ์์ ๋ ๋ค๋ฅธ Reader๊ฐ ์ง์ ์ ์๋ํ๋ฉด ํ์ฉํด์ผ ํ๋ค.
Reader๋ค ์ฌ์ด์๋ ๋์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฐ, ๊ทธ๋ ์ค์ผ์ค๋ง์ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํ ์ ์๋ค.
B. Reader๋ค์ด ๊ธ์ ์ฝ๊ณ ์๋๋ฐ Writer๊ฐ ๊ธ์ ์ฐ๋ ค๊ณ ํ๋ค๋ฉด ๋ ์ด์์ Reader๊ฐ ์ง์ ์ ํ์ง ๋ชป ํ๊ฒ ๋ง๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๊ณ ์๋ Reader๋ค์ด ๋ชจ๋ ๋น ์ ธ๋๊ฐ๋ฉด Writer๊ฐ ๊ธ์ ์ฐ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ฐฉ๋ฒ.
A. Writer๊ฐ ์์ Reader๋ค์ด ๋ค ์ฝ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค ํ๋๋ผ๋ ์๋ก์ด Reader๊ฐ ์ง์ ์ ์๋ํ๋ฉด ๋ค์ด๊ฐ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ Reader๊ฐ ๋น ์ ธ๋๊ฐ๊ณ ๋๋ฉด Writer๊ฐ ๊ธ์ ์ฐ๊ฒ ํ๋ ๋ฐฉ๋ฒ.
์ด ์ค ์ฐ๋ฆฌ๋ A ๋ฐฉ๋ฒ์ ์ดํด๋ณผ ๊ฒ์ด๋ค.
Writer๋ db ๊ฐ์ด 1์ด๋ฉด ๋ค์ด๊ฐ ์ ์๊ธฐ ๋๋ฌธ์, Reader๊ฐ ํ ๋ช
์ด๋ผ๋ ์ฝ๊ณ ์์ผ๋ฉด db๊ฐ์ 0์ผ๋ก ๋ง๋ค์ด์ ๋ชป ๋ค์ด๊ฐ๊ฒ ํด์ผ ํ๋ค. ๋ฐ๋ผ์ ์ฒ์ ๋ค์ด๊ฐ๋ Reader๋ P(db)๋ฅผ ํธ์ถํด์ db๊ฐ์ 0์ผ๋ก ๋ง๋ค์ด์ค๋ค. ๊ทธ ๋ค๋ก Writer๋ P(db)๋ฅผ ํธ์ถํด๋ db๊ฐ 0์ด๋ผ์ ๋ค์ด๊ฐ ์๊ฐ ์๋ค.
๊ทธ๋ฐ๋ฐ ๋ ๋ฒ์งธ ๋ค์ด๊ฐ๋ Reader๋ ๊ตณ์ด P(db)๋ฅผ ํธ์ถํ์ง ์์๋ ๋๋ค. ์ด์งํผ Writer๋ ๋ชป ๋ค์ด์ค๊ณ ์์ผ๋๊น.
๊ทธ๋ฆฌ๊ณ ์ ์ผ ๋ง์ง๋ง์ ๋์ค๋ Reader๊ฐ V(db)๋ฅผ ํธ์ถํด์ db๊ฐ์ 1๋ก ๋ฐ๊พธ์ด์ค๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ด๊ฐ ์ฒซ ๋ฒ์งธ Reader์ธ์ง ๋๋ ๋ง์ง๋ง Reader์ธ์ง๋ ์ด๋ป๊ฒ ์ ์ ์์๊น? ํ์ฌ ์ฝ๊ณ ์๋ Reader์ ์๋ฅผ Countํ๋ฉด ๋๋ค. readcount๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํด์ ํ์ฌ ๊ธ์ ์ฝ๊ณ ์๋ Reader์ ์๋ฅผ ํ์ ํ๋ค. ๊ธ์ ์ฝ์ ๋ +1 ์ํค๊ณ ๋ค ์ฝ๊ณ ๋น ์ ธ๋์ฌ ๋ -1์ํจ๋ค.
๊ทธ๋ฌ๋ฉด readcount๋ผ๋ ๋ณ์๋ Reader๋ค ์ฌ์ด์ ๊ณต์ ๋ณ์๊ฐ ๋๋ ์ ์ด๋ค. ๋ฐ๋ผ์ readcount ๋ณ์๋ ๋ณดํธ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค. readcount๋ฅผ ๋ณดํธํ๊ธฐ ์ํด mutex ์ธ๋งํฌ์ด ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
์ ๋ฆฌํ์๋ฉด Writer์ Reader ์ฌ์ด์ ์ํธ ๋ฐฐ์ ๋ฅผ ์์ผ์ฃผ๋ db ๋ณ์, Reader๋ค ์ฌ์ด์ ๊ณต์ ๋๋ ๋ณ์ readcount, ๊ทธ๋ฌํ readcount๋ฅผ ๋ณดํธํ๊ธฐ ์ํ mutex ๋ณ์ ์ด๋ ๊ฒ 2๊ฐ์ ์ธ๋งํฌ์ด ๋ณ์์, 1๊ฐ์ int ๋ณ์๊ฐ ์๋ค.
Writer๋ writeํ๊ธฐ ์ ์ ํ์ฌ ์ฝ๊ณ ์๋ ๋ ์๊ฐ ํ ๋ช ์ด๋ผ๋ ์๋์ง๋ง ํ์ ํ๋ฉด ๋๋ฏ๋ก P(db)๋ฅผ ํธ์ถํ๊ณ ๋น ์ ธ๋์ฌ ๋ V(db)๋ฅผ ํธ์ถํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ Reader๋ readcount ์๋ ์ ๊ทผํด์ผ ํ๊ณ ์ดํ Writer๊ฐ ๊ธ์ ์ฐ๊ณ ์๋์ง ํ์ธํด์ผ ํ๋ค.
P(mutex)๋ฅผ ํธ์ถํด์ readcount์ ์ ๊ทผํ๋ค. ๊ทธ๋ฆฌ๊ณ readcount ๊ฐ์ 1 ์ฆ๊ฐ์ํจ๋ค. ๊ทธ๋ readcount๊ฐ์ด 1์ด๋ผ๋ฉด ๋ณธ์ธ์ด ์ฒ์ ๋ค์ด์จ Reader๋ผ๋ ๋ป์ด๋ฏ๋ก P(db)๋ฅผ ํธ์ถํด์ Reader๊ฐ ์๋ค๋ ๊ฒ์ Writer์๊ฒ ์๋ฆฐ๋ค.
๋ง์ฝ readcount๊ฐ 2 ์ด์์ด๋ผ๋ฉด ์ด๋ฏธ ๋ค์ด๊ฐ ๋ ์๊ฐ 1๋ช ์ด์ ์กด์ฌํ๋ค๋ ๋ป์ด๋ฏ๋ก ๊ตณ์ด P(db)๋ฅผ ํธ์ถํ ํ์๋ ์๋ค.
๊ทธ๋ฆฌ๊ณ readcount์ ๋ํ ์ ๊ทผ์ด ๋๋๋ฉด V(mutex)๋ฅผ ํธ์ถํด์ ๋ค๋ฅธ Reader๋ค๋ ๋ค์ด์ฌ ์ ์๋๋ก ํ๋ค.
๋ํ DB์ ์ ๊ทผํ๊ณ ๋์๋ P(mutex)๋ฅผ ํธ์ถํด์ ๋ค์ readcount์ ๋ํ ์ ๊ทผ ๊ถํ์ ์ป๋๋ค. readcount ๊ฐ์ 1 ๊ฐ์์ํค๊ณ ๊ทธ๋์ readcount ๊ฐ์ด 0์ด๋ผ๋ฉด ์ด์ ์์๋ ๋ ์ด์ Reader๊ฐ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ๋ณธ์ธ์ด ๋ง์ง๋ง Reader๊ฐ ๋๋ค. ๋ฐ๋ผ์ V(db)๋ฅผ ํธ์ถํ์ฌ Writer๊ฐ DB์ ์ ๊ทผํ ์ ์๋๋ก ํด์ค๋ค.
P(mutex), V(mutex)๋ฅผ ํตํด readcount์ ๋ํ ์ ๊ทผ์ ๋๊ธฐํ ํ์ง ์์ผ๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น?
Reader ๋ ๋ช
์ด ๋์์ readcount์ ์ ๊ทผํด์ ๊ฐ์ ์ฆ๊ฐ์ํค๋ฉด readcount๊ฐ 2๊ฐ ๋๋ค.
๊ทธ๋ฌ๋ฉด readcount๊ฐ 2์ด๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ P(db)๋ฅผ ํธ์ถํ์ง ์๊ณ ๊ทธ๋ฅ ๋ค์ด๊ฐ๋ฒ๋ฆฌ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
๋๋ ๋ด๊ฐ readcount๋ฅผ ์ฆ๊ฐ์ํค๋ ๋์ ๋ค๋ฅธ Reader๊ฐ readcount๋ฅผ ๊ฐ์์์ผ์ ์๋ชป๋ readcount ๊ฐ์ ์ฝ์ ์๋ ์๋ค.
Dining-Philosophers Problem
์ฌ๋ฐ๋ ๋ฌธ์ ๊ฐ ํ๋ ์๋ค. ์ํ์ ์ฒ ํ์๋ค์ด ๋๋ฌ ์์์๊ณ ์์ ์ ์๊ฐ ํ๋์ฉ ๋์ฌ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๊ฐ๋ฝ์ ์ฒ ํ์๋ค ์ฌ์ด์ฌ์ด์ ํ๋์ฉ๋ง ๋์ฌ ์๋ค.
์ฒ ํ์๋ค์ ์๊ฐํ๋ค๊ฐ (์ฒ ํ์๋๊น ํ๋ฃจ์ข
์ผ ์๊ฐ๋ง ํ๋๋ด,,,) ๋ฐฐ๊ฐ ๊ณ ํ๋ฉด ์์ชฝ์ ์๋ ์ ๊ฐ๋ฝ์ ํ๋์ฉ ๋ค์ด์ ๋ ์ ๊ฐ๋ฝ์ ๋ชจ๋ ํ๋ณดํ๋ฉด ๋ฐฅ์ ๋จน๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฅ์ ๋ค ๋จน์ผ๋ฉด ์์ชฝ์ ๋ค์ ์ ๊ฐ๋ฝ์ ๋ด๋ ค๋๊ณ ๋ค์ ์๊ฐ ๋ชจ๋๋ก ๋ค์ด๊ฐ๋ค.
์ฌ๊ธฐ์ ์ฌ์ด์ ๋์ฌ์๋ ์ ๊ฐ๋ฝ์ ์ ๊ฐ๋ฝ ์์ชฝ์ ๋ ์ฒ ํ์ ์ฌ์ด์ ๊ณต์ ๋ณ์๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
=> ๋ ์ฒ ํ์๊ฐ ๋์์ ์ ๊ฐ๋ฝ์ ๋๋ ๊ฒ์ ๋ง์์ผ ํ๋ค. ์ฆ, ์ ๊ฐ๋ฝ์ ๋๋ ํ์๊ฐ ๋๊ธฐํ๊ฐ ๋์ด์ผ ํ๋ค.
์ ๊ฐ๋ฝ์ ๋ค๊ธฐ ์ ์ ๋ค๋ฅธ ์ฒ ํ์๊ฐ ์ ๊ฐ๋ฝ์ ๋ค๊ณ ์๋ ํ์ธํ๋ ๊ณผ์ ์ด ํ์
์ ๊ฐ๋ฝ ์์ฒด๋ฅผ ์ธ๋งํฌ์ด ๋ณ์๋ก ๋๊ณ ๋ค๊ธฐ ์ P๋ฅผ ํธ์ถํ๊ณ ๋ค ์ฌ์ฉํ๊ณ ๋๋ฉด V๋ฅผ ํธ์ถํด์ ๋ค๋ฅธ ์ฒ ํ์๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
์์ชฝ ์ ๊ฐ๋ฝ์ ๋ชจ๋ ๋ค์ด์ผ ๋ฐฅ์ ๋จน์ ์ ์๊ธฐ ๋๋ฌธ์ P(chopstick[i]), P(chopstick[i+1])์ ํธ์ถํด์ ๋ ๋ค ํ์ถํ๋ฉด ๋ฐฅ์ ๋จน๊ธฐ ์์ํ๋ค.
์ด๋ฌํ ๋ฐฉ๋ฒ์ Deadlock์ ์ ๋ฐํ๊ธฐ์ ํด๊ฒฐ์ฑ
์ด ๋ ์ ์๋ค.
๋ชจ๋ ์ฒ ํ์๊ฐ ๋์์ ๋ฐฐ๊ฐ ๊ณ ํ์ ๋์์ ์์ ์ ์ผ์ชฝ ์ ๊ฐ๋ฝ์ ๋ค์๋ค๊ณ ํ์. ๊ทธ๋ผ P(chopstick[i])๋ ๋ชจ๋ ํต๊ณผํ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๋ชจ๋ ์ ๊ฐ๋ฝ์ ํ ์ชฝ์ฉ ๋ค๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ๋ถ P(chopstick[(i+1)%5]์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
=> ์๋ฌด๋ ๋ฐฅ์ ๋ชป ๋จน๊ณ ๋๊ธฐ๋ง ํ๊ฒ ๋๋ค.
๋ชจ๋๊ฐ ์ผ์ชฝ ์ ๊ฐ๋ฝ๋ง ๊ฐ์ง๊ณ ์๋ค๋ฉด ๋ชจ๋๊ฐ ์๊ธฐ์ ์ค๋ฅธ์ชฝ ์ฌ๋์ ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
=> ์ด๋ ๊ฒ ๊ณต์ ์์์ ๋ํด ์ํ ๋๊ธฐ๊ฐ ์ด๋ฃจ์ด์ง๋ ์ํฉ์ Deadlock์ด๋ผ๊ณ ํจ.
Deadlock & Startvation
Deadlock์ ๊ต์ฐฉ์ํ๋ก ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋ฌดํ ๋๊ธฐ๋ฅผ ํ๊ณ ์๋๋ฐ,
์ด๋ฌํ ๋ฌดํ ๋๊ธฐ๊ฐ ํ์ฌ ๋ฌดํ ๋๊ธฐ๋ฅผ ํ๊ณ ์๋ ํ๋ก์ธ์ค์ ์ํด์๋ง ๊นจ์ง ์ ์๋ ์ํฉ.
=> ์ฆ, ๋ฌดํ ๋๊ธฐ๊ฐ ํ๋ฆด ์ ์๋ ์ํ์ด๋ค.
์ด๋ฌํ ํ์์ Startvation ํ์๊ณผ ์ ์ฌํ๋ค.
์๋ฅผ ๋ค์ด, Block/Wakeup Semaphore์์ Sleep๋ ํ๋ก์ธ์ค๋ค์ List์ ๋งค๋ฌ์๋๋ค๊ณ ํ๋๋ฐ, wakeup์ด ๋ฐ์ํ์ ๋ ์ ์ผ ๋ฆ๊ฒ ๋ค์ด์จ ํ๋ก์ธ์ค๋ฅผ ๊นจ์ฐ๊ฒ ๋๋ฉด(Last In First Out) ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๊ณ์ ๋ค์ด์ค๋ฉด ์ฒ์ ๋ค์ด์จ ํ๋ก์ธ์ค๋ ๊นจ์ด๋์ง ๋ชปํ๊ฒ ๋๋ค.
Startvation ์ํฉ์ ๊ทธ๋๋ ์ง๋๋ฅผ ๋ชป ๋๊ฐ๋ ๊ฒ์ ์๋์ง๋ง, ํน์ ํ๋ก์ธ์ค์ ํฌ์์ผ๋ก ์ง๋๊ฐ ๋๊ฐ๊ณ ์๋ ๊ฒ์ด๊ณ
Deadlock์ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์ง๋๋ฅผ ๋๊ฐ์ง ๋ชปํ๊ณ ๋๊ธฐํ๋ ์ํฉ
Remedies of Deadlock (ํด๊ฒฐ์ฑ )
์์ ์์ฌํ๋ ์ฒ ํ์ ์์์ Deadlock์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ด๋ค ๊ฒ๋ค์ด ์์๊น?
1. ์์ชฝ์ ์๋ ์ ๊ฐ๋ฝ์ ํ๋์ฉ ๋๋๊น Deadlock์ด ๋ฐ์ํ๋ค.
๋ ์ ๊ฐ๋ฝ์ ๋ฌถ์ด์ ๋ ๋ค ๋ค ์ ์์ผ๋ฉด ๋ค๊ณ , ์๋๋ฉด ๋ ๋ค ๋ด๋ ค๋๋๋ค. (All or Nothing)
2. ํ์๋ฒ์งธ ์์ ์ฒ ํ์๋ ์ผ์ชฝ์ ๋จผ์ ๋ค๊ณ ๋์ ์ค๋ฅธ์ชฝ์ ๋ค๊ฒ ๋ง๋ ๋ค.
๋ฐ๋๋ก ์ง์๋ฒ์งธ์ ์์ ์ฒ ํ์๋ ์ค๋ฅธ์ชฝ์ ๋จผ์ ๋ค๊ณ ๋์ ์ผ์ชฝ์ ๋ค๊ฒ ๋ง๋ ๋ค.
3. ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก ์ต๋ 4๋ช ์ ์ฒ ํ์๋ง ์ํ์ ์ํ์.
์ ๊ฐ๋ฝ์ 5๊ฐ ๋ฐ ์ฌ๋์ 4๋ช ์ด๋ฏ๋ก Deadlock์ด ๋ฐ์ํ ์๊ฐ ์๋ค.
Problems of Semaphore
์์ Problem๋ค์ Semaphore๋ฅผ ์ด์ฉํด์ ํด๊ฒฐํ์๋๋ฐ ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฌ๋ฌ ๋จ์ ๋ค์ด ์๋ค.
1. ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ฉํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
2. ๊ทธ๋ฆฌ๊ณ ์ฝ๋ฉ์ ํ๋ค๊ณ ํ๋๋ผ๋, ์ฌ๋ฐ๋ฅด๋ค๋ ๊ฒ์ ์ฆ๋ช
ํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต๋ค.
๋ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํ๋ ์ํฉ์ด ๋ฐ์ํด์ผ๋ง ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ค.
=> ์ด๋ฐ ์ํฉ์ด ํญ์ ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋ค.
=> ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น
์ด ์ด๋ ต๋ค.
3. ํ์
ํด์ ์ฝ๋ฉ์ ํ๋ ๊ฒฝ์ฐ์ ๋ด๊ฐ P๋ฅผ ํธ์ถํ ํ
๋ ๋๊ฐ V๋ฅผ ํธ์ถํด ์ด๋ฐ ํ์๋ฅผ ๋ณด๊ณ ์ฝ๋ฉํ๋ ๊ฒ์ด ์ด๋ ต๋ค.
4. ํ ๋ฒ ์๋ชป ์ฌ์ฉํ๋ฉด ์ ์ฒด ์์คํ
์ด ๋ง๋น๋๋ค.
=> ์ด๋ก ์ ์ผ๋ก๋ ๊ฐ๋ฅํ์ง๋ง ์ ํํ๊ฒ ์ฌ์ฉํด์ ํ๋ก๊ทธ๋๋ฐ ํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
Monitors
์ฐ๋ฆฌ๊ฐ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ High-level language์์ ์ ๊ณตํ๋ ๋๊ธฐํ ํด์ธ Monitor๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ชจ๋ํฐ๋ C๋๋ java์ Class์ ๊ต์ฅํ ์ ์ฌํ๋ค.
๊ณต์ ๋ณ์์ ํด๋นํ๋ private data๊ฐ ์๊ณ private data์ ์ ๊ทผ์ public methods๋ฅผ ํตํด์ ํ๋ค.
๊ทผ๋ฐ ์ด๊ฒ ์ด๋ป๊ฒ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๋ ๊ฑฐ์ง?
๋ชจ๋ํฐ๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธธ๋ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊น.
๋ชจ๋ํฐ ์์์ ํ์ฑํ ๋์ด ๋์ํ๋ ํ๋ก์ธ์ค๋ ํ๋ ๋ฐ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฅํ๋ค.
=> public methods๋ฅผ ํธ์ถํด์ ์คํํ๋ ํ๋ก์ธ์ค๋ ํ๋ ๋ฐ์ ์์์ ๋ณด์ฅํ๋ค๋ ๋ป. ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ public methods๋ฅผ ๋์์ ํธ์ถํ๋ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ๋๋? ๊ทธ๊ฒ์ ๋ง์์ฃผ๊ฒ ๋ค๋ ๊ฒ์.
์ด๋ป๊ฒ?
entry queue๋ฅผ ์ ๊ณตํด์ ๋๊ตฐ๊ฐ๊ฐ public methods๋ฅผ ์คํํ๋ ๋์ค์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ public methods๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด entry queue์ ๋งค๋ฌ๋ฆฌ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ activeํ ํ๋ก์ธ์ค๊ฐ ๋ ์ด์ ์กด์ฌํ์ง ์์ผ๋ฉด ํ์์ ๋๊ธฐํ๊ณ ์๋ ํ๋ก์ธ์ค ํ๋๋ฅผ ๋ชจ๋ํฐ๋ก ๋ฃ์ด์ public methods๋ฅผ ์คํํ ์ ์๋๋ก ํด์ค๋ค.
=> private data์ ๋ํด์ ํ ํ๋ก์ธ์ค๋ง ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ ๋ณด์ฅํด์ค๋ค.
๋ชจ๋ํฐ๋ฅผ ๊ฐ์ง๊ณ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ๋์์ธ์ ํ๋ค๋ณด๋ฉด ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋ชจ๋ํฐ ๋ด๋ถ์ public method๋ฅผ ํธ์ถํด์ ์ผ์ ํ๋ ํ๋ก์ธ์ค๊ฐ method์์์ ์ฝ๋๋ฅผ ์คํํ๋ ๋์ค์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ง ์์์ ๋ ์ด์ ์ฝ๋๋ฅผ ์ํํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋๋ก ํด์ฃผ๋ ํ๋ก์ธ์ค๋ ์์ ์ด ์๋๋ผ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ผ๋ฉด? Bounded buffer problem์์ consumeํ๋ public method๋ฅผ ๋ง๋ค์๋ค๊ณ ์น์. ์ด๋ ์ปจ์๋จธ๋ full buf๊ฐ 0์ด๋ฉด wait๋ฅผ ํด์ผ ํ๋ค. ์ปจ์๋จธ๋ CPU๋ฅผ ์ฐ๋ฉด์ busy waiting์ ํ๊ณ ์๋ค. ๊ทธ๋ฐ๋ฐ ๋ชจ๋ํฐ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ง์ ํ๋ ๊ฒ์ ๋ง๋๋ค. full buf๋ฅผ 1 ์ฆ๊ฐ์์ผ ์ฃผ๋ ๊ฒ์ ํ๋ก๋์์ธ๋ฐ, ์ปจ์๋จธ ํ๋ก์ธ์ค๊ฐ consume์ ํธ์ถํด์ activeํ๊ฒ ๋์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํ๋ก๋์๊ฐ produce ๋ฉ์๋๋ฅผ ์ํํ ์๊ฐ ์์.
=> ์ด๋ฐ ์ผ์ด ๋ฐ์ํด์๋ ์ ๋จ.
=> ๊ทธ๋์ ๋ชจ๋ํฐ๋ ํน๋ณํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ชจ๋ํฐ ์ธ๋ถ๊ฐ ์๋ ๋ด๋ถ์์ ๋๊ธฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. busy waiting ํ์ง ์๊ณ sleep์ ํ๋๋ก ๋ง๋ฆ. sleep์ ํ๊ฒ ๋๋ฉด ๋ ์ด์ activeํ ํ๋ก์ธ์ค๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ํฐ ์์ผ๋ก ๋ค์ด์ฌ ์ ์๊ฒ ๋๋ค.
๋ชจ๋ํฐ ๋ด๋ถ์์ ์กฐ๊ฑด ๋ณ์๋ฅผ ์ ์ธํ๊ฒ ๋๋ฉด ๊ทธ ๋ณ์์์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ๋ฒ๊ณผ ๊นจ์ด๋๋ ๋ฐฉ๋ฒ์ ์ ๊ณต.
x.wait()๋ฅผ ํธ์ถํ๋ฉด, ์ ๋๋ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ x์์ sleepํ๋ฉด์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ค๋ ๋ป.
entry queue์ ์๋ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์์ x ์กฐ๊ฑด์ ๋ง์กฑ์์ผ ์ฃผ๊ฒ ๋๋ฉด x์์ ์ ๋ค์ด ์๋ ํ๋ก์ธ์ค๋ฅผ ๊นจ์์ค์ผ ํ๋ค. ๊ทธ๋์ x.signal()์ ํธ์ถํด์ ํด๋น ํ๋ก์ธ์ค๋ฅผ ๊นจ์์ค๋ค.
์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํด ๋ ์ด์ ์ฝ๋๋ฅผ ์ํํ ์ ์๋ ํ๋ก์ธ์ค๋ค์ wait๋ฅผ ํธ์ถํ๊ณ condition ๋ณ์ ๋ด์์ ๋๊ธฐํ๋ค.
๊ทธ๋ฌ๋ฉด ๋ชจ๋ํฐ๋ entry queue์์ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ํฐ ์์ผ๋ก ๋ค์ด์ค๊ฒ ํด์ public method๋ฅผ ์ํํ๋๋ก ํ๋ค. ๊ทธ๋ฌ๋ค ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋์ด ๋๊ธฐํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ๊นจ์ด๋ ์กฐ๊ฑด์ด ๋๋ฉด, signal์ ํตํด ๊นจ์ด๋ค.
๋ชจ๋ํฐ๋ฅผ ์ด์ฉํด์ ์ด๋ป๊ฒ "์์ฌํ๋ ์ฒ ํ์ ๋ฌธ์ "๋ฅผ ํด๊ฒฐํ ๊น??
์ ๊ฐ๋ฝ์ ํ ์ชฝ์ฉ ๋ค์ด์ Deadlock ์ํฉ์ด ๋ฐ์๋์์ผ๋ฏ๋ก ๊ตณ์ด ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์ ๊ฐ๋ฝ์ผ๋ก ๋๋์ง ์๊ณ ๋ฌถ์ด์ State๋ก ํํํ๋ค. hungry๋ฉด ๋จน๊ณ ์ ํ๋ ์์ง๊ฐ ์๋ ์ํ, thinking์ ์์ฌ๋ฅผ ํ๊ณ ์์ง ์์ ์ํ, eating์ ์์ฌ๋ฅผ ํ๊ณ ์๋ ์ํ. ์ฆ, eating์ด๋ฉด ์์ชฝ ์ ๊ฐ๋ฝ์ ๋ค ๋ค๊ณ ์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ด๋ฌํ State๊ฐ ๊ณต์ ๋ณ์๊ฐ ๋๋ ์ ์ด๋ค.
๋ํ ๋จน๊ณ ์ ํ๋ ์์ง๋ ์์ง๋ง ์ ์ ์ฌ๋ ์ค ํ ๋ช ์ด์์ด ์ด๋ฏธ ๋จน๊ณ ์์ด์ ๋จน์ง ๋ชปํ๋ ์ํฉ์๋ ๊ธฐ๋ค๋ฆด ์ ์๋๋ก self๋ผ๋ ์กฐ๊ฑด ๋ณ์๋ฅผ ์ ์ธํ๋ค.
State๋ผ๋ ๊ณต์ ๋ณ์๋ init, pickup, putdown, test ๋ผ๋ public methods๋ฅผ ์ด์ฉํด์ ์ ๊ทผํ ์ ์๋ค. ๊ทธ๋ฌ๋ init์ ์ด๊ธฐํ์ฉ์ด๊ณ test๋ pickup, putdown ๋ด๋ถ์์ ํธ์ถ๋๋ ํจ์์ด๋ฏ๋ก ์ค์ง์ ์ผ๋ก ํธ์ถํ ์ ์๋ methods๋ pickup๊ณผ putdown์ด๋ค.
์ฒ ํ์๊ฐ ๋ฐฅ์ ๋จน์ผ๋ ค๊ณ ์๋ํ๋ ๊ฒฝ์ฐ pickup์ ํธ์ถํ๋ค. pickup์์๋ state๋ฅผ hungry๋ก ๋ฐ๊พธ๊ณ , ํ์ฌ ์ ์์ ์๋ ์ฒ ํ์ ์ค ์๋ฌด๋ ๋ฐฅ์ ๋จน๊ณ ์๋ ์ฌ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด test๋ฅผ ํธ์ถํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ ๋ชจ๋ ๋ฐฅ์ ๋จน๊ณ ์์ง ์์ ๊ฒฝ์ฐ์ ๋ฐฅ์ ๋จน์ ์ ์๋ค๋ ๋ป์ด๋ฏ๋ก state๋ฅผ eating์ผ๋ก ๋ณ๊ฒฝํ๋ค. ๊ทธ๋ฆฌ๊ณ signal์ ๋ณด๋ด์ i๋ฅผ ๊นจ์์ค๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ์ค pickup์์ test๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ์๋ i๊ฐ ์ง์ test๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ i๋ ๊นจ์ด์๋ ์ํ์ด๋ค. ๊ทธ๋์ signal์ ๋ณด๋ด๋ ์๋ฌด๋ฐ ์ผ๋ ์ผ์ด๋์ง ์๋๋ค.
ํ์ง๋ง test method๋ putdown์์๋ ํธ์ถ๋๊ธฐ ๋๋ฌธ์ signal์ ๋ณด๋ด๋ ์ฝ๋๋ฅผ ๋ฃ์ ๊ฒ์ด๋ค.
๋ง์ฝ ๋ณ๋์ test ํจ์๋ฅผ ๋ง๋ค์ง ์๊ณ pickup๊ณผ putdown ๋ด๋ถ์ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด pickup ๋ด๋ถ์๋ signal์ ๋ณด๋ด๋ ๋ถ๋ถ์ ์์ฑํ์ง ์์๋ ๋์ ๊ฒ!
putdown ํจ์๋ ์ด์ ๋๋ ๋ฐฅ์ ๋ค ๋จน์์ผ๋ ์ ๊ฐ๋ฝ์ ๋ด๋ ค๋๊ณ state๋ฅผ thinking ์ํ๋ก ๋ฐ๊พผ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ก ์ธํด ๋ฐฅ์ ๋จน์ง ๋ชปํ๊ณ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ฌ๋์ด ์์ ์ ์์ผ๋ฏ๋ก ์ ์์ฌ๋์ ๋ํด test ํจ์๋ฅผ ํธ์ถํด์ค๋ค.
์กฐ๊ฑด์ด ๋ง์กฑ๋๋ฉด signal์ ํตํด ํด๋น ์ฌ๋์ ๊นจ์ธ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ฌ๊ธฐ์ ์๋ฌธ. putdown ํจ์์์ test๋ฅผ ํธ์ถํด์ ๋ค๋ฅธ ์ฌ๋์ด ๊นจ๊ฒ ๋๋ฉด activeํ ํ๋ก์ธ์ค๊ฐ 2๊ฐ๊ฐ ๋๋ ๊ฒ์ด ์๋๊ฐ?
๊นจ์ด๋ ํ๋ก์ธ์ค๋ ์๋ฌด๊ฒ๋ ํ์ง ์๊ณ pickup์ ๋ฐ๋ก ๋๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ eat()๋ฅผ ์ํํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ activeํ ํ๋ก์ธ์ค๋ ์ฌ์ ํ ๋ ํ๋ ๋ฟ์ด๋ค. ๋ง์ฝ ๊ทธ ๊นจ์ด๋ ํ๋ก์ธ์ค๊ฐ public method๋ฅผ ํธ์ถํ๋ ค๊ณ ํ๋ฉด ๋ด๊ฐ activeํ๊ธฐ ๋๋ฌธ์ entry queue์ ๋งค๋ฌ๋ฆฌ๊ฒ ๋ ๊ฒ.
wait() ์ฝ๋๋ฅผ method์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์์ฑํ ์ด์ ๋ ์ด๋ฌํ ์ด์ ๋๋ฌธ์ด๋ค. ๊ผญ wait() ์ฝ๋๊ฐ method์ ๋ง์ง๋ง ๋ถ๋ถ์ด์ด์ผ ํ๋ ๊ฒ์ ์๋์ง๋ง ๊นจ์ด๋ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ณ์์ ์ ๊ทผํ๋ ์ผ์ ์์ด์ผ ํ๋ค.
=> ๋ชจ๋ํฐ๋ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด์ง ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ๋ ๊ฒ์ ์๋. ํด๊ฒฐ์ ๊ฐ๋ฐ์๊ฐ ํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ํด์ ๋ชจ๋ํฐ๋ฅผ ์ด์ฉํด์ Dining philosoper Problem์ ํด๊ฒฐํ๋ค.
์ฒ์์ ๋ชจ๋ํฐ๋ง ๋จธ๋ฆฌ๋ฅผ ์ ์จ์ ์ฝ๋ฉํด ๋์ผ๋ฉด ๋์ค์๋ pickup๊ณผ putdown์ ํธ์ถํ๋ ๊ฒ๋ง์ผ๋ก ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฒ ๋๋ค.
์ด์ฒ๋ผ Programming Language ์ฐจ์์์ ๋๊ธฐํ ํด์ ์ ๊ณตํด์ฃผ๋ฉด ๋ฌธ์ ๋ฅผ ํจ์ฌ ๋ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค. ์ฝ๋ ๋ด์ ์ด๋ ํ ์ธ๋งํฌ์ด ๋ณ์๋ ์ฌ์ฉํ์ง ์์๋๋ฐ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ํด๊ฒฐ์ด ๋์๋ค.
=> ํ๋ก๊ทธ๋๋จธ ์ ์ฅ์์ ํจ์ฌ ํธํ๋ค.
Monitor Implementation
๋ชจ๋ํฐ์์ signal์ด ๋ฐ์ํ๋ฉด ๋ชจ๋ํฐ ๋ด๋ถ์ wait๋ฅผ ํธ์ถํ๊ณ ์ ๋ค์ด ์๋ ํ๋ก์ธ์ค ์ค ํ๋๋ฅผ ๊นจ์์ผ ํ๋๋ฐ, ํน์ ํ๋ก์ธ์ค๋ฅผ ์ง์ ํด์ ๊นจ์ฐ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
1. wait ํธ์ถ์์ ์ฐ์ ์์๋ฅผ ๋ํ๋ด๋ integer๊ฐ C๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๊ทธ๋ฌ๋ฉด ๋์ค์ signal์ด ๋ฐ์ํ๋ฉด ์ด ์ฐ์ ์์ ๊ฐ์ด ์ ์ผ ์์ ํ๋ก์ธ์ค๋ฅผ ๊นจ์ฐ๊ฒ ๋๋ค.
2. ์์์์ ์์ฌํ๋ ์ฒ ํ์ ๋ฌธ์ ํด๊ฒฐ๋ฒ ์ฒ๋ผ, ํ๋ก์ธ์ค๋ง๋ค ๋๊ธฐํ๋ ๊ณต๊ฐ(์กฐ๊ฑด ๋ณ์)์ ๋ณ๋๋ก ๋ง๋ จํด์ ํด๋น ํ๋ก์ธ์ค๋ฅผ ๊นจ์ด๋ค.
๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ชจ๋ํฐ๋ฅผ ์ฌ์ฉํ ๋ 2๊ฐ์ง ์กฐ๊ฑด๋ง ๋ง์กฑ๋๋ฉด ์ฌ๋ฐ๋ฅธ ํด๊ฒฐ์ฑ
์ด๋ผ๋ ๊ฒ์ด ์ฆ๋ช
์ด ๋์ด ์๋ค.
๊ทธ๋ผ ์ด 2๊ฐ์ง ์กฐ๊ฑด์ ๋ญ๊น?
1. function์ ์ฌ๋ฐ๋ฅธ ์์๋ก ํธ์ถํ๋๋ก ํด๋ผ.
์์ ์์์๋ pickup์ ๋จผ์ ํธ์ถํ๊ณ putdown์ ํธ์ถํด์ผ ํ๋ค. putdown์ ๋จผ์ ํธ์ถํ๋ ์ผ์ด ์๋๋ก ํ๋ก๊ทธ๋๋จธ๋ ์ฝ๋ฉ์ ํด์ผ ํ๋ค.
2. ๋ชจ๋ํฐ์ private ๋ณ์๋ค์ ๋ํ ์ ๊ทผ์ public method๋ฅผ ํตํด์๋ง ์ ๊ทผํ๋๋ก ํด๋ผ. ์ฆ, ์ง์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํด๋ผ.
๋ชจ๋ํฐ๋ ๊ฐ์ฒด ์งํฅ language๊ฐ ์๋๊ธฐ ๋๋ฌธ์ private ๋ณ์์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ์ ๋ง์์ฃผ์ง ์๋๋ค.
์ธ๋งํฌ์ด ๋ณ์์ ๋ํ ์ ๊ทผ์ P,V๋ก๋ง ํด์ผ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ ์ฝ.
โป๋ณธ ๋ด์ฉ์ ํ์๋ํ๊ต ๊ฐ์์ฉ ๊ต์๋์ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํด์ ์์ฑ๋์์ต๋๋ค.
'HYU > ์ด์์ฒด์ (OS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
9. Memory Management (2) (0) | 2023.05.07 |
---|---|
8. Memory Management (1) (0) | 2023.05.02 |
5. Process Synchronization (1) (0) | 2023.03.30 |
4. CPU Scheduling (3) | 2023.03.24 |
3. Processes and Threads (0) | 2023.03.23 |