Memahami Sistem Operasi Unix-like
Sebelum menulis program C untuk sistem (FreeBSD, Linux, dll), hal terpenting bukanlah sintaks, melainkan memahami bagaimana sistem operasi bekerja.
Artikel ini membangun mental model dasar tentang OS Unix-like model yang sama dipakai oleh kernel engineer dan system programmer.
Jika konsep di sini tidak dipahami, maka:
pointer akan terasa “acak”
segmentation fault terasa “misterius”
debugging jadi tebak-tebakan
User Space vs Kernel Space
Apa itu User Space?
User space adalah tempat program aplikasi berjalan:
shell (
sh,bash)editor (
vim,nano)browser
program C yang Anda tulis
Ciri utama:
Hak akses terbatas
Tidak boleh menyentuh hardware langsung
Jika crash → hanya program itu yang mati
Contoh:
ls
vim
program_c_anda
Semua ini berjalan di user space.
Apa itu Kernel Space?
Kernel space adalah area eksekusi kernel sistem operasi.
Kernel bertugas:
Mengatur CPU (scheduler)
Mengatur memori
Mengatur disk & jaringan
Mengatur proses
Ciri utama:
Hak akses paling tinggi
Bisa mengakses hardware langsung
Bug di sini → kernel panic / system crash
Bagaimana User Space Berkomunikasi dengan Kernel?
Melalui system call.
Contoh:
open()→ minta kernel membuka fileread()→ minta kernel membaca diskwrite()→ minta kernel menulis data
Alurnya:
Program C (user space)
↓ syscall
Kernel (kernel space)
↓
Hardware
Poin penting untuk system programmer:
User space ≠ kernel space
Transisi user → kernel mahal
Kernel adalah “penjaga gerbang”
Proses, Thread, dan Address Space
Apa itu Proses?
Proses adalah instance dari program yang sedang berjalan.
Ciri proses:
Memiliki PID (Process ID)
Memiliki address space sendiri
Memiliki resource sendiri (FD, memori, dll)
Contoh:
ls
Setiap kali Anda menjalankan ls, OS membuat proses baru.
Penting:
Program ≠ Proses
Program = file di disk
Proses = program yang sedang dieksekusi
Apa itu Thread?
Thread adalah unit eksekusi di dalam proses.
Perbedaan utama:
Proses → terisolasi
Thread → berbagi address space
Ilustrasi:
Proses A
├─ Thread 1
├─ Thread 2
└─ Thread 3
Jika satu thread salah pointer:
Bisa merusak seluruh proses
Tapi tidak merusak proses lain
Apa itu Address Space?
Address space adalah ruang alamat memori virtual milik satu proses.
Setiap proses melihat:
0x00000000 ──────────────── 0xFFFFFFFF
Padahal:
Memori fisik terbatas
Banyak proses berjalan bersamaan
Inilah tugas OS: menipu proses agar merasa sendirian
Kenapa Ini Penting untuk C?
Karena:
Pointer bekerja di dalam address space
Pointer ke memori proses lain → ilegal
Pointer invalid → segmentation fault
File Descriptor (FD)
Apa itu File Descriptor?
File descriptor adalah angka integer yang mewakili resource I/O.
Contoh FD standar:
| FD | Nama |
|---|---|
| 0 | STDIN |
| 1 | STDOUT |
| 2 | STDERR |
Unix punya filosofi:
Everything is a file
Artinya:
File biasa
Socket
Pipe
Device
→ semuanya diakses lewat file descriptor
Contoh Nyata
Saat program menulis:
printf("Hello\n");
Di belakang layar:
write(1, "Hello\n", 6);
1 = STDOUT
Kenapa FD Penting untuk System Programming?
Karena:
read(),write(),close()→ semua pakai FDSalah menutup FD → resource leak
FD adalah jembatan C ↔ kernel
System programmer harus nyaman dengan FD.
Virtual Memory (Konseptual)
Apa itu Virtual Memory?
Virtual memory adalah ilusi bahwa:
Setiap proses punya memori sendiri
Memori terlihat kontigu
Padahal kenyataannya tidak
OS + MMU (hardware) yang mengatur semuanya.
Istilah Penting
Page: blok memori kecil (biasanya 4 KB)
Page table: peta virtual → fisik
Page fault: akses ke page yang belum ada
Kenapa Segmentation Fault Terjadi?
Karena:
Proses mengakses alamat yang tidak valid
MMU mendeteksi pelanggaran
Kernel menghentikan proses
Segfault bukan bug C, tapi:
Pelanggaran aturan memory OS
Implikasi untuk Programmer C
Pointer bukan angka sembarangan
malloc()bukan jaminan amanOS selalu mengawasi akses memori
Kesimpulan Mental Model
Jika Anda hanya mengingat 4 hal ini, Anda sudah jauh di depan:
User space dan kernel space terpisah keras
Proses punya address space sendiri
Semua I/O lewat file descriptor
Virtual memory adalah ilusi yang dijaga ketat
Dengan mental model ini:
Belajar C jadi masuk akal
Debugging jadi rasional
Anda berpikir seperti system programmer, bukan sekadar coder

0 Comments:
Posting Komentar