๋ฒ์ง๋์ ๊ณต๋ ะฟัะตะดะปะพะถะธะป Linux ์ปค๋ ๊ฐ๋ฐ์์ ๋
ผ์๋ฅผ ์ํด ๋ถ์ฐ ์ค๋ ๋ ์คํ ์์คํ
์ ๊ตฌํํ๋ ํจ์น ์ธํธ ํ์ฝ (๋ถ์ฐ ์ค๋ ๋ ์คํ) - ํธ์คํธ ๊ฐ ์ค๋ ๋ ๋ฐฐํฌ ๋ฐ ํฌ๋ช
ํ ๋ง์ด๊ทธ๋ ์ด์
์ ํตํด ์ฌ๋ฌ ์ปดํจํฐ์์ ์ ํ๋ฆฌ์ผ์ด์
์คํ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. Popcorn์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ํ ํธ์คํธ์์ ์์ํ ๋ค์ ์ค๋จ ์์ด ๋ค๋ฅธ ํธ์คํธ๋ก ์ด๋ํ ์ ์์ต๋๋ค. ๋ค์ค ์ค๋ ๋ ํ๋ก๊ทธ๋จ์์๋ ๊ฐ๋ณ ์ค๋ ๋๋ฅผ ๋ค๋ฅธ ํธ์คํธ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒ์ด ํ์ฉ๋ฉ๋๋ค.
ํ๋ก์ ํธ์๋ ๋ค๋ฅด๊ฒ ํฌ๋ฆฌ ์ฐPopcorn์ ํ๋ก์ธ์ค ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ค๋ฅธ ์์คํ
์์ ์คํ์ ์ฌ๊ฐํ ์ ์๋๋ก ํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์
์คํ ์ค์ ํธ์คํธ ๊ฐ์ ์ํํ๊ณ ๋์ ์ธ ๋ง์ด๊ทธ๋ ์ด์
์ ์ ๊ณตํ๋ฏ๋ก ์ฌ์ฉ์ ์์
์ด ํ์ํ์ง ์์ผ๋ฉฐ ๋์ ์ค๋ ๋๋ฅผ ์คํํ๋ ๋ชจ๋ ํธ์คํธ์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
ํ์ฝ ์ํํธ์จ์ด ์คํ ํํ ํจ์น ๋ฆฌ๋
์ค ์ปค๋๊ณผ ะฑะธะฑะปะธะพัะตะบะฐ Popcorn ์์คํ
ํธ์ถ์ ์ฌ์ฉํ์ฌ ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ค๋ ๋๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ํ
์คํธ๋ฅผ ํตํด ์ปค๋ ์์ค์์๋ ๋ถ์ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ตฌํํ์ฌ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ์ ์์คํ
์ ๋ํ ํ์ฅ์ด ์ ์๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ํธ์คํธ์ ํ๋ก์ธ์ค๊ฐ ๊ณตํต์ ์ด๊ณ ์ผ๊ด๋ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง ์ผ๊ด์ฑ์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ์ฝ์ ๋ ํธ์คํธ์ ๋ณต์ ํ๊ณ ์ธ ๋ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ๋ฌดํจํํ๋ ํ๋กํ ์ฝ์ ํตํด ๋ณด์ฅ๋ฉ๋๋ค.
ํธ์คํธ ๊ฐ์ ์ํธ ์์ฉ์ TCP ์์ผ์ ํตํด ์ ์ก๋๋ ๋ฉ์์ง์ ๋ํ ์ปค๋ ์์ค ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ๊ฐ๋ฐ ๊ณผ์ ์์ ๋๋ฒ๊น
๊ณผ ํ
์คํธ๋ฅผ ๋จ์ํํ๊ธฐ ์ํด TCP/IP๊ฐ ์ฌ์ฉ๋๋ค๋ ์ ์ ์ฃผ๋ชฉํ์ธ์. ๊ฐ๋ฐ์๋ ๋ณด์ ๋ฐ ์ฑ๋ฅ ๊ด์ ์์ TCP/IP๊ฐ ์ปค๋ ๊ตฌ์กฐ์ ๋ด์ฉ๊ณผ ํธ์คํธ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ์ ์กํ๋ ์ต์ ์ ๋ฐฉ๋ฒ์ด ์๋๋ผ๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ ๋ชจ๋ ํธ์คํธ๋ ๋์ผํ ์ ๋ขฐ ์์ค์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์ฃผ์ ์๊ณ ๋ฆฌ์ฆ์ด ์์ ํ๋ ํ์๋ ๋ณด๋ค ํจ์จ์ ์ธ ์ด์ก ๋ชจ๋๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
ํ์ฝ์ 2014๋
๋ถํฐ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ๋
ธ๋์์ ์คํ๋ ์ ์๋ ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ฑ ๊ฐ๋ฅ์ฑ์ ์ฐ๊ตฌํ๊ธฐ ์ํ ์ฐ๊ตฌ ํ๋ก์ ํธ๋ก ๊ฐ๋ฐ๋์ด ์์ต๋๋ค. ์ด์ง์ ์ธ ๋ค์ํ ๋ช
๋ น์ด ์ธํธ ์ํคํ
์ฒ(Xeon/Xeon-Phi, ARM/x86, CPU/GPU/FPGA)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฝ์ด๋ฅผ ๊ฒฐํฉํ ์ ์๋ ์ปดํจํ
์์คํ
. Linux ์ปค๋ ๊ฐ๋ฐ์์๊ฒ ์ ์๋ ํจ์น ์ธํธ๋ x86 CPU๊ฐ ์๋ ํธ์คํธ์์๋ง ์คํ์ ์ง์ํ์ง๋ง, ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ค๋ฅธ CPU ์ํคํ
์ฒ(x86 ๋ฐ ARM)๋ฅผ ์ฌ์ฉํ๋ ํธ์คํธ์์ ์คํ๋ ์ ์๋๋ก ํ๋ ๋ณด๋ค ๊ธฐ๋ฅ์ ์ธ ๋ฒ์ ์ Popcorn Linux๋ ์์ต๋๋ค. ์ด๊ธฐ์ข
ํ๊ฒฝ์์ ํ์ฝ์ ์ฌ์ฉํ๋ ค๋ฉด ํน์ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ปดํ์ผ๋ฌ LLVM ๊ธฐ๋ฐ. ๋์ผํ ์ํคํ
์ฒ์ ํธ์คํธ์์ ๋ถ์ฐ ์คํํ๋ ๊ฒฝ์ฐ ๋ณ๋์ ์ปดํ์ผ๋ฌ๋ก ๋ค์ ๋น๋ํ ํ์๊ฐ ์์ต๋๋ค.
๊ฒ๋ค๊ฐ ์ฃผ๋ชฉํ ์ ์๋ ๊ฒ์ ๋ฐํ ๋ค์ ์ ์ฌํ ํ๋ก์ ํธ ํ
๋ ํฌํฌ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ์ปดํจํฐ์์ ํ์ ํ๋ก์ธ์ค๋ฅผ ์์ํ๊ธฐ ์ํ ์ด๊ธฐ ํ๋กํ ํ์
API๋ฅผ ๊ตฌํํฉ๋๋ค(fork()์ ์ ์ฌํ์ง๋ง ํฌํฌ๋ ํ๋ก์ธ์ค๋ฅผ ๋ค๋ฅธ ์ปดํจํฐ๋ก ์ ์ก).
์ฝ๋๋ Rust๋ก ์์ฑ๋์์ผ๋ฉฐ ์ง๊ธ๊น์ง๋ ํ์ผ๊ณผ ๊ฐ์ ์์คํ
๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๋งค์ฐ ๊ฐ๋จํ ํ๋ก์ธ์ค๋ง ๋ณต์ ํ ์ ์์ต๋๋ค. ํ
๋ ํฌํฌ ํธ์ถ์ด ์ด๋ฃจ์ด์ง๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ฐ ํ๋ก์ธ์ค ๊ด๋ จ ๊ตฌ์กฐ๊ฐ ์๋ฒ ํธ๋ค๋ฌ(ํ
๋ ํจ๋)๋ฅผ ์คํํ๋ ๋ค๋ฅธ ํธ์คํธ์ ๋ณต์ ๋ฉ๋๋ค. ptrace๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์์ด ์ง๋ ฌํ๋๊ณ ํ๋ก์ธ์ค ๋ฐ ๋ ์ง์คํฐ์ ์ํ์ ํจ๊ป ๋ค๋ฅธ ํธ์คํธ๋ก ์ ์ก๋ฉ๋๋ค. API๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ธ์ค ์ํ๋ฅผ ํ์ผ์ ์ ์ฅํ๊ณ ์ด๋ฅผ ํตํด ๋ณต์ํ ์๋ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru