Pada chapter sebelumnya kita melihat bahwa program berbicara dengan kernel lewat system call. Namun ada arah komunikasi sebaliknya yang sama pentingnya: bagaimana kita, dari user space, mengintip keadaan ribuan proses dan perangkat keras yang dikelola kernel? Jawabannya adalah dua pseudo filesystem — /proc dan /sys — yang tampak berisi file biasa padahal seluruh isinya dibangkitkan kernel saat kita membacanya. Pada chapter ini kita menjelajahi keduanya: /proc untuk proses dan parameter runtime kernel, lalu /sys untuk peta perangkat keras sistem.
procfs: Pseudo Filesystem untuk Proses dan Sistem #
Direktori /proc tidak menyimpan satu byte pun di disk. Ketika kita menjalankan cat /proc/self/status, syscall read dari chapter syscall
mendarat di procfs, dan kernel menyusun isi filenya saat itu juga dari struktur data internalnya. Karena itulah ukuran file di /proc selalu tampak 0 bila dilihat dengan ls -l, meskipun isinya bisa dibaca. Seluruh alat monitoring standar bekerja di atas sumber ini: ps, top, dan free tidak lebih daripada pembaca /proc yang rapi — kita bisa membuktikannya sendiri dengan strace ps dan melihat deretan openat("/proc/...").
Setiap proses punya direktori sendiri bernama nomor PID: /proc/841/ berisi segala hal tentang proses nomor 841. Trik yang menyenangkan adalah symlink /proc/self yang selalu menunjuk proses yang sedang membacanya — kita tidak perlu tahu PID kita sendiri untuk mengintip diri sendiri:
echo "== comm: nama proses =="
cat /proc/self/comm
echo "== cmdline: argumen proses =="
cat /proc/self/cmdline | tr '\0' '\n'
echo "== jumlah fd terbuka =="
ls /proc/self/fd | wc -lOutput yang Dihasilkan:
== comm: nama proses ==
cat
== cmdline: argumen proses ==
cat
/proc/self/cmdline
== jumlah fd terbuka ==
4Mari kita bedah blok di atas baris-per-baris:
- Baris 2 (
cat /proc/self/comm): filecommberisi nama program; karenacat-lah yang membacanya,/proc/selfmenunjuk ke prosescatitu sendiri sehingga hasilnyacat. - Baris 4 (
cat /proc/self/cmdline | tr ...):cmdlinemenyimpan argumen proses dipisah byte NUL, khas string bahasa C —tr '\0' '\n'menggantinya jadi baris agar terbaca:catdan/proc/self/cmdline. - Baris 6 (
ls /proc/self/fd | wc -l): direktorifd/berisi satu symlink per file descriptor terbuka — di sini empat: stdin (0), stdout (1), stderr (2), ditambah fd 3 yang dibukalssendiri untuk membaca isi direktori tersebut.
File lain yang layak dikenal di /proc/<pid>/: status (identitas dan status proses, dibaca program baca-proc pada chapter sebelumnya), environ (variabel lingkungan awal proses, juga berformat NUL-terminated), maps (wilayah memori yang dipetakan), dan cwd (symlink ke direktori kerja proses). File environ menarik untuk diamati karena memperlihatkan proses membawa “koper” lingkungannya sendiri:
cat /proc/self/environ | tr '\0' '\n' | grep -E '^(PATH|HOME|TERM|LANG|LC_ALL)=' | sortOutput yang Dihasilkan:
HOME=/home/budi
LANG=C.UTF-8
LC_ALL=C.UTF-8
PATH=/usr/local/bin:/usr/bin:/bin
TERM=dumbOutput di lingkungan latihan menampilkan lima variabel dasar sesi terminal; di komputer Anda daftarnya lebih panjang karena mencakup semua variabel yang diwariskan shell saat program dijalankan.
Parameter Runtime di /proc/sys #
Subdirektori penting berikutnya adalah /proc/sys — kumpulan kenop yang mengubah perilaku kernel tanpa reboot. Sebagian besar file di sini berisi satu nilai: batas jumlah PID, kebijakan swappiness memori, sampai enable/disable IP forwarding. Contoh yang paling sering dikutip adalah batas atas nomor PID:
cat /proc/sys/kernel/pid_maxOutput yang Dihasilkan:
32768Angka pada output adalah nilai bawaan di sistem latihan; nilainya bisa berbeda di komputer lain. Nilai ini menandakan PID tertinggi yang boleh dialokasikan kernel sebelum berputar kembali ke angka kecil yang sudah bebas. Mengubahnya semudah menulis ke file — echo 4194304 > /proc/sys/kernel/pid_max — dan kernel langsung menerapkannya; perintah sysctl kernel.pid_max membaca nilai yang sama dari sisi lain. Dokumentasi lengkap isi /proc tersedia di halaman manual proc(5)
.
sysfs: Peta Perangkat Keras Sistem #
Sejak kernel 2.6, perangkat keras dimodelkan dalam satu pohon objek kernel (kobject) yang diekspor ke /sys. Berbeda dengan /proc yang berorientasi proses, sysfs berorientasi perangkat: setiap NIC, disk, dan USB device punya direktori berisi atributnya — alamat MAC, kecepatan, status. Dua cabang yang paling sering dikunjungi adalah /sys/class (perangkat dikelompokkan per fungsi) dan /sys/block (perangkat blok):
echo "== class/net =="
ls /sys/class/net
echo "== block =="
ls /sys/blockOutput yang Dihasilkan:
== class/net ==
dummy0
eth0
lo
== block ==
pmem0
vda
zram0Baris pertama mencantumkan antarmuka jaringan yang dikenali kernel — di mesin latihan: lo (loopback), eth0, dan dummy0; baris kedua mencantumkan perangkat blok seperti vda. Nama perangkat di komputer Anda hampir pasti berbeda karena mengikuti hardware yang terpasang. Setiap nama tersebut adalah direktori: /sys/class/net/eth0/ berisi file address, mtu, speed, dan tetangganya — inilah sumber data yang sama yang dibaca ip dan udev. Device manager udev bahkan membangun seluruh aturan /dev berdasarkan event yang muncul dari sysfs, sebagaimana dibahas pada chapter udev dan device rules
.
Membandingkan procfs dan sysfs #
Kedua filesystem ini sering tertukar peran karena sama-sama “file tentang kernel”, tetapi desainnya berbeda:
| Aspek | procfs (/proc) | sysfs (/sys) |
|---|---|---|
| Fokus | proses dan informasi sistem | perangkat keras dan modul |
| Satuan utama | direktori per PID, plus /proc/sys | objek perangkat (kobject) |
| Isi khas | status, cmdline, fd/, maps | class/, block/, module/ |
| Diubah lewat | kebanyakan baca-saja; /proc/sys via sysctl | atribut perangkat via echo (perlu root) |
| Turunan penting | /proc/self, /proc/sys/ | /sys/class/, /sys/fs/cgroup/ |
Satu cabang sysfs pada baris terakhir tabel patut dicatat: /sys/fs/cgroup adalah rumah dari mekanisme pembatasan resource yang kita bedah tiga chapter lagi. Format atribut sysfs untuk tiap jenis perangkat terdokumentasi di dokumentasi kernel
.
Sekarang kita punya jendela untuk melihat keadaan kernel yang sedang berjalan. Pertanyaan berikutnya: bagaimana jika kita ingin mengubah bentuk kernel itu sendiri — membuang driver yang tak terpakai, atau menyalakan opsi debugging? Perjalanan itu dimulai dari satu file bernama .config, yang kita bahas pada chapter berikutnya tentang konfigurasi kernel.