20.04.25 (ํ )
Updated:
์ค๋ ํ ์ผ (๊ณํ)
์ด์์ฒด์ 6์ฃผ์ฐจ ๋ฃ๊ธฐ- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ฐ ๋์ฒด ๊ณผ์
์ค๋ ํ ์ผ
-
์ด์์ฒด์
์ค๋์ Producer / Consumer Problem , Readers / Writers Problem์ ๋ํด ๋ฐฐ์ ๋ค.
์ฐ์ Producer / Consumer Problem ์ ๋ํด ์์๋ณด์.
์์ฐ์ - ์๋น์ ๋ฌธ์ ๋ ๋ฒํผ๋ฅผ ๋๊ณ Data๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ ๋ํ ๋ฌธ์ ์ด๋ค.
๋ฒํผ์ Data๊ฐ ์๋๋ฐ I/O ์ฅ์น๊ฐ ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๊ฑฐ๋, ๋ฒํผ๊ฐ Data๋ก ๊ฝ ์ฐผ๋๋ฐ ์ฐ๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐ ํ ์ ์์๊น? ๋ฐ๋ก ์ธ๋งํฌ์ด์ ๋ชจ๋ํฐ๋ฅผ ์ฌ์ฉ ํด ํด๊ฒฐ ํ ์ ์๋ค.
// Producer semaphore s = 1, n = 0, e = sizeofbuffer; void producer(){ while(1){ produce(); semWait(e); // ๋ฒํผ์ ๋น ์๋ฆฌ๊ฐ ์๋์ง ํ์ธํ ํ ๋น ์๋ฆฌ๊ฐ ์๋ค๋ฉด Block semWait(s); append(); semSignal(s); semSignal(n); // ๋ฒํผ์ Data๋ฅผ ๋ฃ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ Consumer๊ฐ ์๋ค๋ฉด ๊นจ์ด๋ค } } void consumer(){ while(1){ semWait(n); // ๋ฒํผ์ Data๊ฐ ์๋์ง ํ์ธํ ํ ์๋ค๋ฉด Block semWait(s); take(); semSignal(s); semSignal(e); // ๋ฒํผ์์ Data๋ฅผ ๊ฐ์ ธ๊ฐ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ค๋ฆฌ๋ Producer๊ฐ ์๋ค๋ฉด ๊นจ์ด๋ค } }
์ฌ๊ธฐ์ ๊ต์๋์ด ๋ด์ค ๋ฌธ์ ๊ฐ ์๋ค. ๋ฐ๋ก 7,8๋ฒ 17,18๋ฒ ์ฝ๋๋ฅผ ์๋ก ๋ฐ๊พผ๋ค๋ฉด ์ด๋ค์ผ์ด ์ผ์ด๋ ๊ฒ์ธ๊ฐ?
7,8๋ฒ ์ฝ๋๋ฅผ ๋ฐ๊พผ๋ค๋ฉด ๋ฒํผ์ ๋น ์๋ฆฌ๊ฐ ์๋์ง ํ์ธํ ํ ๋น์๋ฆฌ๊ฐ ์๋ค๋ฉด Block ๋๋ ๊ณผ์ ์ Critical Section ์์์ ํ๊ฒ ๋๋ค.
์ด๋ Deadlock์ด ๋ฐ์ํ ์ ์๋ค๊ณ ํ๋ค. ์ด๋ค ๊ฒฝ์ฐ์ ๊ทธ๋ฌ๋์ง๋ ์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค..
๋ค์์ผ๋ก ๋ชจ๋ํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ชจ๋ํฐ๋ฅผ ์ธ๋งํฌ์ด๋ฅผ ์ ์ฌ์ฉํ์ง ๋ชปํ๋ ์ฌ๋์๊ฒ ์ ์ฉํ ๊ตฌ์กฐ์ฒด ์ด๋ค.
๋ชจ๋ํฐ๋ ํ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํจ์์ ์งํฉ์ด๋ผ๊ณ ํ ์ ์๋ค.
์ด ๋ชจ๋ํฐ ์์ผ๋ก๋ Critical Section๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ ๋ฒ์ ํ ๊ฐ์ ํ๋ก์ธ์ค ๋ฐ์ ๋ค์ด๊ฐ ์ ์๋ค.
๊ฒฐ๊ตญ ๋ชจ๋ํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์์ ๋ฌธ์ ๊ฐ ๋๋ Critical Section ์ ๋ค์ด ๊ฐ ํ ๋ฒํผ๋ฅผ ํ์ธํ๋ ์ ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๊ฒฝ์ฐ์๋ ์๋ฌด ๋ฌธ์ ๊ฐ ์๋ค ์ ๊ทธ๋ด๊น? ์ด๊ฒ ๊ต์๋์ด ๋ฌผ์ด๋ณธ ๋ ๋ฒ์งธ ๋ฌธ์ ์ด๋ค.
์ฐ์ ๋ฐ๋๋ฝ์ด ์ผ์ด๋๋ ์ด์ ์ ๋ํด์ ๋จผ์ ์๊ฐํด๋ณด๊ณ ํด๊ฒฐํด์ผ๊ฒ ๋ค.
๋ค์์ผ๋ก๋ Readers / Writers Problem์ ๋ํด ๋ฐฐ์ ๋ค.
Writer ์์ ์ Data๋ฅผ ์ฐ๋ ์์ ์ด๋ค. ๊ฒฐ๊ตญ Data๋ฅผ ์ฝ์ด์์ ์ด๋ค๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค.
Read ์์ ์ ๋ง ๊ทธ๋๋ก Data๋ฅผ ์ฝ๊ธฐ๋ง ํ๋ ์์ ์ด๋ค.
Write ์ Write, Write ์ Read ์์ ์ ๋์์ ์ด๋ฃจ์ด ์ง ์ ์์ง๋ง Read ์์ ์ ์๋ก ๋์์ ์ด๋ฃจ์ด ์ ธ๋ ๋๋ค.
๊ทธ๋์ ๋์จ ํด๊ฒฐ๋ฐฉ๋ฒ์ด Read์๊ฒ ์ฐ์ ์์๋ฅผ ์ฃผ๋ ๋ฐฉ์์ด๋ค. ๊ตฌํ ํ๊ธฐ ์ํด์๋ Critical Section์ด ๋ ๊ฐ ํ์ํ๋ค.
๊ฐ๋ ๋ง ์ค๋ช ํ์๋ฉด ์์ ์ ํ๊ธฐ ์ํ C.S ์๋ ์ฒซ ๋ฒ์งธ Read๋ง ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค๊ฐ ์ด ์ฒซ ๋ฒ์งธ Read๊ฐ C.S๋ก ๋ค์ด ๊ฐ์ ๋
readcount์ C.S ์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ Read ๋ค์ด ๋ค ๊ฐ์ด ๋ค์ด๊ฐ ์์ ์ ์ํํ๋ค.
์ด๋ฐ ๋๋์ผ๋ก ์๊ณ ์์ผ๋ฉด ๋๊ฒ ๋ค.
๋ด์ผ ํ ์ผ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ฐ ๋์ฒด ๊ณผ์ ์๋ฃํ๊ธฐ
์ด๋ฒ์ฃผ ํ ์ผ
์ทจ์ ์ญ๋๊ฐ๋ฐ๋ก 6์ฃผ์ฐจ ๋ฃ๊ธฐ (์)์์๊ณ ์ ๊ฐ๋ 7์ฃผ์ฐจ ๋ฃ๊ธฐ (์)์๊ธฐ์ฌ์ด์ฝ๋ฉ 8์ฃผ์ฐจ ๋ฃ๊ธฐ (์)์ด์์ฒด์ 5์ฃผ์ฐจ ๋ฃ๊ธฐ (์)๋ฐ์ดํฐ๋ฒ ์ด์ค 6์ฃผ์ฐจ ๋ฃ๊ธฐ (ํ)์์๊ณ ์ ๊ฐ๋ ๊ณผ์ ์ ์ถ (ํ)๋ํ์์์ํ์ค์ฉ๊ธ์ต 5์ฃผ์ฐจ, 6์ฃผ์ฐจ ๋ฃ๊ธฐ (์)๋ํ์์์ํ์ค์ฉ๊ธ์ต ๊ณผ์ ์ ์ถ (์)ํ๋ฅ ๊ณผ ํต๊ณ 6์ฃผ์ฐจ ๋ฃ๊ธฐ (๋ชฉ)์ด์์ฒด์ 3, 4๊ฐ ํด์ฆ ์ค๋น (๋ชฉ)์น ํ๋ก๊ทธ๋๋ฐ 6์ฃผ์ฐจ ๋ฃ๊ธฐ (๊ธ)์ด์์ฒด์ 6์ฃผ์ฐจ ๋ฃ๊ธฐ (ํ )
Leave a comment