๐ํ๋ก์ธ์ค
๐IPC(Inter Process Communication)
ํ๋ก์ธ์ค ์ฌ์ด์ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์
๐IPC์ ํ์์ฑ
ํ๋ก์ธ์ค๋ ์์ ํ ๋ ๋ฆฝ๋ ์คํ ๊ฐ์ฒด(์๋ก ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง)์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ค๋น ์์ด๋ ์๋ก ๊ฐ ํต์ ์ด ์ด๋ ค์ด๋ฐ, ์ปค๋ ์์ญ์์ ์ ๊ณตํ๋ IPC ์ค๋น๋ฅผ ์ด์ฉํด ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ ํ ์ ์์
ํ๋ก์ธ์ค ๊ฐ ํ๋ ฅ์ด ํ์ํ ๋๋?
- ์ ๋ณด ๊ณต์ (information sharing)
- ๊ณ์ฐ ๊ฐ์ํ(computation speedup)
- ๋ชจ๋์ฑ(modularity)
๐IPC Model ์ข ๋ฅ
๐๋ฉ์ธ์ง ์ ๋ฌ ๋ชจ๋ธ(Message Passing model)
์ปค๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฉ์ธ์ง ์ ๋ฌ์ ์ํ ์ฑ๋์ ๋ง๋ค์ด์ ํ๋ ฅํ๋ ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ๋ฉ์ธ์ง ํํ๋ก ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์

- ๋ฉ์ธ์ง๋ฅผ ์ปค๋์ ๊ฒฝ์ ํ์ฌ ์ก/์์ ์๋ผ๋ฆฌ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, ์ปค๋์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋ง   โ ํ๋ก์ธ์ค ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ์์ด ๋์์ด ๊ฐ๋ฅ
์ฅ์
- ์ปค๋์์ ๋ฐ์ดํฐ์ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์ปจํธ๋กคํ ์ ์์ด ๋ณ๋์ ๋๊ธฐํ ๋ก์ง์ด ํ์ ์์
๋จ์
- ์ปค๋์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ๋๋ฌธ์ Shared Memory Model๋ณด๋ค ๋๋ฆผ
๋ฐฉ์
1. Direct Communication
ํต์ ํ๋ ค๋ ํ๋ก์ธ์ค์ ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ํ์ํ์ฌ ๋ฉ์ธ์ง๋ฅผ ์ง์ ์ ๋ฌํ๋ ๋ฐฉ์

- ํ๋ก์ธ์ค ๊ฐ ๋งํฌ๋ ์ ์ผ
- ๋๋ถ๋ถ ์๋ฐฉํฅ์ผ๋ก ๊ตฌ์ฑ
2. Indirect Communication
mailbox(๋๋ port)๋ฅผ ํตํด ๋ฉ์ธ์ง๋ฅผ ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ์
- port๋ก ์ ์ก๋ง ํ๋ฉด ๋๊ธฐ์ ๋ณต์กํ Communication Link(๋ค:๋ค)๋ฅผ ๋ง๋ค ์ ์์
๋ฉ์ธ์ง ์ ๋ฌ ๋ชจ๋ธ ๊ตฌํ IPC
1. ํ์ดํ(Pipe)
ํ๋์ ํ๋ก์ธ์ค๊ฐ ํ์ดํ๋ฅผ ํตํด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋ฉ์ธ์ง๋ฅผ ์ง์ ์ ๋ฌํ๋ ๋ฐฉ์

- 1:1 ํต์
- Direct Communication
- ํ ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ์ดํฐ๊ฐ ์ด๋ (
Half-duplex) (ํ ํ๋ก์ธ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ธฐ๋ง ํ๊ณ , ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ๋ง ํจ)   โ ์ ๋ฐฉํฅ ํต์ ์ ์ํด์๋ 2๊ฐ์ ํ์ดํ ํ์ - ๋ณด๋ด์ง ์์๋๋ก ๋ฐ์ (
in-order) - ์ฉ๋ ์ ํ์ด ์์ด ํ์ดํ๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ์ธ ์ ์์
2. ๋ฉ์ธ์ง ํ
๊ณ ์ ํฌ๊ธฐ์ ๋ฉ์ธ์ง๋ฅผ ํ๋ฅผ ํตํด ํต์ ํ๋ ๋ฐฉ์

