728x90
Monitors
Monitor์์ ์คํํ ์ ์๋ ๊ฒ ์์ฒด๊ฐ Resource์ด๋ค. Spin lock๊ณผ Block์ ๋ฐฉ๋ฒ์ผ๋ก Waiting ์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. Waiting ์ Linked List๋ก ๊ตฌํ์ ํ๋ค. Monitor ์์ฒด๋ Mutual Exclusion์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค.
Monitor in Java
synchronized๋ผ๋ ํค์๋๋ฅผ ์ ๊ณตํ๋ค. ๋ฉ์๋๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ์ ํ๋ฉด ํ ๋ฒ์ ํ๋์ Thread๋ง์ด ์คํ๋ ์ ์๋ ํจ์์ธ ๊ฒ์ด๋ค. System.Threading.Monitor์ ํน์ฑ์ ์ ํด ๋ฐ์ผ๋ฉด Monitor์ ํน์ฑ์ ๊ฐ์ง ์ ์๊ฒ ๋๋ค.
Condition Variable
์ผ์ ๋ก ๋์ด. ๋ณ์๋ฅผ ์ ์ธํ๊ณ x.wait์ผ๋ก ์คํ์ ํ๋ฉด ์ผ์๊ณผ ๋์ผํ ์ํ๊ฐ ๋๋ค. Signal์ ๋ณด๋ด๋ฉด ๋ก์ ํด์ ๋ค์ ์คํํ ์ ์๊ฒ ๋๋ค. wait() signal()์ Semaphore์์ ๋ค์ด๋ดค๋ค. ๊ต์ฅํ ๋น์ทํ ์ญํ ์ ํ๋ค. ํ์ง๋ง ์์ฃผ ์ค์ํ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค. ์ฒซ ๋ฒ์งธ Process๊ฐ ๋ค์ด์ค๋๋ผ๋ wait์ ๋ง๋๋ฉด ๋ฉ์ถ๊ฒ ๋๋ค. ๋ํ ์๋ฌด๋ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ง ์์ผ๋ฉด signal์ ์คํํ์ง ์๋๋ค.
Semaphore๋ ์ฒซ ๋ฒ์งธ Process๋ถํฐ ๋ฉ์ถ๊ฒ ํ๋ ๋ฐฉ๋ฒ. S๊ฐ 0์์ ์์ํ๊ฒ ํ๋ฉด ๋๋ค.
Condition Variable
Q๊ฐ ์ฒซ ๋ฒ์งธ Process๋ผ๊ณ ํด๋ณด์. Monitor ์์ ๋ค์ด๊ฐ ์ ์๋ค. x.wait()์ ํธ์ถํ๊ฒ ๋๋ฉด ๋ฉ์ถ๊ฒ ๋๋ค. ๋ฉ์ถ๋ ์๊ฐ ๊ธฐ๋ค๋ฆฌ๋ ์น๊ตฌ๋ค์ ๋ฃ๊ฒ ํด์ค์ผ ํ๋์ง ์๋์ง๋ฅผ ์๊ฐํด๋ด์ผ ํ๋ค. ๊ธฐ๋ค๋ฆฌ๋ Process๋ค์ ์ง์ด๋ฃ์ผ ํ๋ค. ๋ง์ฝ ๊ธฐ๋ค๋ฆฌ๋ Process๋ฅผ ๋๋๊ฒ ๋๋ฉด ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋๊ฐ. ์์ํ waitํ๋ ์ํ๊ฐ ๋ ์ ์๋ค. ๊ทธ๋์ ๋ค์ Process๊ฐ ๋ค์ด์์ signal์ ๋ณด๋ด์ ๋กํ๊ฒ ํด์ค๋ค. ์ด๋ ๋ ๊ฐ์ง Process๊ฐ ์ด์์๊ธฐ ๋๋ฌธ์ ๋ ์ค ํ๋๋ฅผ ์ฌ์์ผ ํ๋ค. signal and wait์ ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ๊นจ์ฐ๊ณ ์์ ์ ๋ฉ์ถ๋ค. Signal and continue์ ๊ฒฝ์ฐ Singal๋ง ๋ณด๋ด๊ณ ์์ ์ ์คํ์ํจ๋ค. ์์๊ฐ ์ ํํ ์ดํด๋์ด์ผ ํ๋ค.
Implementation a Monitor Using Semaphore
1. Exclusive
2. wait
3. Signal
3๊ฐ์ง๋ฅผ ์ฐ๊ด๋๊ฒ ๊ตฌํ์ ํด์ผ ํ๋ค.
mutex ๋ณ์๋ mutual exclusive๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ํจ์. ์ด๊น๊ฐ์ 1์ด๋ค. ๋ง์ฝ 0์ผ๋ก ์ด๊ธฐํ๋๋ค๋ฉด ์ฒซ ๋ฒ์งธ Process๋ถํฐ ๋งํ๋ค. ๊ทธ Process๋ฅผ ๊นจ์ฐ๋ ๋ฐฉ๋ฒ์ Signal๋ฐ์ ์กด์ฌํ์ง ์๋๋ค. wait()์ ํ๊ณ signal()๋ก ๊นจ์์ค๋ค.
next์ ๋ํด์ signal์ ๋ณด๋ธ๋ค๋ ์๋ฏธ๊ฐ ์กด์ฌํ๋ค. ์ด๋ ์ฒซ ๋ฒ์งธ Process๊ฐ ๋๊ฐ๋ฉด์ mutex๋ฅผ 1๋ก ์ฆ๊ฐํ๋ ๊ฒ์ด ์๋๋ผ ํ์ฌ next์ ๋ํด์ waitํ Process๋ฅผ ๊นจ์์ ธ์ผ ํ๋ค. ํ์ง๋ง Next์ ์ํด์ wait๋ Procress๋ค์ด ๋ช ๊ฐ์ธ์ง ๊ฐ์๋ฅผ ์ธ์ด์ผ ํ๋ค. ์ด๋ counter์ ๊ฐ์ ํ์ฉํ๋ค. ๊ธฐ๋ค๋ฆฌ๋ ์น๊ตฌ๊ฐ ์์ผ๋ฉด(counter == 0) Mutex๋ฅผ ์ฆ๊ฐ์์ผ์ค์ผ ํ๋ค.
Implementing a Monitor Using Semaphore
mutex์ ์ด๊น๊ฐ์ 1๋ก ๋์ด์ผ Mutually Exclusive๋ฅผ ๋ณด์ฅํด์ค ์ ์๋ค.
Implementing a Monitor Using Semaphore
x_sem์ 0์ผ๋ก ์ด๊ธฐํ ํด์ผ ํ๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ฒซ ๋ฒ์งธ ๊ฒ์ ํฌํจํด์ ๋ฉ์ถ๊ฒ ํ ์ ์๋ค. x_count ๋ x์ ๋ํด์ ๊ธฐ๋ค๋ฆฌ๋ ์น๊ตฌ๋ฅผ ์ ๊ฒ์ด๋ค. ๊ธฐ๋ค๋ฆฌ๋ Process์ ์ซ์๊ฐ ์์ผ๋ฉด signal์ ์๋ํ์ง ์์ ๊ฒ์ด๋ฏ๋ก ํ์ํ ๋ณ์์ด๋ค.
wait
x_count++๋ก ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ์ฆ๊ฐ๋์์์ ํ์ํ๋ค. wait(x_sem)์์ s_sem์ด 0์ผ๋ก ์ด๊ธฐํ๋์์ผ๋ฏ๋ก ๋ฌด์กฐ๊ฑด ๋ฉ์ถ๊ฒ ๋๋ค.
๊นจ์์ค ์ ์๋ ์ํฉ์ ๋ ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค. wait์ ํ๊ณ ๋ค์ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์์ ๊นจ์์ฃผ๋ ๊ฒฝ์ฐ. waitํ๊ณ signal ๋ฐ๊ณ ๋ค์ wait์ ํ๊ฒ ๋๋ ๊ฒฝ์ฐ ๊นจ์์ค์ผ ํ๋ ๊ฒ์ด ๊ธฐ๋ค๋ฆฌ๋ Process์ธ์ง Next์ ๋ํด wait์ ํ๊ณ ์๋ Process์ธ์ง๋ฅผ ํ์ธํด์ผ ํ๋ค.
signal
signal(x_sem)์ ๋ฌด์์ ํ๋๊ฐ. x_sem์ ๊นจ์์ฃผ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ next์ ๋ํด์ wait์ ํ๊ฒ ๋๋ค. next์ ๊ฐ์ 0์ด๋ค.
Resuming Process within in a Monitor
์ ์ผ ๊ฐ๋จํ๊ฒ๋ FIFO ๋๋ Randomํ๊ฒ ๊นจ์ฐ๋ฉด ๋๋ค. ํ์ง๋ง ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๋ฉด ๊นจ์ฐ๋ ์์๊ฐ ์๊ธฐ๊ฒ ๋๋ค.
Liveness
Progress๋ฅผ ์ ๋ง์กฑํ๋ฉด์ ์งํ๋๋ ์ํฉ์ ์๋ฏธํ๋ค.
Deadlock and Starvation
P0์ P1์ด ๋์์ ์คํ๋๋ฉด P0๋ P1์ ๊ธฐ๋ค๋ฆฌ๊ณ P1์ P0๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค.
Priority Inversion
7์ฅ. Synchronization Examples
Bounded Buffer Problem
Buffer์ size๊ฐ n์ผ๋ก ์ ํ๋์ด ์๋ค. ๋น ๊ณต๊ฐ์ ๊ฐ์๋ Producer ์ ์ฅ์์ Resource์ด๊ณ Item์ ๊ฐ์๋ Consumer์ ์ ์ฅ์์ Resource๊ฐ ๋๋ค.
Bounded Buffer Problem
counting semaphore๋ฅผ ์ฌ์ฉํด์ ๋น ์นธ์ ๊ฐ์๋ฅผ ์ ์ ์๋ค. Data item์ Counting Semaphore๋ก ๋ํ๋ด์ด์ผ ํ๋ค. empty์ ์ด๊น๊ฐ์ n์ด ๋๋ค. full ์ 0์ผ๋ก ์ด๊ธฐํ๊ฐ ๋์ด์ผ ํ๋ค. ๋ง๋๋ ์ฝ๋๋ Remainder section์ด๊ณ ์ง์ด ๋ฃ๋ ์ฝ๋๊ฐ Critical Section์ด ๋๋ค. wait(empty)๋ empty๋ผ๋ ์์์ ํ๋ ์๋นํ๊ฒ ๋ค๊ณ ํ๋ ๊ฒ์ด๋ค. empry์ ๋ํด์ signal์ ํธ์ถํ๋ค.
Consumer์ ์ ์ฅ์์ full์ item์ ์ฌ์ฉํ๊ณ empty์ ๋ํด์ signal์ ํธ์ถํด์ผ ํ๋ค.