์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ, "Linux์ ๊ฐ์ ํ์ผ ์์คํ
: ์ ํ์ํ๋ฉฐ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?" ์ถํ๋ฌผ์ ๋ ๋ฒ์งธ ๋ถ๋ถ์ ๊ณต์ ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ์ฝ์ ์ ์์ต๋๋ค
eBPF ๋ฐ bcc ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ VFS๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๋ฐฉ๋ฒ
์ปค๋์ด ํ์ผ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ sysfs
์ค์ ๋ก ๋ณด๋ ๊ฒ์ธ๋ฐ, ARM64๋ฅผ ์์ฒญํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ eBPF๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. eBPF(Berkeley Packet Filter์ ์ฝ์ด)๋ ๋ค์์์ ์คํ๋๋ ๊ฐ์ ๋จธ์ ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. query
) ๋ช
๋ น์ค์์. ์ปค๋ ์์ค๋ ๋
์์๊ฒ ์ปค๋์ด ๋ฌด์์ ํ ์ ์๋์ง ์๋ ค์ค๋๋ค. ๋ก๋๋ ์์คํ
์์ eBPF ๋๊ตฌ๋ฅผ ์คํํ๋ฉด ์ปค๋์ด ์ค์ ๋ก ์ํํ๋ ์์
์ด ํ์๋ฉ๋๋ค.
๋คํํ eBPF ์ฌ์ฉ์ ์์ํ๋ ๊ฒ์ ๋๊ตฌ์ ๋์์ผ๋ก ๋งค์ฐ ์ฝ์ต๋๋ค. bcc
C ์ฝ๋๊ฐ ์ฝ๊ฐ ์ฝ์
๋ Python ์คํฌ๋ฆฝํธ์ด๋ฏ๋ก ๋ ์ธ์ด์ ์ต์ํ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ ์ฝ๊ฒ ์์ ํ ์ ์์ต๋๋ค. ์์ bcc/tools
80๊ฐ์ Python ์คํฌ๋ฆฝํธ๊ฐ ์์ผ๋ฉฐ ์ด๋ ๊ฐ๋ฐ์๋ ์์คํ
๊ด๋ฆฌ์๊ฐ ๋ฌธ์ ํด๊ฒฐ์ ์ ํฉํ ๊ฒ์ ์ ํํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์คํ ์ค์ธ ์์คํ
์์ VFS๊ฐ ์ํํ๋ ์์
์ ๋ํ ์ต์ํ์ ํผ์์ ์ธ ์์ด๋์ด๋ฅผ ์ป์ผ๋ ค๋ฉด ๋ค์์ ์๋ํ์ญ์์ค. vfscount
๋๋ vfsstat
. ์๋ฅผ ๋ค์ด ์์ญ ๊ฑด์ ํธ์ถ์ด ํ์๋ฉ๋๋ค. vfs_open()
๊ทธ๋ฆฌ๊ณ "๊ทธ์ ์น๊ตฌ๋ค"์ ๋ง ๊ทธ๋๋ก ๋งค์ด๋ง๋ค ์ผ์ด๋ฉ๋๋ค.
vfsstat.py
๋จ์ํ VFS ํจ์ ํธ์ถ์ ๊ณ์ฐํ๋ C ์ฝ๋ ์ฝ์ ์ด ํฌํจ๋ Python ์คํฌ๋ฆฝํธ์ ๋๋ค.
์ข ๋ ๊ฐ๋จํ ์๋ฅผ ๋ค์ด USB ํ๋์ ๋๋ผ์ด๋ธ๋ฅผ ์ปดํจํฐ์ ์ฝ์ ํ๊ณ ์์คํ ์ด ์ด๋ฅผ ๊ฐ์งํ๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
eBPF๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
/sys
USB ํ๋์ ๋๋ผ์ด๋ธ๋ฅผ ์ฝ์ ํ ๊ฒฝ์ฐ. ์ฌ๊ธฐ์๋ ๊ฐ๋จํ๊ณ ๋ณต์กํ ์๊ฐ ๋์ ์์ต๋๋ค.
์์ ํ์๋ ์์์, bcc
ะธะฝััััะผะตะฝั sysfs_create_files()
. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ณธ๋ค sysfs_create_files()
์ฌ์ฉํ์ฌ ์ถ์๋์์ต๋๋ค. kworker
ํ๋์ ๋๋ผ์ด๋ธ๋ฅผ ์ฝ์
ํ๋ค๋ ์ฌ์ค์ ๋ํ ์๋ต์ผ๋ก ์คํธ๋ฆฌ๋ฐํ๋๋ฐ ์ด๋ค ํ์ผ์ด ์์ฑ ๋์์ต๋๊น? ๋ ๋ฒ์งธ ์๋ eBPF์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋ณด์ฌ์ค๋๋ค. ์ฌ๊ธฐ trace.py
์ปค๋ ์ญ์ถ์ (-K ์ต์
)๊ณผ ์์ฑ๋ ํ์ผ ์ด๋ฆ์ ์ธ์ํฉ๋๋ค. sysfs_create_files()
. ๋จ์ผ ๋ช
๋ น๋ฌธ ์ฝ์
์ LLVM์ ์คํํ๋ Python ์คํฌ๋ฆฝํธ์์ ์ ๊ณตํ๋ ์ฝ๊ฒ ์ธ์ํ ์ ์๋ ํ์ ๋ฌธ์์ด์ ํฌํจํ๋ C ์ฝ๋์
๋๋ค. ์ ์ ์ปดํ์ผ๋ฌ. ์ด ์ค์ ์ปดํ์ผํ๊ณ ์ปค๋ ๋ด๋ถ์ ๊ฐ์ ๋จธ์ ์์ ์คํํฉ๋๋ค. ์ ์ฒด ๊ธฐ๋ฅ ์๋ช
sysfs_create_files ()
ํ์ ๋ฌธ์์ด์ด ๋งค๊ฐ๋ณ์ ์ค ํ๋๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก ๋ ๋ฒ์งธ ๋ช
๋ น์์ ์ฌํ๋์ด์ผ ํฉ๋๋ค. ์ด C ์ฝ๋ ์กฐ๊ฐ์ ์ค๋ฅ๋ก ์ธํด C ์ปดํ์ผ๋ฌ์์ ์ธ์ ๊ฐ๋ฅํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด -l ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ๋ฉด "BPF ํ
์คํธ ์ปดํ์ผ์ ์คํจํ์ต๋๋ค."๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. C ๋ฐ Python์ ์ต์ํ ๊ฐ๋ฐ์๋ ๋๊ตฌ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. bcc
ํ์ฅ ๋ฐ ๋ณ๊ฒฝ์ด ์ฝ์ต๋๋ค.
USB ๋๋ผ์ด๋ธ๊ฐ ์ฝ์
๋๋ฉด ์ปค๋ ์ญ์ถ์ ์ PID 7711์ด ์ค๋ ๋์ธ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค. kworker
ํ์ผ์ ๋ง๋ ์ฌ๋ ยซeventsยป
ะฒ sysfs
. ์ด์ ๋ฐ๋ผ, sysfs_remove_files()
๋๋ผ์ด๋ธ๋ฅผ ์ ๊ฑฐํ๋ฉด ํ์ผ์ด ์ญ์ ๋๋ค๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. events
, ์ด๋ ์ฐธ์กฐ ์นด์ดํ
์ ์ผ๋ฐ์ ์ธ ๊ฐ๋
์ ํด๋นํฉ๋๋ค. ๋์์ ์์ฒญ ์ค sysfs_create_link ()
USB ๋๋ผ์ด๋ธ๋ฅผ ์ฝ์
ํ๋ ๋์ eBPF๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์ 48๊ฐ์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ ์์ฑ๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฒคํธ ํ์ผ์ ์์ ์ ๋ฌด์์
๋๊น? ์ฉ๋ฒ disk_add_events ()
, ๊ทธ๋ฆฌ๊ณ "media_change"
๋๋ "eject_request"
์ด๋ฒคํธ ํ์ผ์ ๊ธฐ๋ก๋ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ปค๋ ๋ธ๋ก ๊ณ์ธต์ "๋์คํฌ"๊ฐ ๋ํ๋ฌ๋ค๊ฐ ๊บผ์ก๋ค๋ ์ฌ์ค์ ์ฌ์ฉ์ ๊ณต๊ฐ์ ์๋ฆฝ๋๋ค. USB ๋๋ผ์ด๋ธ๋ฅผ ์ฝ์
ํ๋ ์ด ์ฐ๊ตฌ ๋ฐฉ๋ฒ์ด ์์ค์์ ์์ํ๊ฒ ์๋ํ๋ ๋ฐฉ์์ ์์๋ด๋ ค๊ณ ์๋ํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ์ผ๋ง๋ ์ ์ตํ์ง ํ์ธํ์ธ์.
์ฝ๊ธฐ ์ ์ฉ ๋ฃจํธ ํ์ผ ์์คํ ์ผ๋ก ์๋ฒ ๋๋ ์ฅ์น ํ์ฑํ
๋ฌผ๋ก ์์ผ์์ ํ๋ฌ๊ทธ๋ฅผ ๋ฝ์ ์๋ฒ๋ ์ปดํจํฐ๋ฅผ ๋๋ ์ฌ๋์ ์๋ฌด๋ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์? ์ด๋ ๋ฌผ๋ฆฌ์ ์ ์ฅ ์ฅ์น์ ๋ง์ดํธ๋ ํ์ผ ์์คํ
์ ์ฐ๊ธฐ ์ง์ฐ์ด ์์ ์ ์๊ณ ํด๋น ์ํ๋ฅผ ๊ธฐ๋กํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์ ์ฅ์์ ๋ํ ์ฐ๊ธฐ์ ๋๊ธฐํ๋์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋ฉด ์์คํ
์์ ์๋ ์ ํธ๋ฆฌํฐ๋ฅผ ์์ํ๊ธฐ ์ํด ๋ค์ ๋ถํ
๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. fsck filesystem-recovery
์ต์
์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ๋ชจ๋๋ ๋ผ์ฐํฐ, ์จ๋ ์กฐ์ ๊ธฐ, ์๋์ฐจ๋ฟ๋ง ์๋๋ผ ๋ง์ IoT ์ฅ์น๊ฐ ์ด์ Linux๋ฅผ ์คํํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์ฅ์น ์ค ๋ค์์๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ๊ฑฐ์ ๋๋ ์ ํ ์์ผ๋ฉฐ "์์ ํ" ๋ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ ์ด ์ฅ์น์ ์ ์์ด ๊บผ์ก์ ๋ ๋ฐฐํฐ๋ฆฌ๊ฐ ๋ฐฉ์ ๋ ์๋์ฐจ์ ์๋์ ๊ฑธ์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. fsck
๋ง์นจ๋ด ์์ง์ ์ธ์ ์๋ํ๊ธฐ ์์ํฉ๋๊น? ๋๋ต์ ๊ฐ๋จํฉ๋๋ค. ์๋ฒ ๋๋ ์ฅ์น๋ ๋ฃจํธ ํ์ผ ์์คํ
์ ์์กดํฉ๋๋ค. ro-rootfs
(์ฝ๊ธฐ ์ ์ฉ ๋ฃจํธ ํ์ผ ์์คํ
)).
ro-rootfs
์ง์ ์ฑ๋ณด๋ค ๋ ๋ถ๋ช
ํ ๋ง์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ํ ๊ฐ์ง ์ฅ์ ์ ์
์ฑ์ฝ๋๊ฐ ๋ฐ์ดํฐ์ ์ธ ์ ์๋ค๋ ๊ฒ์
๋๋ค. /usr
๋๋ /lib
, Linux ํ๋ก์ธ์ค๊ฐ ๊ฑฐ๊ธฐ์ ์ธ ์ ์๋ ๊ฒฝ์ฐ. ๋ ๋ค๋ฅธ ์ ์ ์ง์ ์ธ๋ ฅ์ด ๋ช
๋ชฉ์ ํ์ฅ ์์คํ
๊ณผ ๋์ผํ ๋ก์ปฌ ์์คํ
์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์๊ฒฉ ์ฅ์น์ ํ์ฅ ์ง์์๋ ๋์ฒด๋ก ๋ถ๋ณ์ ์ธ ํ์ผ ์์คํ
์ด ์ค์ํ๋ค๋ ๊ฒ์
๋๋ค. ์๋ง๋ ๊ฐ์ฅ ์ค์ํ์ง๋ง ๊ฐ์ฅ ๊ตํํ ์ด์ ์ ro-rootfs๊ฐ ๊ฐ๋ฐ์์๊ฒ ์์คํ
์ค๊ณ ๋จ๊ณ์์ ์ด๋ค ์์คํ
๊ฐ์ฒด๊ฐ ๋ถ๋ณ์ธ์ง ๊ฒฐ์ ํ๋๋ก ๊ฐ์ํ๋ค๋ ๊ฒ์
๋๋ค. const ๋ณ์๋ ์ข
์ข
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ro-rootfs๋ก ์์
ํ๋ ๊ฒ์ ์ด์ํ๊ณ ๊ณ ํต์ค๋ฌ์ธ ์ ์์ง๋ง ๊ทธ ์ด์ ์ ์ถ๊ฐ ์ค๋ฒํค๋๋ฅผ ์ฝ๊ฒ ์ ๋นํํฉ๋๋ค.
์ฐฝ์กฐ rootfs
์ฝ๊ธฐ ์ ์ฉ์ ์๋ฒ ๋๋ ๊ฐ๋ฐ์์๊ฒ ์ถ๊ฐ์ ์ธ ๋
ธ๋ ฅ์ด ํ์ํ๋ฉฐ, ์ฌ๊ธฐ์ VFS๊ฐ ๋ฑ์ฅํฉ๋๋ค. Linux์์๋ ํ์ผ์ด ๋ค์ ์์น์ ์์ด์ผ ํฉ๋๋ค. /var
์ฐ๊ธฐ ๊ฐ๋ฅํ์ผ๋ฉฐ ๋ํ ์๋ฒ ๋๋ ์์คํ
์ ์คํํ๋ ๋ง์ ์ธ๊ธฐ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ๊ตฌ์ฑ์ ์์ฑํ๋ ค๊ณ ์๋ํ ๊ฒ์
๋๋ค. dot-files
ะฒ $HOME
. ํ ๋๋ ํ ๋ฆฌ์ ๊ตฌ์ฑ ํ์ผ์ ๋ํ ํ ๊ฐ์ง ์๋ฃจ์
์ ์ผ๋ฐ์ ์ผ๋ก ํ ๋๋ ํ ๋ฆฌ์ ์๋ ๊ตฌ์ฑ ํ์ผ์ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ ๋น๋ํ๋ ๊ฒ์
๋๋ค. rootfs
. ์ /var
ํ ๊ฐ์ง ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ ๋ณ๋์ ์ฐ๊ธฐ ๊ฐ๋ฅํ ํํฐ์
์ ๋ง์ดํธํ๋ ๊ฒ์
๋๋ค. /
์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋ง์ดํธ๋์์ต๋๋ค. ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ๋์์ ๋ฐ์ธ๋ ๋๋ ์ค๋ฒ๋ ์ด ๋ง์ดํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
์ฐ๊ฒฐ ๊ฐ๋ฅํ๊ณ ์์ ์ ์๋ ๋ง์ดํธ, ์ปจํ ์ด๋์์์ ์ฌ์ฉ
๋ช
๋ น ์คํ man mount
๊ฐ๋ฐ์์ ์์คํ
๊ด๋ฆฌ์๊ฐ ํ ๊ฒฝ๋ก์์ ํ์ผ ์์คํ
์ ์์ฑํ ๋ค์ ์ด๋ฅผ ๋ค๋ฅธ ๊ฒฝ๋ก์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋
ธ์ถํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฐ์ธ๋ฉ ๋ฐ ์ค๋ฒ๋ ์ด ๊ฐ๋ฅํ ๋ง์ดํธ์ ๋ํด ๋ฐฐ์ธ ์ ์๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. ์๋ฒ ๋๋ ์์คํ
์ ๊ฒฝ์ฐ ์ด๋ ํ์ผ์ ์ ์ฅํ ์ ์๋ ๊ธฐ๋ฅ์ ์๋ฏธํฉ๋๋ค. /var
์ฝ๊ธฐ ์ ์ฉ ํ๋์ ๋๋ผ์ด๋ธ์ ์์ง๋ง ์ค๋ฒ๋ ์ด ๋๋ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ๋ง์ดํธ ๊ฒฝ๋ก๋ tmpfs
ะฒ /var
๋ก๋ํ ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๊ฑฐ๊ธฐ์ ๋ฉ๋ชจ๋ฅผ ์ธ ์ ์์ต๋๋ค(์คํฌ๋กค). ๋ค์์ ๋ณ๊ฒฝ์ฌํญ์ ์ฌ์ฉ ์ค์ ํ ๋ /var
์๊ฒ ๋ ๊ฒ์ด๋ค. ์ค๋ฒ๋ ์ด ๋ง์ดํธ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐํฉ์ ์์ฑํฉ๋๋ค. tmpfs
๋ฐ ๊ธฐ๋ณธ ํ์ผ ์์คํ
์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ํ์ผ์ ํ๋ฉด์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ro-tootf
๋ฐ์ธ๋ฉ ๊ฐ๋ฅํ ๋ง์ดํธ๋ ์ ๋ง์ดํธ๋ฅผ ๋น์ธ ์ ์์ต๋๋ค. tmpfs
์ฐ๊ธฐ ๊ฐ๋ฅํ ํด๋ ํ์ ro-rootfs
๋ฐฉ๋ฒ. ํ๋ ๋์ overlayfs
์ด๊ฒ ๋ง๋ค(proper
) ํ์ผ ์์คํ
์ ํ, ๋ฐ์ธ๋ฉ ๊ฐ๋ฅํ ๋ง์ดํธ๊ฐ ๊ตฌํ๋จ
์ค๋ฒ๋ ์ด์ ์ฐ๊ฒฐ ๊ฐ๋ฅํ ๋ง์ดํธ์ ๋ํ ์ค๋ช
์ ๋ณด๋ฉด ๋๊ตฌ๋ ๋๋ผ์ง ์์ ๊ฒ์
๋๋ค. mountsnoop
๋ถํฐ bcc
.
๋์ system-nspawn
์คํ ์ค์ ์ปจํ
์ด๋๋ฅผ ์์ํฉ๋๋ค. mountsnoop.py
.
๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ๋ด ์๋ค:
์ถ์ mountsnoop
์ปจํ
์ด๋๊ฐ "๋ถํ
"๋๋ ๋์ ์ปจํ
์ด๋์ ๋ฐํ์์ ์ฐ๊ฒฐ๋๋ ๋ง์ดํธ์ ํฌ๊ฒ ์์กดํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค(๊ธด ์ถ๋ ฅ์ ์์ ๋ถ๋ถ๋ง ํ์๋จ).
์ฌ๊ธฐ์ systemd-nspawn
์ ํํ ํ์ผ์ ์ ๊ณตํฉ๋๋ค procfs
ะธ sysfs
ํธ์คํธ๋ฅผ ์ปจํ
์ด๋์ ๋ํ ๊ฒฝ๋ก๋ก ์ฌ์ฉ rootfs
. ๊ฒ๋ค๊ฐ MS_BIND
๋ฐ์ธ๋ฉ ๋ง์ดํธ๋ฅผ ์ค์ ํ๋ ํ๋๊ทธ์ ๋ง์ดํธ์ ๋ค๋ฅธ ์ผ๋ถ ํ๋๊ทธ๋ ํธ์คํธ์ ์ปจํ
์ด๋ ๋ค์์คํ์ด์ค์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฐ๊ฒฐ๋ ๋ง์ดํธ๋ ๋ค์ ์ค ํ๋์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค. /proc
ะธ /sys
์ปจํ
์ด๋์ ๋ฃ๊ฑฐ๋ ํธ์ถ์ ๋ฐ๋ผ ์จ๊ธธ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Linux์ ๋ด๋ถ ์๋ ๋ฐฉ์์ ์ดํดํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ ์์
์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค. ์ปค๋ ์์ฒด์๋ ์์ฒญ๋ ์์ ์ฝ๋๊ฐ ํฌํจ๋์ด ์๊ณ Linux ์ฌ์ฉ์ ๊ณต๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๋ค์๊ณผ ๊ฐ์ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์คํ
ํธ์ถ ์ธํฐํ์ด์ค๋ ์ ์ณ๋๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค. glibc
. ๋ฐ์ ํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์คํ
ํธ์ถ๊ณผ ์ฌ์ฉ์ ๊ณต๊ฐ ํค๋๋ ๋ฌผ๋ก ํ
์ด๋ธ๊ณผ ๊ฐ์ ์ฃผ์ ๋ด๋ถ ์ปค๋ ์ธํฐํ์ด์ค๋ฅผ ์ดํดํ๋ ๋ฐ ์ค์ ์ ๋๊ณ ํ๋์ ์ปค๋ ํ์ ์์คํ
์ ์์ค ์ฝ๋๋ฅผ ์ฝ๋ ๊ฒ์
๋๋ค. file_operations
. ํ์ผ ์์
์ "๋ชจ๋ ๊ฒ์ด ํ์ผ์" ์์น์ ์ ๊ณตํ๋ฏ๋ก ๊ด๋ฆฌํ๊ธฐ๊ฐ ํนํ ์ฆ๊ฒ์ต๋๋ค. ์ต์์ ๋๋ ํฐ๋ฆฌ์ C ์ปค๋ ์์ค ํ์ผ fs/
๋๋ฆฌ ์ฌ์ฉ๋๋ ํ์ผ ์์คํ
๊ณผ ์ ์ฅ ์ฅ์น ๊ฐ์ ๊ด๋ฒ์ํ๊ณ ์๋์ ์ผ๋ก ๊ฐ๋จํ ํธํ์ฑ์ ์ ๊ณตํ๋ ๋ํผ ๊ณ์ธต์ธ ๊ฐ์ ํ์ผ ์์คํ
์ ๊ตฌํ์ ์ ์ํฉ๋๋ค. Linux ๋ค์์คํ์ด์ค๋ฅผ ํตํ ์ฐ๊ฒฐ ๋ฐ ์ค๋ฒ๋ ์ด ๋ง์ดํธ๋ ์ฝ๊ธฐ ์ ์ฉ ์ปจํ
์ด๋์ ๋ฃจํธ ํ์ผ ์์คํ
์์ฑ์ ๊ฐ๋ฅํ๊ฒ ํ๋ VFS์ ๋ง๋ฒ์
๋๋ค. ์์ค ์ฝ๋, eBPF ํต์ฌ ๋๊ตฌ ๋ฐ ์ธํฐํ์ด์ค ๊ฒ์ฌ์ ๊ฒฐํฉ bcc
ํต์ฌ ํ์์ ๊ทธ ์ด๋ ๋๋ณด๋ค ์ฝ๊ฒ โโ๋ง๋ญ๋๋ค.
์น๊ตฌ ์ฌ๋ฌ๋ถ, ์ด ๊ธฐ์ฌ๊ฐ ๋์์ด ๋์์ต๋๊น? ํน์ ์๊ฒฌ์ด๋ ์๊ฒฌ์ด ์์ผ์ ๊ฐ์? ๊ทธ๋ฆฌ๊ณ Linux ๊ด๋ฆฌ์ ๊ณผ์ ์ ๊ด์ฌ์ด ์๋ ๋ถ๋ค์ ์ด๋ํฉ๋๋ค.
์ถ์ฒ : habr.com