- 1:N ํต์   โ ๋๊ธฐํ ํ์
- ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅ (
full-duplex) - ๋ฉ์ธ์ง์ ํํ๋ ์ฌ์ฉ์๊ฐ ์ ์ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋น๋๊ธฐ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋ฐฉ๋ํ ์ฒ๋ฆฌ๋์ด ์๋ค๋ฉด ํ์ ๋ฃ์ ํ ๋์ค์ ์ฒ๋ฆฌ ๊ฐ๋ฅ   but, ๋ฐ์ดํฐ๊ฐ ๋ง์ด ์์ผ์๋ก ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์์ด ํ์     ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋์ค๋ ๊ณผ์ ์์ ์ค๋ฒํค๋ ๋ฐ์
- ๋ฐ์ดํฐ์ ๋ฒํธ๋ฅผ ๋ถ์ฌ ๋ค์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์
3. ์์ผ
๋คํธ์ํฌ ์์์ ๊ฐ๊ฐ ์์์ ํฌํธ๋ฅผ ์ ํ๊ณ ํฌํธ ๋ฒํธ์ ์ด์ฉํ์ฌ ํต์ ํ๋ ค๋ ์๋ ํ๋ก์ธ์ค์ ์์ผ์ ์ฐพ์ ํ ํด๋น ํฌํธ ๊ฐ์ ๋ํ๋ฅผ ํตํด ํต์ ํ๋ ๋ฐฉ์

- ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅ (
full-duplex) - ๋คํธ์ํฌ ์์ผ์ ์ด์ฉํ์ฌ Client-Server ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ ํต์
- ์๊ฒฉ์์ ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๋ ์ฌ์ฉ
- ํฌํธ์ ๋์์ผ๋ก ํ๋ก์ธ์ค์ ์์น์ ๋ ๋ฆฝ์ ์ด๊ณ Machine Boundary์ ๊ด๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์ Local ๋ฟ๋ง ์๋๋ผ Remote๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅ
๐๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ (Shared Memory Model)
ํ๋ ฅ ํ๋ก์ธ์ค๋ค์ด ์ฃผ์ ๊ณต๊ฐ์ ์ผ๋ถ๋ฅผ ๊ณต์ ํ๋ฉฐ, ๊ณต์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์์ผ๋ก์จ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์

- ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ปค๋์ ์์ฒญํ๋ฉด ์ปค๋์ ํด๋น ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ๊ณ , ์ด๋ค ํ๋ก์ธ์ค๋ผ๋ ํด๋น ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผ ๊ฐ๋ฅ
์ฅ์
- ์ปค๋์ ๊ด์ฌ ์์ด ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ IPC ์๋๊ฐ ๊ฐ์ฅ ๋น ๋ฆ
- ํ๋ก๊ทธ๋จ ๋ ๋ฒจ์์ ํต์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์์ ๋ก์ด ํต์ ์ด ๊ฐ๋ฅ
๋จ์
- ๋ฉ์ธ์ง ์ ๋ฌ ๋ฐฉ์์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ผํ๋ ์์ ์ ์ ์ ์์   โ ๋ณ๋์ ๋๊ธฐํ ๊ธฐ์ ์ด ํ์
- ๋์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ์ ๊ทผํ๋ ์์น๊ฐ ๋ฐ์ ๊ฐ๋ฅ   โ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ํ๋ก์ธ์ค ๊ฐ์ Lock ๋ฉ์ปค๋์ฆ์ด ํ์
๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ ๊ตฌํ IPC
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ(Shared Memory)
- POSIX: Portable OS interface (for UNIX)
