Memahami Sistem Operasi Unix-like



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 file

  • read() → minta kernel membaca disk

  • write() → 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:

FDNama
0STDIN
1STDOUT
2STDERR

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 FD

  • Salah 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 aman

  • OS selalu mengawasi akses memori

     

Kesimpulan Mental Model

Jika Anda hanya mengingat 4 hal ini, Anda sudah jauh di depan:

  1. User space dan kernel space terpisah keras

  2. Proses punya address space sendiri

  3. Semua I/O lewat file descriptor

  4. 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