IPC(Inter Process Communication)
Last updated
Last updated
Inter Process Communication์ ์ฝ์๋ก ํ๋ก์ธ์ค๋ค๋ผ๋ฆฌ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์ ๋๋ ๊ทธ์ ๋ํ ๋ฐฉ๋ฒ์ ๋งํ๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ํ๋ก์ธ์ค๋ ์์ ํ ๋ ๋ฆฝ๋ ์คํ์ฒด์ ๋๋ค. ์๋ก ๋ ๋ฆฝ๋์ด ์๋ค๋ ๊ฒ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ๋ฐ์ง ์๋๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ํ์ง๋ง ๋ ๋ฆฝ๋์ด ์๋ ๋งํผ ๋ณ๋์ ์ค๋น๊ฐ ์์ด๋ ์๋ก๊ฐ์ ํต์ ์ด ์ด๋ ต๋ค๋ ๋ฌธ์ ๊ฐ ์๊ฒ ๋๋ค.
์ด๋ฅผ ์ํด์ ์ปค๋ ์์ญ์์ IPC๋ผ๋ ๋ด๋ถ ํ๋ก์ธ์ค๊ฐ ํต์ ์ ์ ๊ณตํ๊ฒ ๋๊ณ , ํ๋ก์ธ์ค๋ ์ปค๋์ด ์ ๊ณตํ๋ IPC์ค๋น๋ฅผ ์ด์ฉํด์ ํ๋ก์ธ์ค๊ฐ ํต์ ์ ํ ์ ์๊ฒ ๋๋ค.
๋ฉ์์ง ์ ๋ฌ (Message Passing) ์ปค๋์ด ์ ๊ณตํ๋ API๋ฅผ ์ด์ฉํด์ ์ปค๋ ๊ณต๊ฐ์ ํตํด ํต์ ํ๋ค. ๋ฉ์์ง ํ(Mesage Queue)๋ฅผ ์ฌ์ฉํ์ฌ ์ก์ ํ๋ก์ธ์ค๋ ํ์ enqueue, ์์ ํ๋ก์ธ์ค๋ ํ์ dequeue ํ๋ฉฐ ์ํธ๊ฐ ํต์ ํ๋ค. ๋ฉ์์ง ํ๋ ์ปค๋ ๋จ์์ ๊ด๋ฆฌ๋๋ค.
ํ์ดํ (์์์ ์ฌ์ฉํ๋ ๊ทธ ํ์ดํ์) ์์ผ (TCP/IP) - ๋ก์ปฌ์์๋ ํต์ ์ด ๊ฐ๋ฅํ๋ฉฐ ์๊ฒฉ์์๋ ํต์ ์ด ๊ฐ๋ฅํ๋ค. (IP : 127.0.0.1์ผ ๊ฒฝ์ฐ ๋ก์ปฌ์์ ํจํท์ ํตํด ํ๋ก์ธ์ค๋ผ๋ฆฌ ํต์ ํ๊ธฐ๋ ํ๋ค.)
๋ฉ๋ชจ๋ฆฌ ๊ณต์ (Shared Memory) ํ๋ก์ธ์ค๋ผ๋ฆฌ ํน์ ๊ณตํต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ณต์ ํ๋ฉฐ ์ํธ๊ฐ ํต์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๊ณต์ ํ๋๋ก ์ง์ํ๋ฉฐ, ํ ํ๋ก์ธ์ค์์ ๋ณ๊ฒฝํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ด์ฉ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ์ ๊ทผํ ์ ์๋ค. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ ์ปค๋์์ ๊ด๋ฆฌ๋๋ค.
PIPE (์ต๋ช PIPE)
ํ์ดํ๋ ๋ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ฐ๊ฒฐํ๊ฒ ๋๊ณ , ํ๋์ ํ๋ก์ธ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ธฐ๋ง, ๋ค๋ฅธ ํ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ๋ง ํ ์ ์์ต๋๋ค.
ํต์ ์ ํ ํ๋ก์ธ์ค๊ฐ ๋ช ํํ๊ฒ ์ ์ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.
์ ์ด์ค ํต์ ์ ํ๋ ค๋ฉด 2๊ฐ๋ฅผ ๋ง๋ค์ด์ผํ๋ค.
Named PIPE(FIFO)
Named PIPE๋ ์ ํ ๋ชจ๋ฅด๋ ์ํ์ ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ํต์ ์ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.
PIPE๋ ๊ฐ์ ๋ถ๋ชจ์ PPID๋ฅผ ๊ฐ์ง ํ๋ก์ธ์ค ์์์๋ง ํต์ ๊ฐ๋ฅํ์ง๋ง FIFO์ ์๋๋ค.
์ฝ๊ธฐ/์ฐ๊ธฐ๊ฐ ๋์์ ๊ฐ๋ฅํ์ง ์๋ค.
์ ์ด์ค ํต์ ์ ํ๋ ค๋ฉด 2๊ฐ๋ฅผ ๋ง๋ค์ด์ผํ๋ค.
Message Queue
์ ์ถ๋ ฅ ๋ฐฉ์์ Named ํ์ดํ์ ๋์ผํจ
Name PIPE๊ฐ ๋ฐ์ดํฐ์ ํ๋ฆ์ด๋ผ๋ฉด ๋ฉ์์ง ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค.
๋ฉ์์ง ํ์ ์ธ ๋ฐ์ดํฐ์ ๋ฒํธ๋ฅผ ๋ถ์์ผ๋ก์จ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋ค.
Shared Memory(๊ณต์ ๋ฉ๋ชจ๋ฆฌ)
ํ์ดํ, ๋ฉ์์ง ํ๊ฐ ํต์ ์ ์ด์ฉํ ์ค๋น๋ผ๋ฉด, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๊ณต์ ํ๋๋ก ์ง์ํ๋ ์ค๋น๋ค.
ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ์ง๋ฉฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ฐ๋์ ๋ณดํธ๋์ผํ๋ค. ํ์ง๋ง ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋๋ก ํด์ผํ๋ ์ํฉ๋ ํ์ํ ๊ฒ์ด๋ค. ํ์ดํ๋ฅผ ์ด์ฉํด ํต์ ์ ํตํด ๋ฐ์ดํฐ ์ ๋ฌ๋ ๊ฐ๋ฅํ์ง๋ง, ์ค๋ ๋์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋๋ก ํด์ค๋ค๋ฉด ๋์ฑ ํธํ ๊ฒ์ด๋ค.
๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ณต์ ํด์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํด์ค๋ค.
ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ปค๋์ ์์ฒญํ๋ฉด, ์ปค๋์ ํด๋น ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด์ฃผ๊ณ ์ดํ ๋ชจ๋ ํ๋ก์ธ์ค๋ ํด๋น ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
์ค๊ฐ์ ์์ด ๊ณง๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์์ด์ IPC ์ค์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์๋ํจ
Memory Map(๋ฉ๋ชจ๋ฆฌ ๋งต)
๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํด์ค๋ค. ๋ฉ๋ชจ๋ฆฌ ๋งต์ ์ด๋ฆฐ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ๋งตํ์์ผ์ ๊ณต์ ํ๋ ๋ฐฉ์์ด๋ค. (์ฆ ๊ณต์ ๋งค๊ฐ์ฒด๊ฐ ํ์ผ+๋ฉ๋ชจ๋ฆฌ)
์ฃผ๋ก ํ์ผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด์ผ ํ ๋ ์ฌ์ฉํ๋ค.
Socket(์์ผ)
๋คํธ์ํฌ ์์ผ ํต์ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์์ผ์ ํตํด์ ํต์ ํ๋ ๊ตฌ์กฐ๋ก, ์๊ฒฉ์์ ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๋ ์ฌ์ฉํ๋ค.
์๋ฒ(bind, listen, accept), ํด๋ผ์ด์ธํธ(connect)
์ด๋ฌํ IPC ํต์ ์์ ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๊ณ ๋ณดํธํ๊ธฐ ์ํด ์ธ๋งํฌ์ด์ ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ๋ค. (๊ณต์ ๋ ์์์ ํ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ ๊ทผ์ํฌ ๋)