๋ชจ๋ ์๋
! ์ฐ๋ฆฌ๋ ๋น์ ์ด ์ด๋ฏธ ์ฌ๋์ ๋น ์ง ๊ณผ์ ์ ๋ํ ์๋ก์ด ์คํธ๋ฆผ์ ๊ณ์ ์ถ์ํ๊ณ ์์ผ๋ฉฐ ์ด์ ์ฐ๋ฆฌ๋ ์๋ก์ด ๊ณผ์ ์ธํธ๋ฅผ ์์ํ๋ค๋ ๊ฒ์ ์๋๋ฌ ๋ฐํํฉ๋๋ค.
๊ฐ์ ํ์ผ ์์คํ ์ "๋ชจ๋ ๊ฒ์ด ํ์ผ"์ด๋ผ๋ Linux์ ์ฒ ํ์ ํ์ฉํ๋ ์ผ์ข ์ ๋ง๋ฒ ๊ฐ์ ์ถ์ํ ์ญํ ์ ํฉ๋๋ค.
ํ์ผ ์์คํ
์ด๋ ๋ฌด์์
๋๊น? Linux์ ์ฒซ ๋ฒ์งธ ๊ธฐ์ฌ์์ด์ ์ ์ ์ค ํ ์ฌ๋์ ๋ง์ ๊ธฐ๋ฐ์ผ๋ก ํจ
ํ์ผ ์์คํ ๊ธฐ์ด
Linux ์ปค๋์๋ ํ์ผ ์์คํ
์ผ๋ก ๊ฐ์ฃผ๋ ์ ์๋ ์ํฐํฐ์ ๋ํ ํน์ ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค. open()
, read()
ะธ write()
์ด๋ฆ์ด ์๋ ์๊ตฌ ๊ฐ์ฒด์ ๊ฒฝ์ฐ. ๊ฐ์ฒด์งํฅ์ ๊ด์ ์์
์ํฐํฐ๋ฅผ ์ด๊ณ ์ฝ๊ณ ์ธ ์ ์๋ ๊ฒฝ์ฐ ์ ์ฝ์์ ์์์ ๋ณผ ์ ์๋ฏ์ด ํด๋น ์ํฐํฐ๋ ํ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
VFS ํ์์ "๋ชจ๋ ๊ฒ์ด ํ์ผ"์ด๋ผ๋ Unix์ ๊ฐ์ ๊ด์ฐฐ์ ๊ฐ์กฐํ ๋ฟ์
๋๋ค. ์์ ์์ /dev/console ์์ ๊ฐ ์ฝ์์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์ผ๋ง๋ ์ด์ํ์ง ์๊ฐํด ๋ณด์ญ์์ค. ๊ทธ๋ฆผ์ ๋ํ์ Bash ์ธ์
์ ๋ณด์ฌ์ค๋๋ค. ๋ฌธ์์ด์ ์ฝ์(๊ฐ์ ์ฝ์ ์ฅ์น)๋ก ๋ณด๋ด๋ฉด ๊ฐ์ ํ๋ฉด์ ํ์๋ฉ๋๋ค. VFS์๋ ๋ค๋ฅธ ๋ฏ์ ์์ฑ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์์ผ๋ก ๊ฒ์ํ ์ ์์ต๋๋ค.
ext4, NFS ๋ฐ /proc๊ณผ ๊ฐ์ ์น์ํ ์์คํ
์๋ C ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ์ค์ํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. read()
ํ๋์ ํ์ผ ์์คํ
์ ์ ํํ ๋ค์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ญ์์ค. write ()
๋ฐ์ดํฐ ์ถ๋ ฅ์ ์ํ ๋ค๋ฅธ ํ์ผ ์์คํ
.
๊ธฐ๋ณธ VFS ์ ํ์ ์ํ๋ ํจ์ ์ ์๋ ํ์ผ์ ์์ต๋๋ค. fs/
ํน์ ํ์ผ ์์คํ
์ ํฌํจํฉ๋๋ค. ์ฝ์ด์๋ ๋ค์๊ณผ ๊ฐ์ ์ํฐํฐ๋ ํฌํจ๋ฉ๋๋ค. cgroups
, /dev
ะธ tmpfs
, ๋ถํ
ํ๋ก์ธ์ค ์ค์ ํ์ํ๋ฏ๋ก ์ปค๋ ํ์ ๋๋ ํ ๋ฆฌ์ ์ ์๋ฉ๋๋ค. init/
. ๊ทธ๊ฒ์์ฃผ์ํด๋ผ cgroups
, /dev
ะธ tmpfs
"๋น
XNUMX" ํจ์๋ฅผ ํธ์ถํ์ง ๋ง์ญ์์ค. file_operations
, ๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ฝ๊ณ ์๋๋ค.
์๋ ๋ค์ด์ด๊ทธ๋จ์ ์ฌ์ฉ์ ๊ณต๊ฐ์ด Linux ์์คํ
์ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ดํธ๋๋ ๋ค์ํ ์ ํ์ ํ์ผ ์์คํ
์ ์ก์ธ์คํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ํ์๋์ง ์์ ๊ตฌ์กฐ pipes
, dmesg
ะธ POSIX clocks
, ๋ํ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ file_operations
, VFS ๊ณ์ธต์ ํตํด ์ก์ธ์คํฉ๋๋ค.
VFS๋ ์์คํ
ํธ์ถ๊ณผ ํน์ ๊ตฌํ ์ฌ์ด์ "๋ํผ ๊ณ์ธต"์
๋๋ค. file_operations
์ ๊ฐ์ ext4
ะธ procfs
. ๊ธฐ๋ฅ file_operations
์ฅ์น ๋๋ผ์ด๋ฒ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค ์ฅ์น์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค. tmpfs
, devtmpfs
ะธ cgroups
์ฌ์ฉํ์ง ๋ง์ธ์ file_operations
, ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ก์ธ์คํฉ๋๋ค.
VFS์ ์กด์ฌ๋ ํ์ผ ์์คํ
๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ๊ฐ ํ์ผ ์์คํ
์ ํ์์ ๋ค์ ๊ตฌํํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ํํธ์จ์ด ์์ง๋์ด ์ฌ์ด์์ ์ผ๋ฐ์ ์ธ ๊ดํ์
๋๋ค! ๊ทธ๋ฌ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋์ ๋ค์์ด ํฌํจ๋ ๊ฒฝ์ฐ
/tmp: ๊ฐ๋จํ ํํธ
์์คํ
์ VFS๊ฐ ์๋์ง ๊ฐ์งํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ค์์ ์
๋ ฅํ๋ ๊ฒ์
๋๋ค. mount | grep -v sd | grep -v :/
, ๋ง์ดํธ๋ ๋ชจ๋ ํญ๋ชฉ(mounted
) ๋์คํฌ์ ์์ฃผํ์ง ์๊ณ NFS๊ฐ ์๋ ํ์ผ ์์คํ
(๋๋ถ๋ถ์ ์ปดํจํฐ์ ํด๋น). ๋์ด๋ ๋ง์ดํธ ์ค ํ๋(mounts
) VFS๋ ์์ฌํ ์ฌ์ง ์์ด /tmp
๊ทธ๋ ์ง?
๋๊ตฌ๋ ์๊ณ ์๋ ์คํ ๋ฆฌ์ง / tmp
๋ฌผ๋ฆฌ์ ๋งค์ฒด์์ - ๊ด๊ธฐ!
์ ์ฅํ๋ ๊ฒ์ด ๋ฐ๋์งํ์ง ์์ ์ด์ /tmp
๋ฌผ๋ฆฌ์ ๋งค์ฒด์์? ํ์ผ์ด ๋ค์ด ์๊ธฐ ๋๋ฌธ์ /tmp
์์์ด๋ฉฐ ์ ์ฅ ์ฅ์น๋ tmpfs๊ฐ ์์ฑ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋๋ฆฝ๋๋ค. ๋ํ ๋ฌผ๋ฆฌ์ ๋ฏธ๋์ด๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ฎ์ด์ธ ๋ ๋ง๋ชจ๋๊ธฐ ์ฝ์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก /tmp์ ํ์ผ์๋ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ผ๋ฏ๋ก ์ฌ๋ถํ
ํ ๋๋ง๋ค ํ์ผ์ ์ฌ๋ผ์ง๊ฒ ํ๋ ๊ฒ์ด ํ์ ๊ธฐ๋ฅ์
๋๋ค.
์ํ๊น๊ฒ๋ ์ผ๋ถ Linux ๋ฐฐํฌํ ์ค์น ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฅ ์ฅ์น์ /tmp๋ฅผ ์์ฑํฉ๋๋ค. ์์คํ
์๋ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋๋ผ๋ ์ ๋งํ์ง ๋ง์ญ์์ค. ๋ช ๊ฐ์ง ๊ฐ๋จํ ์ง์นจ์ ๋ฐ๋ฅด์ญ์์ค. tmpfs
๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก๋ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ฆ, ๊ฑฐ๋ํ tmpfs์ ๋์ฉ๋ ํ์ผ์ด ์๋ ์์คํ
์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฐ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ ๋ค๋ฅธ ํํธ: ํ์ผ์ ํธ์งํ๋ ๋์ /etc/fstab
, ์ ์ค๋ก ๋๋์ผ ํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ญ์์ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์คํ
์ด ๋ถํ
๋์ง ์์ต๋๋ค.
/proc ๋ฐ /sys
๊ฒ๋ค๊ฐ /tmp
, Linux ์ฌ์ฉ์์๊ฒ ๊ฐ์ฅ ์น์ํ VFS(๊ฐ์ ํ์ผ ์์คํ
)๋ /proc
ะธ /sys
. (/dev
๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ฉฐ file_operations
). ์ ์ด ๋ ๊ฐ์ง ๊ตฌ์ฑ ์์์
๋๊น? ์ด ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
procfs
์ปค๋๊ณผ ์ปค๋์ด ๋ชจ๋ํฐ๋งํ๋ ํ๋ก์ธ์ค์ ์ค๋
์ท์ ์์ฑํฉ๋๋ค. userspace
. ์ /proc
์ปค๋์ ์ธํฐ๋ฝํธ, ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ค์ผ์ค๋ฌ์ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ํญ๋ชฉ์ ๋ํ ์ ๋ณด๋ฅผ ์ธ์ํฉ๋๋ค. ๊ฒ๋ค๊ฐ, /proc/sys
๋ช
๋ น์ผ๋ก ๊ตฌ์ฑ๋ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์์น์
๋๋ค. sysctl
, ์ฌ์ฉ ๊ฐ๋ฅ userspace
. ๊ฐ๋ณ ํ๋ก์ธ์ค์ ์ํ ๋ฐ ํต๊ณ๋ ๋๋ ํ ๋ฆฌ์ ํ์๋ฉ๋๋ค. /proc/
.
์ฌ๊ธฐ์ /proc/meminfo
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ค์ํ ์ ๋ณด๊ฐ ํฌํจ๋ ๋น ํ์ผ์
๋๋ค.
ํ๋ /proc
files๋ VFS ๋์คํฌ ํ์ผ ์์คํ
์ด ์ผ๋ง๋ ๋ค๋ฅผ ์ ์๋์ง ๋ณด์ฌ์ค๋๋ค. ํ์ชฝ์๋ /proc/meminfo
๋ช
๋ น์ผ๋ก ๋ณผ ์ ์๋ ์ ๋ณด ํฌํจ free
. ๋ฐ๋ฉด์ ๋น์ด ์์ต๋๋ค! ์ด๋ป๊ฒ ์๋ํฉ๋๊น? ์ํฉ์ ์ ๋ช
ํ ๊ธฐ์ฌ๋ฅผ ์ฐ์์ํต๋๋ค. /proc
, ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ํ์ผ /proc
์๋ฌด๋ ๋ณด์ง ์์ ๋ ์๋ฌด๊ฒ๋ ์์ต๋๋ค. ๋งํ๋ฏ์ด
๊ณตํํด ๋ณด์ด๋ procfs
์ ๋ณด๊ฐ ์ญ๋์ ์ด๊ธฐ ๋๋ฌธ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ ์ฝ๊ฐ ๋ค๋ฅธ ์ํฉ sysfs
. ํฌ๊ธฐ๊ฐ ์ต์ XNUMX๋ฐ์ดํธ์ธ ํ์ผ์ด ๋ช ๊ฐ ์๋์ง ๋น๊ตํด ๋ด
์๋ค. /proc
๊ณผ /sys
.
Procfs
์๋ ํ๋์ ํ์ผ, ์ฆ ๋ด๋ณด๋ธ ์ปค๋ ๊ตฌ์ฑ์ด ์์ต๋๋ค. ์ด๋ ๋ถํ
๋น ํ ๋ฒ๋ง ์์ฑํ๋ฉด ๋๋ฏ๋ก ์์ธ์
๋๋ค. ํํธ, /sys
๋ ํฐ ํ์ผ์ด ๋ง์ด ์์ผ๋ฉฐ ๊ทธ ์ค ๋ง์ ํ์ผ์ด ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ์ฐจ์งํฉ๋๋ค. ๋ณดํต ํ์ผ sysfs
๋ค์๊ณผ ๊ฐ์ ํ์ผ ์ฝ๊ธฐ์์ ์ป์ ์ ๋ณด ํ
์ด๋ธ๊ณผ ๋ฌ๋ฆฌ ์ ํํ ํ๋์ ์ซ์ ๋๋ ๋ผ์ธ์ ํฌํจํฉ๋๋ค. /proc/meminfo
.
๊ณจ sysfs
- ์ปค๋์ด ํธ์ถํ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ฑ ์ ๊ณต ยซkobjectsยป
์ฌ์ฉ์ ๊ณต๊ฐ์์. ์ ์ผํ ๋ชฉํ kobjects
๋งํฌ ์นด์ดํ
: kobject์ ๋ํ ๋ง์ง๋ง ๋งํฌ๊ฐ ์ ๊ฑฐ๋๋ฉด ์์คํ
์ ์ด์ ๊ด๋ จ๋ ๋ฆฌ์์ค๋ฅผ ๋ณต์ํฉ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , /sys
๋๋ถ๋ถ์ ์ ๋ช
ํ
์ปค๋์ ์์ ์ ์ธ ABI๋ ๋ค์์ ๋ํ๋ ์ ์๋ ๊ฒ์ ์ ํํฉ๋๋ค. /sys
, ํน์ ์๊ฐ์ ์ค์ ๋ก ์กด์ฌํ๋ ๊ฒ์ด ์๋๋๋ค. sysfs์์ ํ์ผ ๊ถํ์ ๋์ดํ๋ฉด ์ฅ์น, ๋ชจ๋, ํ์ผ ์์คํ
๋ฑ์ ๋ํด ๊ตฌ์ฑ ๊ฐ๋ฅํ ์ค์ ์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๋์ง์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ตฌ์ฑํ๊ฑฐ๋ ์ฝ์ ์ ์์ต๋๋ค. ๋
ผ๋ฆฌ์ ๊ฒฐ๋ก ์ procfs๋ ์ปค๋์ ์์ ์ ์ธ ABI์ ์ผ๋ถ๋ผ๋ ๊ฒ์
๋๋ค.
์ ์๋ ํ์ผ sysfs
๊ฐ ์ํฐํฐ์ ๋ํ ํ๋์ ํน์ ์์ฑ์ ์ค๋ช
ํ๊ณ ์ฝ์ ์ ์๊ฑฐ๋ ์ธ ์ ์๊ฑฐ๋ ๋ ๋ค ๊ฐ๋ฅํฉ๋๋ค. ํ์ผ์ "0"์ SSD๋ฅผ ์ ๊ฑฐํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
eBPF ๋ฐ bcc ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ VFS๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฒ์ญ์ ๋ ๋ฒ์งธ ๋ถ๋ถ์ ์์ํ๊ฒ ์ต๋๋ค. ์ด์ ๊ทํ์ ์๊ฒฌ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ผ๋ฉฐ ์ ํต์ ์ผ๋ก ๊ทํ๋ฅผ ์ด๋ํฉ๋๋ค.
์ถ์ฒ : habr.com