Buffer : ์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
Bounded-Buffer : ๋ฒํผ์ ํฌ๊ธฐ๊ฐ ์ ํํ๋ค
-> sircular ํํ (์์ฐ์ ์๋น์ ๋ฌธ์ )
Producer : ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด์ ์ง์ด๋ฃ๋ ์ญํ
์์ฐ์ 2๊ฐ๊ฐ ๋น์ด์๋ ๋ฒํผ์ ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋ synchronization๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์๋น์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ด ๊บผ๋ด๊ฐ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
-> ๋ฒํผ์ ๋ฝ์ ๊ฑธ์ด์ ๊บผ๋ด๊ฐ๊ณ ๋ฝ์ ํธ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
Bounded-Buffer์ด๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์ ์ :
-> ๋ฐ์ดํฐ๊ฐ ๊ฝ ์ฐฌ ์ํ์์ ์์ฐ์๊ฐ ๋์ฐฉํ๋ ๊ฒฝ์ฐ
-> ์์ฐ์๋ ๋น์ด์๋ ๋ฐ์ดํฐ์ ์๋ฅผ ์ ์งํด์ผ ํ๋ฉฐ 0๊ฐ์ผ ๊ฒฝ์ฐ ๋๊ธฐํด์ผํ๋ ์ํฉ์ด ๋๋ค.
-> ์๋น์๊ฐ ๋นผ๊ฐ์ผ๋ง ํ๋ค.
๋ฐ์ดํฐ๊ฐ ๋น์ด์๋ ์ํ์์ ์๋น์๊ฐ ๋์ฐฉํ๋๊ฒฝ์ฐ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
-> ์๋น์ ์
์ฅ์์๋ ์์์ด ๋ด์ฉ์ด ๋ค์ด์๋ ๋ฐ์ดํฐ์ด๋ค.
-> ์์ฐ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ์ค ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
semaphores ๋ณ์๊ฐ 2๊ฐ ํ์ํ๋ค.
shared data์ ์ ๊ทผํ๋ ค๋ฉด lock์ ๊ฑธ๊ณ ํธ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
-> semaphores๋ณ์๋ฅผ ํตํด lock์ ๊ฑธ๊ณ ํ ์ ์๋ค.
์์์ ๊ฐ์๋ฅผ ์นด์ดํ ํ๋ ๋ณ์๋ก semaphores๋ณ์๊ฐ ํ์ํ๋ค.
<Semaphore ๋ณ์์ ์ด์ฉ์ ์๋์ฝ๋๋ก ๋ํ๋>
lock์ ๊ฑธ๊ธฐ ์ํ ๋ณ์ : mutex = 1
๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ ๊ฐ์๋ฅผ ์ธ๊ธฐ์ํ ๋ณ์ : full
๋น์ด์๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๊ธฐ์ํ ๋ณ์ : empty
์์ฐ์ ์์
2๊ฐ์ง์ process๊ฐ ์กด์ฌํ๋ค. 1๊ฐ์ฉ ์กด์ฌํ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ๊ฐ์ reader์ Writer๊ฐ ์กด์ฌํ๋ค.
๊ณต์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ฉฐ DB๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊น?
-> ๊ณต์ ๋ฐ์ดํฐ์ธ DB๋ฅผ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํ๋ฉด ์๋๋ค.
-> lock์ ๊ฑธ์ด์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํด์ผํ๋ค.
-> ์ฐ๋ ์์
์ ๋ฌธ์ ๊ฐ ์๊ธฐ์ง๋ง ์ฝ๋ ๊ฒ์ synchoronization๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
Readers-Writers Problem์์ ํ์ด์ผ ํ ๋ฌธ์
-> ์ธ ๋๋ lock์ ๊ฑธ์ด์ผ ํ์ง๋ง ์ฝ์ ๋๋ lock์ ํ์ง ์์์ผ ํ๋ค๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค.
-> ๋๊ตฐ๊ฐ๊ฐ ์ฝ๊ณ ์์ ๋ Reader๊ฐ ๋์ฐฉํ๋ฉด '๋๋ ์ฝ์ด๋ผ' ํ์ฉํด์ฃผ์ด์ผ ํ๊ณ ๋๊ตฐ๊ฐ๊ฐ ์ฝ๊ณ ์๋๋ฐ Writer๊ฐ ๋์ฐฉํ๋ฉด ๋๊ธฐ ํด์ผํ๋ค.
-> Writer๋ ์๋ฌด๋ ์์ ๋๋ง ์ธ ์ ์๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
< Writer >
semaphores P(db)์ฐ์ฐ์ ํตํด lock์ ๊ฑธ์ด์ผ ํ๋ค.
-> ๋๊ตฐ๊ฐ๊ฐ ์ด์ฉํ๊ณ ์๋ค๋ฉด ๋๊ธฐํ๊ณ ์๋ ์ํ์ผ ๊ฒ์ด๋ค.
Reader๋ ์ฝ๊ฒ ๋ง๋ค๋ ค๋ฉด Writer์ ์ฝ๋์ ๋๊ฐ์ด ์ง๋ฉด๋๋ค.
-> ์ด๋ ๊ฒ ํ๋ฉด ๋นํจ์จ์ ์ด๋ค. (์ฝ๋ ์์
์ ๋์์ ํด๋ ๋๊ธฐ ๋๋ฌธ์ด๋ค.)
-> ์ฝ์ ๋๋ lock์ ๊ฑธ๊ธด ํด์ผํ๋ค. (Writer๊ฐ ๋์ฐฉํ์ ๋ ๋ค์ด์ฌ ์ ์๊ฒ ํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.)
-> ์ฝ๋ ์์
์ ํ ์ ์๊ฒ ํด์ผํ๋ค.
< Reader >
readcount : ๊ณต์ ๋ฐ์ดํฐ (Reader๊ฐ ์ง๊ธ ๋ช๋ช
์ด ์ฝ๊ณ ์๋์ง ๋ํ๋ด๋ ๋ณ์)
-> ๋ชจ๋ reader๋ค์ด ์ ๊ทผํ ์ ์๋ ๋ณ์
if(readcount == 1) : ๋ด๊ฐ ์ฒ์ ๋ค์ด์๋ค๋ฉด db์๋ค๊ฐ lock์ ๊ฑด๋ค
-> reader๊ฐ ๋ ๋ค์ด์๋ค๋ฉด readcount๊ฐ 1๋ณด๋ค ๋ ํฌ๊ธฐ ๋๋ฌธ์ lock์ ๊ฑธ ํ์๊ฐ ์๋ค.
readcount๋ฅผ ๋ง ์ฆ๊ฐ์ํค๋ค๋ณด๋ฉด ๋๊ฐ ์ฆ๊ฐ์์ผฐ๋๋ฐ๋ ํ๋๋ง ์ฆ๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒ์ด๋ค.
-> ์ด ๊ณต์ ๋ฐ์ดํฐ์ ๋ํด์๋ lock์ ๊ฑธ ํ์๊ฐ ์๋ค.
-> ์ด ๊ณต์ ๋ฐ์ดํฐ๋ฅผ lock์ํค๋ ๋ณ์๊ฐ mutex semaphores ๋ณ์์ด๋ค.
readcount--;, if (readcount == 0) : readcount๋ฅผ ๊ฐ์์์ผฐ๋๋ฐ ๋ง์ฝ ๋ด๊ฐ ๋ง์ง๋ง์ผ๋ก ๋๊ฐ๋ ๊ฒ์ด๋ผ๋ฉด db์ lock์ ํ์ด์ค์ผ ํ๋ค.
-> ์ฌ๊ธฐ์๋ readcount๋ผ๋ ๊ณต์ ๋ณ์์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ lock์ ๊ฑธ๊ณ ํธ๋ ์ฝ๋๊ฐ ํ์ํ๋ค.
Reader์ ๋ง์ง๋ง์ด ๋น ์ ธ๋๊ฐ์ผ๋ง Writer๋ ์์
์ ์งํ ํ ์ ์๋ค.
-> ๊ทธ๋ฌ๋ Reader๊ฐ ๊ณ์ ๋์ฐฉํ๊ฒ ๋๋ฉด Writer๋ ์ผ์ ํ์ง ๋ชปํ๊ณ starvation์ด ๋ฐ์ํ ์ ์๋ค.
Writer๋ Reader๊ฐ ์์๋๋ก ์ฒ๋ฆฌ ํ ์ ์๋๋ก ํ๋ค๊ณ ํ๋ฉด Writer๋ค์ ์ค๋ Reader๋ค์ ๊ฐ์ด ์ฝ์ ์ ์๋ ์ํฉ์์๋ ๋ถ๊ตฌํ๊ณ ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ํฉ์ด ์๊ธด๋ค.
-> Queue ์ฐ์ ์์๋ฅผ ๋๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
์๊ฐํ๊ฑฐ๋ ๋ฐฅ๋จน๊ฑฐ๋ ๋๊ฐ์ง์ ์ผ์ ํ ์ ์๋ค.
-> ๋ฐฐ๊ณ ํ์ง๋ง ์์ ์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์ ๊ฐ๋ฝ์ด๋ฅด ์ง์ด์ ๋ฐฅ์ ๋จน๋๋ค.
-> ๋ฐฐ๊ฐ ๋ถ๋ฅด๋ฉด ์ ๊ฐ๋ฝ์ ๋๊ณ ๋ฐฅ์ ๋จน๋๋ค.
-> ์ด๋ฐ์ผ์ ๋ฌดํ ๋ฐ๋ณตํ๋ค.
๋ค์๊ณผ ๊ฐ์ solution์ Deadlock ๋ฌธ์ ์ ์ด ๋ฐ์ํ ์ ์๋ค.
-> ๋์ด์ ์๋ฌด๊ฒ๋ ๋ชปํ๊ณ ๋งํ์๋ ์ํฉ
-> ์ด ์ฝ๋๊ฐ semaphores์ ์ ๋ง์ถฐ์ง ์ฝ๋๋ ์๋๋ค.
-> ์ ๋์ํ๋์ง๋ง ํ์
ํ์.
๋จน๊ฑฐ๋ ์๊ฐํ๊ฑฐ๋ ๋ ๊ฐ์ง ์ผ์ ํ๋ค.
์ ๊ฐ๋ฝ์ ๋ค๊ฑฐ๋ ๋ด๋ ค๋๋ ํจ์๊ฐ ์กด์ฌํ๋ค.
semaphore self[5] = 0 : ์ ๊ฐ๋ฝ์ ๋ค์ ์ ์๋ ๊ถํ
-> ex) semaphore self[1] = 0 : 1๋ฒ ์ฒ ํ์๋ ์ ๊ฐ๋ฝ์ ๋ค์ ์ ์๋ ๊ถํ์ด ์๋ค.
-> semaphore self[3] = 1 : 3๋ฒ ์ฒ ํ์๋ ์ ๊ฐ๋ฝ ๋๊ฐ๋ฅผ ๋ชจ๋ ์ง์ ๊ถํ์ด ์๋ค.
enum{thinking, hungry, eating} state[5] : ์ฒ ํ์์ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ณต์ ๋ณ์
< pickup(int i) >
< test (int i) >
์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์ฒ ํ์๊ฐ ๋ฐฅ์ ๋จน๊ณ ์์ง ์๊ณ ๊ทธ๋ฆฌ๊ณ ๋ณธ์ธ์ด ๋ฐฐ๊ณ ํ๋ฉด i์ฒ ํ์์ ์ํ๋ฅผ eating์ ๋ง๋ค๊ณ
-> V(self[i]) : ์ ๊ฐ๋ฝ์ ์ก์ ์ ์๋ ๊ถํ์ ์ค๋ค.
์๋ semaphore๋ณ์๋ ์์์ ๊ฐ์๋ฅผ ์ด๊น๊ฐ์ผ๋ก ํ๊ณ ์์์ ๊ฐ์๊ฐ 1์ด๊ฑฐ๋ 1์ด์์ธ๊ฐ์ ์ฃผ์ด์ผ ํ๋ค.
-> ๊ทธ๋ฌ๋ ์ด ์ฝ๋์์ ์ด์ํ ์ ์ semaphore ๋ณ์ self[]๋ 0์ ์ด๊ธฐ๊ฐ์ผ๋ก ํ๊ณ testํ๋ ๊ณผ์ ์์ ์ฃผ๋ณ ์ฒ ํ์๋ค์ด ๋ฐฅ์ ๋จน์ง ์๊ณ ๋ด๊ฐ ๋ฐฐ๊ณ ํ๋ฉด ์ ๊ฐ๋ฝ์ ์ง์ ์ ์๋ ๊ถํ์ ์ค๋ค.
-> V์ฐ์ฐ์ semaphore๋ณ์๋ฅผ 1๋ก ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
< pickup(int i) >
V(mutex) ์ฐ์ฐ์ ํตํด lock์ ํ๊ณ
-> P(self[i])์ฐ์ฐ์ ํตํด ๋ณ์๋ฅผ 0์ผ๋ก ๋ง๋ค์ด์ค๋ค.
๋ง์ฝ test์ฐ์ฐ์์ ์ข,์ฐ์์ ๋จน๊ณ ์๋ค๋ฉด if๋ฌธ์ ์ ๊ทผํ์ง ๋ชปํ๋ค.
-> ์ ๊ฐ๋ฝ์ ์ง์ ์ ์๋ ๊ถํ์ด ์๋์ฑ๋ก(self ๊ฐ์ด ์์๊ฐ ๋๊ณ blocked์ํ๊ฐ ๋๋ค.) pickup์ ๋๋๊ฒ ๋๋ค.
-> ์ธ์ ํ ์ฒ ํ์๊ฐ ์์ฌ๊ฐ ๋๋๋ฉด ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ฒ ํ์์ ๋ณ์๊ฐ์ ๋ณํ์์ผ ์ ๊ฐ๋ฝ์ ์ก์ ์ ์๋ ์ํ๋ก ๋ง๋ค ๊ฒ์ด๋ค.
< putdown(int i) >
state[i] = thinking : ์ํ๋ฅผ ๋ฐ๊พธ๊ณ
test : ์ข์ฐ์ ์๋ ์ฒ ํ์๊ฐ ์ ๊ฐ๋ฝ์ ์ง์ ์ ์๋๋ก testํจ์๋ฅผ ์คํ์ํจ๋ค.
์ดํ์ Monitor๋ผ๋ ๊ฒ์ ๋ฐฐ์ฐ๋๋ฐ ์ด ์ญ์ ํ๋ก๊ทธ๋๋จธ ์ ์ฅ์์ synchoronization๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค.
semaphores๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ค์ํ๊ฒ ๋๋ฉด ํฐ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
-> Monitor๋ผ๋ ๊ฒ์ ์ ๊ณตํ์ฌ ํ๋ก๊ทธ๋๋จธ๋ฅผ ํธํ๊ฒ ํด์ค๋ค.
semaphore๋ ํ๋ก๊ทธ๋๋จธํํ
P,V์ฐ์ฐ์ ํตํด์ ๋น๊ต์ ์ฝ๊ฒ ์ฝ๋ฉ์ ๋ง๋ค์ด์ฃผ์์ง๋ง ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ๋ฒ๊ทธ๋ฅผ ์ก๊ธฐ๊ฐ ์ฝ์ง ์๋ค.
-> ex) critical section์ ๋ค์ด๊ฐ๊ธฐ ์ ์ P์ฐ์ฐ์ ํ๊ณ ๋น ์ ธ๋์ฌ ๋ V์ฐ์ฐ์ ํด์ผํ๋๋ฐ ์ค์๋ก ๋ฐ๋๋ก ํ๋ค๋ฉด critical section์ ๋์์ ๋ค์ด๊ฐ๋ Mutual exclusion์ด ๊นจ์ง๊ฒ ๋๋ค.
-> ex) P์ฐ์ฐ์ ๋๋ฒํ๋ฉด ์ด๋ ๋๊ตฌ๋ ๋์ด์ critical section์ ๋ค์ด๊ฐ ์ ์๋ค.(Deadlock)
ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฝ๋๋ฅผ ์๋ชป ์ง๊ฒ๋๋ฉด ์ด๋์ ํ๋ ธ๋์ง ์
์ฆ์ด ์ด๋ ต๋ค.
-> ๊ทธ๋์ synchoronization์ ์ ๊ณตํ๊ธฐ ์ํด ๋์จ๊ฒ์ด Monitor!
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ฐจ์์์ synchonization๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ high-level synchronization construct๋ผ๊ณ ๋งํ ์ ์๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ณด๋ฉด ๊ฐ์ฒด๋ฅผ ์ค์ฌ์ผ๋ก ์คํผ๋ ์ด์ ๋ค์ด ์ ์๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
Monitor๋ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์ ์ด monitor๋ผ๊ณ ์ ์๋ ๋ด๋ถ์ ํ๋ก์์ ๋ฅผ ํตํด์๋ง ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผ ํ ์ ์๋ค.
๊ณต์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ฐ์์ ์๋ฌด๋ ์ ๊ทผ ํ ์ ์๋ ๊ฒ์ด ์๋๋ผ monitor์์์ ๊ณต์ ๋ฐ์ดํฐ์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ํ๋ก์์ ๋ฅผ ์ ์ํด๋๊ณ ๋ง์ฝ์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๊ฒ ๋ค ํ๋ฉด ํ๋ก์์ ๋ฅผ ํตํด ์ ๊ทผ ํ ์ ์๋๋ก ํ๋ค.
์์ฒ์ ์ผ๋ก monitor๋ด๋ถ์ ์๋ ํ๋ก์์ ๋ ๋์์ ์ฌ๋ฌ๊ฐ๊ฐ ์คํ์ด ์๋๋๋ก ํต์ ๋ฅผ ํ๋ ๊ถํ์ ์ค๋ค.
-> lock์ ๊ฑธ ํ์์์ด ๊ทธ๋ฅ ์ ๊ทผํ๋ฉด ๋๋ค.
-> ๋๋จธ์ง process๋ ์ค์ ์ ๋ค.
ํ๋ก๊ทธ๋๋จธ ์
์ฅ์์ ๋ญ๊ฐ ํธํ๋?
-> lock์ ๊ฑธ ํ์๊ฐ ์๋ค.
-> semaphore๋ ์ฐ์ฐ(P,V)์ ํตํด ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ์ฝ๋๋ฅผ ์ ์ด์ค์ผ ํ๋ค. (lock์ ๊ฑธ์ด์ฃผ๊ณ ํ์ด์ฃผ๊ณ )
Monitor๋ ๋ด๋ถ์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํด๋๊ณ ์ด ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๊ธฐ ์ํ ํ๋ก์์ ๋ค์ Monitor ๋ด๋ถ ํจ์๋ก ์ ์ํด๋๋๋ค.
semaphore์์ ์์์ ๊ฐ์๋ฅผ ์ธ๋ ๊ฒ์ด ํ์ํ๋ค.
-> Monitor์์ lock์ ๊ฑธ ํ์๋ ์์ง๋ง ์์์ด ์์ผ๋ฉด ์ ๊ทผ ํ๊ณ ์์ผ๋ฉด ์ ๊ทผ ํ ์ ์๋๋ก ํ๋ ๊ฒ์ ํ์ํ๋ค.
semaphore์ ๋น์ทํ๊ฒ ์์์ ๊ฐ์๋ฅผ ์ ์งํด์ฃผ๋ ๋ณ์๊ฐ Monitor ์กด์ฌํ๋ค.
-> 'condition' ์ด๋ผ๋ ๋ณ์!
condition์ ์ฌ๋ถ์ด ์์ด์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ค๋ฆฌ๋ ์ค์์ ๊ธฐ๋ค๋ฆฌ๋๋ก ํ์. (wait())
๋น ์ ธ๋๊ฐ ๋๋ signal์ ํตํด ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ process๊ฐ ์์ผ๋ฉด ๋น ์ ธ ๋๊ฐ ์ ์๋๋ก ํ๋ค.
์์ฐ์ ์๋น์ ๋ฌธ์ (Monitor.ver)
๊ณต์ buffer๊ฐ ๋ด๋ถ์ ์ ์๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ฐํ๊ฑฐ๋ ์๋นํ๋ ์์ ์ ํ๊ธฐ ์ํด์ Monitor๋ด๋ถ ์ฝ๋๋ฅผ ์คํํด์ผ ํ๊ณ ์์ฐ์๋ ์๋น์๋ ํ๋์ ํ๋ก์ธ์ค๋ง ๋ชจ๋ํฐ์์์๋ง ํ์ฑํ ๋๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ๋ฝ์ ํ์ง ์์๋ ์์ฐ์๊ฐ ์ ๊ทผํ๋ ๋์์ ๋๋ค๋ฅธ ์์ฐ์๊ฐ ์ ๊ทผํ์ฌ ์๊ธฐ๋ ๋ฌธ์ ์ ๋ํด์๋ ๊ณ ๋ คํ ํ์๊ฐ ์๋ค.
์์ฐ์ ์ ์ฅ์์๋ ๋น์ด์๋ buffer๊ฐ ํ์ํ๋ค. ๋ง์ฝ์ ๋น์ด์๋ ๋ฒํผ๊ฐ์๋ค๋ฉด ๊ธฐ๋ค๋ฆฌ๋ ์ค์ ์์ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๊ณ ๋น์ด์๋ ๋ฒํผ๊ฐ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ์. ๋์ด๋๋ฉด ํน์ ๋ด์ฉ์ด ๋ค์ด์๋ ๋ฒํผ๊ฐ ์์ด์ ์ ๋ค์ด ์๋ ์๋น์ ํ๋ก์ธ์ค๋ฅผ ๊บ ์์ฃผ๋ ์ฝ๋์ด๋ค.
์๋น์ ์
์ฅ์์๋ ๋ด์ฉ์ด ๋ค์ด์๋ ๋ฒํผ๊ฐ ์๋ค๋ฉด ๊ธฐ๋ค๋ฆฌ์.
-> ๋ฒํผ๊ฐ ์๋ค๋ฉด ๊บผ๋ด๊ฐ์
-> ๋น์ด์๋ ๋ฒํผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์์ฐ์ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ๋ค๋ฉด ๊นจ์์ฃผ์.
Monitor์์์ ํ๋์ ํ๋ก์ธ์ค๋ง ํ์ฑํ ๋๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง ํ๋ก์ธ์ค๋ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋ค.
Monitor ์์์ ๊ณต์ ์์์ ๊ฐ์๊ฐ ์์ด์ ๊ธฐ๋ค๋ ค์ผ ๋๋ค๋ฉด x(๋น์ด์๋ ๋ฒํผ๊ฐ ํ์),y(๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ ๋ฒํผ ํ์)์์ ๊ฐ๊ฐ ๊ธฐ๋ค๋ฆฌ์.
-> ์ค์ ์๋ ํ๋ก์ธ์ค๋ฅผ ๊บ ์์ฃผ๋ ๊ฒ์ด signal์ฐ์ฐ์ด๋ค.
[์ถ์ฒ] ๋ฐํจ๊ฒฝ ๊ต์๋ ๊ฐ์