์คํฐ๋๋ฅผ ์ด์ํ๊ณ ์์ต๋๋ค. ํด๋น repository์ ๊ฐ๋ฉด ๋ ๋ง์ ์ ๋ณด๋ฅผ ๋ณด์ค ์ ์์ต๋๋ค!
ํนํ close ๋ PR์ ๋ณด์๋ฉด, ์ด๋ค ๋ถ๋ถ์ ๋ํด์ ๊ณ ๋ฏผํ๊ณ ์คํฐ๋์๋ค๊ณผ ์ด์ผ๊ธฐ๋๋ด๋์ง ๋ณด์ค ์ ์์ต๋๋ค
https://github.com/JulSaMo/CS-start
๐ IPC (Inter Process Communication)
- ์ ์ฌ์ง์ฒ๋ผ ํ๋ก์ธ์ค๋ ๊ฐ์ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์์ด์ ์๋ก๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๋ฐฉ๋ฒ์ด ์๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋์จ ๋ฐฉ์์ด IPC๋ก ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ํ๋ก์ธ์ค๊ฐ ํต์ ์ด๋, ํ๋ก์ธ์ค ๊ฐ์ ๋ฐ์ดํฐ ์ก์์ ์ด ์๋ค๋ ๋ป์ด๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํด์ผ ํ๋ค๋ ๋ป์ด๋ค. ์ด๋ฌ๊ธฐ ์ํด์๋ 'ํต์ ์ ์ํ ๋๊ตฌ'๊ฐ ํ์ํ๋ค. == IPC
์ฆ IPC ๋, ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ํต์ ๋ฐฉ๋ฒ์ด๋ค
ํ๋ก์ธ์ค๋ Kernel(์ปค๋)์ด ์ ๊ณตํ๋ IPC์ค๋น๋ฅผ ์ด์ฉํ์ฌ ํ๋ก์ธ์ค๊ฐ์ ํต์ ์ ํ ์ ์๊ฒ ๋๋ค.
๐ ์ปค๋์ด๋?
์ด์์ฒด์ ์ค ํญ์ ํ์ํ ๋ถ๋ถ๋ง์ ์ ์์ด ์ผ์ง๊ณผ ๋์์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋๊ณ , ๊ทธ๋ ์ง ์์ ๋ถ๋ถ์ ํ์ํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ ์ด์์ฒด์ ๋ค์ Kernel ์ด๋ผ๊ณ ํ๋ค. ๋ณดํต Kernel ์ด๋ผ๊ณ ์นญํ๋ฉด, ๊ฐ์ฅ ์ค์ํ '์ด์์ฒด์ ๋ค'์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค.
๐ IPC ์ข ๋ฅ
IPC์ข ๋ฅ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. ํ์์ ๋ฐ๋ผ IPC ํต์ ๋ฐฉ์์ ์ ํํด์ ์ ์ฌ์ฉํด์ผ ํ๋ค. IPC๋ ์๋์ ๊ฐ์ด ๋ถ๋ฅํ ์ ์๋ค.
๋ฉ์์ง ์ ๋ฌ ์์คํ
๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์คํ
๐ธ ๋ฉ์์ง ์ ๋ฌ ์์คํ
- ์ปค๋์ ๊ฒฝ์ ํ์ฌ ๊ณ ์ ๊ธธ์ด ๋ฉ์์ง, ๊ฐ๋ณ๊ธธ์ด ๋ฉ์์ง๋ฅผ ์ก/์์ ์ ๋ผ๋ฆฌ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, ์ปค๋์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ๋ค.
- ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ์์ด ๋์์ด ๊ฐ๋ฅํ๋ค..
- ์๋ฒ-ํด๋ผ์ด์ธํธ ๋ฐฉ์์ ํต์ ์ด ๋ฉ์์ง ์ ๋ฌ ์์คํ ์ ๊ฐ์ฅ ๋ํ์ ์ธ ์์๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
- ๋ฉ์์ง ์ ๋ฌ ๋ชจ๋ธ์์ iPC๋ ํด๋น ํ๋ก์ธ์ค ์ ์ฅ์์ ์ผ์ข ์ I/O๋ก ๋ณผ ์ ์๋ค. ๊ทธ๋์ IPC๋ฅผ ํ๋ฉด ํ ์๋ก ์ปจํ ์คํธ ์ค์์นญ์ด ๋ง์ด ์ผ์ด๋๋ค.
๐ ๋ฉ์์ง ์ ๋ฌ ๋ชจ๋ธ์ ๊ตฌํ IPC ์ข ๋ฅ
PIPE
Message Queue
Socket ๋ฑ
๐ฅ PIPE (์ต๋ช PIPE)
- ๊ณต์ ๋งค๊ฐ์ฒด๋ 'ํ์ผ'์ด๋ค.
- ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ํ ๋ ์ฌ์ฉํ๋ค.
- ํด๋น ๋ฐฉ์์ ๋ชฉ์ ์ fork() ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ, ์์ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค์ด ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ ์ฝ์ด์ ๋์ ์คํ์ด ๊ฐ๋ฅํ๊ฒ ํ์ฌ ๋น ๋ฅธ ์คํ์ ํ๊ธฐ ์ํจ. ์ฆ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ๋น ๋ฅธ ํ๋ก๊ทธ๋จ ์คํ์ด ๋ชฉ์ ์ด๋ค.
- ์ต๋ช PIPE๋ ํ๋์ ํ๋ก์ธ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ธฐ๋ง, ๋ค๋ฅธ ํ๋๋ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค.
- ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ํต์ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ Half-Duplex(๋ฐ์ด์ค) ํต์ ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. (์ด๋ PIPE๋๊ฐ๋ฅผ ์ฌ์ฉํด์ ์๋ฐฉํฅ์ผ๋ก ๋ง๋ค ์ ์์ง๋ง, ๊ตฌํ์ด ๋งค์ฐ ๋ณต์กํด์ง ์ ์๋ค.)
- ํต์ ์ ํ ํ๋ก์ธ์ค๊ฐ ๋ญ์ง ๋ช ํํ๊ฒ ์ ์ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
- ๊ตฌํ์ด ๋งค์ฐ ๊ฐ๋จํ๋ค๋ ์ฅ์ ์ด ์๋ค.
๐ฅ Named PIPE
- ๊ณต์ ๋งค๊ฐ์ฒด๋ 'ํ์ผ' ์ด๋ค.
- FIFO ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- ์ต๋ช PIPE์๋ ๋ค๋ฅด๊ฒ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ฌด๊ดํ๊ฒ ์ ํ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค ์ฌ์ด์์ ํต์ ์ด ๊ฐ๋ฅํ๋ค.
- ํต์ ์ ์ํด์ ์ด๋ฆ์ด ์๋ ํ์ผ๋ค์ ์ฌ์ฉํ๋ค.
- ์ต๋ช PIPE์ ๊ฐ์ด ๋จ๋ฐฉํฅ ํต์ ๋ง ๊ฐ๋ฅํ์ง๋ง, ์ด๋ฆ์ด ์๋ ํ์ผ ๋๊ฐ๋ฅผ ์ฌ์ฉํด์ ์ด๋ฅผ ํด๊ฒฐํ ์๋ ์๋ค.
๐ฅ Message Queue (๋ฉ์์ง ํ)
- ์๋ฐฉํฅ ํต์ ๋ฐฉ์์ด๋ค.
- ๊ณต์ ๋งค๊ฐ์ฒด๋ '๋ฉ๋ชจ๋ฆฌ'์ด๋ค.
- Named PIPE์ ๊ฐ์ ์ ์ถ๋ ฅ ๋ฐฉ์์ ์ฌ์ฉ (FIFO) ํ์ง๋ง, Named PIPE๋ ๋ฐ์ดํฐ์ ํ๋ฆ์ด๋ผ๋ฉด, ๋ฉ์์งํ๋ '๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ'์ด๋ผ๋ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ '๋ฉ์์ง ํ'๋ฅผ ์ปค๋์์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
- ๋ชจ๋ ํ๋ก์ธ์ค์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. (๋ฉ์์งํ์ ์ ๊ทผ์(์๋ณ์)๋ฅผ ์๋ ๋ชจ๋ ํ๋ก์ธ์๋ ๋์ผํ ๋ฉ์์งํ์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์๋ค.)
๐ฅ Socket (์์ผ)
- ๋คํธ์ํฌ ์์ผ ํต์ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ค.
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์์ผ์ ํตํด์ ํต์ ํ๋ ๊ตฌ์กฐ๋ก, ์๊ฒฉ์์ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๋ ์ฌ์ฉํ๋ค.
๐ธ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์คํ
- ์๋ฐฉํฅ ํต์ ์ด๋ค.
- ๊ณต์ ๋งค๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์ด๋ค.
- ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๋ค์ด ์ฃผ์๊ณต๊ฐ์ ์ผ๋ถ๋ฅผ ๊ณต์ ํ๋ฉฐ, ๊ณต์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ํตํด ํต์ ํ๋ค.
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ ๋๋ฉด, ๊ทธ ์ดํ ํต์ ์ ์ปค๋์ ๊ด์ฌ ์์ด ์งํ ๊ฐ๋ฅํ๋ค.
- ์ค๊ฐ์ ์์ด ๊ณง๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ IPC ์ค์์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์๋ํ๋ค. (์ปค๋์ ๊ด์ฌ๊ฐ ์์ด ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์!)
- ํ๋ก๊ทธ๋จ ๋ ๋ฒจ์์ ํต์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์์ ๋ก์ด ํต์ ์ด ๊ฐ๋ฅํ๋ค.
- ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ปค๋์ ์์ฒญํ๋ฉด, ์ปค๋์ ํด๋น ํ๋ก์ธ์ค์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด์ฃผ๊ณ , ์ดํ ๋ชจ๋ ํ๋ก์ธ์ค๋ ํด๋น ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค. (๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ID๋ฅผ ์๋ฉด ๋๊ตฌ๋ ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ ๊ฐ๋ฅ)
๐ฅ File - Memory mapping (๋ฉ๋ชจ๋ฆฌ ๋งต)
- ๋ฉ๋ชจ๋ฆฌ ๋งต์ ์ด๋ฆฐ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ๋งคํ์์ผ์ ๊ณต์ ํ๋ ๋ฐฉ์์ด๋ค (์ฆ, ๊ณต์ ๋งค๊ฐ์ฒด๊ฐ ํ์ผ + ๋ฉ๋ชจ๋ฆฌ์ด๋ค.)
- ์ฃผ๋ก ํ์ผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด์ผํ ๋ ์ฌ์ฉํ๋ค.
โ ๋ฉด์ ๋ ๋์ฌ ๋งํ ์ง๋ฌธ๋ค
- ํ๋ก์ธ์ค๊ฐ ํต์ ์ด ํ์ํ ์ด์ ๋?
- ํน์ ํ
์คํฌ๋ฅผ ๋นจ๋ฆฌ ์คํํ๊ณ ์ ํ๋ค๋ฉด ๋ณ๋ ฌ์ฒ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์๋ก ๋ฐ์ดํฐ์ ๊ณต์ ๊ฐ ํ์ํฉ๋๋ค.
ํ๋ก์ธ์ค๋ ๊ฐ์ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์๋๋ฐ, ์๋ก์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๋๊ตฌ๊ฐ ํ์ํ ๊ฒ์ ๋๋ค.
- ํน์ ํ
์คํฌ๋ฅผ ๋นจ๋ฆฌ ์คํํ๊ณ ์ ํ๋ค๋ฉด ๋ณ๋ ฌ์ฒ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์๋ก ๋ฐ์ดํฐ์ ๊ณต์ ๊ฐ ํ์ํฉ๋๋ค.
๐ Reference
https://dong-wook94.github.io/cs/2020/11/10/cs-os-ipc/
https://velog.io/@qweadzs/CS-IPCInter-Process-Communication
https://github.com/workhardslave/cs-study/blob/main/OS/IPC%26RPC.md
https://parkgaebung.tistory.com/64