ํ์ฌ ์ฌ์ฉํ๋ ๋๊ธฐํ ๋๊ตฌ์ธ ๋ชจ๋ํฐ(Monitor)์ ๋ํด์ ์์๋ณธ๋ค.
์ธ๋งํฌ๋ ์ค์ ๋ก ๋งค์ฐ ์ค๋๋ ๋๊ธฐํ ๋๊ตฌ์ด๋ค. ํ์ฌ์๋ ๋ชจ๋ํฐ(monitor)๋ผ๋ ๋๊ธฐํ ๋๊ตฌ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ, ์ด๋ ์ข ๋ ๊ณ ์์ค์ ๋๊ธฐํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
1. ๋ชจ๋ํฐ ๊ตฌ์กฐ
Semaphore์ ๊ตฌ์กฐ๋ ์์ ๊ฐ์๋ค. ๊ทธ๋ ๋ค๋ฉด monitor๋ ๋ฌด์์ด ๋ค๋ฅผ๊น?
์๋ ๋ชจ๋ํฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋จํ ๋ํ๋ธ ๊ทธ๋ฆผ์ด๋ค. ๋ชจ๋ํฐ๋ ๊ณต์ ์์ + ๊ณต์ ์์ ์ ๊ทผํจ์๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , 2๊ฐ์ ํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๊ฐ๊ฐ mutual exclusion(์ํธ๋ฐฐํ) queue, conditional synchronization(์กฐ๊ฑด๋๊ธฐ) queue์ด๋ค.
- ์ํธ๋ฐฐํ ํ๋ ๋ง๊ทธ๋๋ก ๊ณต์ ์์์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ง์ ํ๋๋ก ํ๊ธฐ ์ํ ํ์ด๋ค.
- ์กฐ๊ฑด๋๊ธฐ ํ๋ ์ด๋ฏธ ๊ณต์ ์์์ ์ฌ์ฉํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ํน์ ํ ํธ์ถ wait()์ ํตํด ์กฐ๊ฑด๋๊ธฐ ํ๋ก ๋ค์ด๊ฐ ์ ์๋ค.
์กฐ๊ฑด๋๊ธฐ ํ์ ๋ค์ด๊ฐ ์๋ ํ๋ก์ธ์ค๋ ๊ณต์ ์์์ ์ฌ์ฉํ๊ณ ์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํด ๊นจ์์ค ์ ์๋ค. ์ด ์ญ์ ๊นจ์์ฃผ๋ ํ๋ก์ธ์ค์์ ํน์ ํ ํธ์ถ notify()
์ ํด์ฃผ๋ฉฐ, ๊นจ์์ฃผ๋๋ผ๋ ์ด๋ฏธ ๊ณต์ ์์์ ์ฌ์ฉํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ํด๋น ๊ตฌ์ญ์ ๋๊ฐ์ผ ๋น๋ก์ ํ์ ์๋ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ค.
2. monitor in java
์๋ฐ๋ ๋ชจ๋ํฐ๋ฅผ ์ ๊ณตํ๋ ๋ํ์ ์ธ ์ธ์ด์ด๋ฉฐ, ์๋ฐ์ ๋ชจ๋ ๊ฐ์ฒด๋ ๋ชจ๋ํฐ๊ฐ ๋ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์๋ฐ๋ฅผ ํตํด ๋ชจ๋ํฐ์ ๋ํ ์์ ๋ฅผ ์ดํด๋ณด์.
์ ์ฝ๋๋ ๋ชจ๋ํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ํด๋์ค์ด๋ค. value
์ ๊ฐ์ ๋ณ์๋ค์ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๊ณต์ ํ๊ณ ์๋ ๋ณ์๋ก ๋ณผ ์ ์๊ณ , synchronized
ํค์๋๋ ๋ฐฐํ๋๊ธฐ๋ฅผ ์ํํ๋ ํจ์๋ฅผ ๋งํ๋ค. ์ฆ, ํด๋น ํจ์์๋ ๋จ ํ๋์ ์ฐ๋ ๋๋ง ์ ๊ทผํ ์ ์๋ค.
Foo()
ํจ์์ Goo()
ํจ์๋ synchronized
ํค์๋๋ฅผ ํตํด ์ํธ๋ฐฐํ ํจ์๋ก ์ ์ธํ์๋๋ฐ, ์ด๋ **โ๋ ๋ค ๊ฐ์ ์๊ณ๊ตฌ์ญ์ ๊ฐ๋๋คโ**๋ ์๋ฏธ์ด๋ค. ๋ค์ ๋งํด์, Foo() ํจ์์ ํ ์ฐ๋ ๋๊ฐ ์ํ ์ค์ด๋ผ๋ฉด, Foo() ํจ์๋ฟ ์๋๋ผ Goo() ํจ์์๋ ๋ค๋ฅธ ์ฐ๋ ๋๋ ์ ๊ทผํ ์ ์๋ค. ๋ฐ๋ฉด์ H() ํจ์๋ ์ผ๋ฐ ํจ์์ธ๋ฐ, ์ด ํจ์์์๋ ๊ณตํต ๋ณ์์ ๋ํ ์
๋ฐ์ดํธ๋ฅผ ํ์ง ์๋๋ค๋ ๊ฒ์ ์์ํ ์ ์๋ค. (์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ์ ๊ทผ๊ฐ๋ฅํ๋ค.)
์กฐ๊ฑด๋๊ธฐ๋ ํน์ ํ ๋ฉ์๋ ํธ์ถ๋ก ์ฌ์ฉํ ์ ์๋ค.
wait(): ํธ์ถํ ์ฐ๋ ๋๋ฅผ ์กฐ๊ฑด๋๊ธฐ ํ์ ์ฝ์ ํ๋ค. notify(): ์กฐ๊ฑด๋๊ธฐ ํ์ ์๋ ํ๋์ ์ฐ๋ ๋๋ฅผ ๊นจ์์ค๋ค. notifyAll(): ์กฐ๊ฑด๋๊ธฐ ํ์ ์๋ ๋ชจ๋ ์ฐ๋ ๋๋ฅผ ๊นจ์์ค๋ค.
๋ชจ๋ํฐ ์ญ์, ์ธ๋งํฌ์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ธ Mutual exclusion, Ordering์ ๋ชจ๋ ํ ์ ์๋ค. ์์ ๋ฅผ ํตํด ์ด๋ฅผ ์ดํด๋ณด์.
3. Problem Solving by Monitor
monitor๋ฅผ ์ฌ์ฉํ์ฌ ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.
3.1 BankAccount Problem
์ด์ ์ ์ธ๋งํฌ์์ ์ดํด๋ณธ ์ํ๊ณ์ข ๋ฌธ์ ๋ฅผ ํตํด ์ธ๋งํฌ ๋์ ๋ชจ๋ํฐ๋ฅผ ์ฌ์ฉํด์ Mutual exclusion, Ordering์ ๊ตฌํํด๋ณด์.
3.1.1 Mutual Exclusion
์ฝ๋๊ฐ ๋งค์ฐ ๊ฐ๋จํด์ก๋ค..!{:.center-text}
์ ์ฝ๋์์ ๋ณผ ์ ์๋ฏ์ด, ์ธ๋งํฌ๋ฅผ ์ฌ์ฉํ ๋๋ณด๋ค ๋ชจ๋ํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ๊ฐ๊ฒฐํ๊ฒ ์ฝ๋๋ฅผ ๊ตฌํํ ์ ์๋ค. ์ธ๋งํฌ๋ฅผ ์ ์ธํ๊ณ number of permit
๊ฐ์ ์ค์ ํ๋ ๋์ , synchronized
ํค์๋ ํ๋๋ก ์ด๋ฅผ ๋์ฒดํ ๊ฒ์ ๋ณผ ์ ์๋ค.
+++++++++++++++++++++++------------------------------------------+++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
----------------------------------------
balance = 0
์คํ ๊ฒฐ๊ณผ๋ ์์ ๊ฐ๊ณ , balance๊ฐ์ด ์ ์์ ์ผ๋ก 0์ ์ถ๋ ฅํ๋ค.
3.1.2 Mutual Ordeing
์ํ๊ณ์ข ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๊ธฐ์ ์, ordering์ ํ๊ธฐ ์ํด ๋ชจ๋ํฐ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๋ณด์.
|P1|P2| |::|::| ||wait()| |section 1|section 2| |notify()||
์ ๊ตฌ์กฐ๋ ํ๋ก์ธ์ค ์์๋ฅผ P1, P2 ์์๋ก ์คํํ๊ธฐ ์ํ๋ ๊ฒฝ์ฐ์ด๋ฉฐ, ์ด๋ ์ธ๋งํฌ์ ๋งค์ฐ ์ ์ฌํ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ์ํ๊ณ์ข ๋ฌธ์ ๋ฅผ ๋ชจ๋ํฐ๋ก ๊ตฌํํ๋๋ฐ, ์
๊ธ ๋จผ์ ์ํ, ์ถ๊ธ ๋จผ์ ์ํ, ์
๊ธ ์ถ๊ธ ๋ฐ๋ณต ์ํ 3๊ฐ์ง๋ฅผ ๊ฐ๊ฐ ๊ตฌํํด๋ณด์. ๊ทธ๋ฆฌ๊ณ ์ ์ฝ๋์์ ์์ ํ๋ ๋ถ๋ถ์ ์์๋ฅผ ์ ํ๋ ์
๊ธ, ์ถ๊ธํจ์์ด๋ฏ๋ก ์ด ๋ถ๋ถ์ ๋๋ณํ๋ BankAccount
๋ง ์์ ํ์.
์ ๊ธ ๋จผ์ ์ํํ๊ธฐ
๋จผ์ ์ ๊ธ์์ํ๋ฉด ๊ธฐ๋ค๋ฆฌ๋ผ๊ณ ํ๋ฉด๋๋ค.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++------------------------------------------------------------
----------------------------------------
balance = 0
์ถ๊ธ ๋จผ์ ์ํํ๊ธฐ
๋จผ์ ์ถ๊ธ์์ํ๋ฉด ๊ธฐ๋ค๋ฆฌ๋ผ๊ณ ํ๋ฉด๋๋ค.
--------------------------------------------------------------------------------
--------------------++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++
balance = 0
์ ๊ธ ์ถ๊ธ ๋ฐ๋ณต ์ํํ๊ธฐ
์ ๊ธ ๋ฃ๊ณ ๊ธฐ๋ค๋ฆฌ๊ณ ์ถ๊ธ ๋ฃ๊ณ ๊ธฐ๋ค๋ฆฌ๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ฉด ๋๋ค!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
balance = 0
3.2 ์ ํต์ ๋๊ธฐํ ๋ฌธ์
10: ์ ํต์ ์ธ ๋๊ธฐํ ๋ฌธ์ ๋ค์ ์์ ํด๋ณธ๋ค!
2.1 Producer-Consumer Problem
Semaphore๋ฅผ ์ฌ์ฉํ๋ฉด ์ํธ ๋ฐฐ์ sem, ๊ฐ๋ ์ฐจ์์ ๋ blockํ๋ sem, ๋น์ด์์ ๋ blockํ๋ sem ์ด 3๊ฐ๋ฅผ ์ฌ์ฉํ์ด์ผ ํ๋ค. ํ์ง๋ง ์ด๋ฒ์๋ ์ฝ๋๊ฐ ๊ฐ๋จํด์ง๋ค!
Number of items in the buf is 0
2.2 The Dining Philosopher Problem
์ด ์ฝ๋๋ ๊ต์ฐฉ์ํ๋ฅผ ํด๊ฒฐํ์ง ์์ ์ํ์ด๋ค. ํด๊ฒฐ ํ๊ธฐ ์ํด์๋ circular wait
์กฐ๊ฑด์ ๋ถ๋ง์กฑํ๋๋ก ๋ง๋ค๋ฉด ๋๋ค. ์ด ๋ถ๋ถ์์๋ ์ฝ๊ฒ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ ๋ณด๊ณ ๊ฐ๋ฉด ๋๋ค.
Reference
- KOCW ์ํฌ์ฌ ๊ต์๋ - ์ด์์ฒด์
- ์ํฌ์ฌ ๊ต์๋ ๋ธ๋ก๊ทธ(์ํ ๊ธฐ์ถ ๋ฌธ์ )
- codemcd ๋์ ์ ๋ฆฌ๊ธ
- Operating System Concepts, 9th Edition - Abraham Silberschatz