+ Processes
> Apa itu Program?
- Pengertian Dasar
Program adalah sekumpulan instruksi yang dirancang untuk menjalankan tugas tertentu. Instruksi ini sering disertai:
-
Data internal → misalnya: teks untuk menampilkan prompt
-
Data eksternal → misalnya: input dari database atau file
- Jenis Eksekusi Program
-
Program Kompilasi (Binary)
-
Sudah diterjemahkan ke bahasa mesin
-
Dapat dijalankan langsung oleh CPU
-
Contoh: Program yang ditulis dalam C/C++
-
-
Script
-
Dieksekusi melalui interpreter
-
Dibaca dan dijalankan baris demi baris
-
Contoh: Bash, Python, Perl
-
- Contohnya kayak di Linux nih
Perintah seperti ls, cat, dan rm adalah program binary yang biasanya tersimpan di:
-
/bin -
/usr/bin
- Perbedaan Program vs Script
| Kriteria | Program | Script |
|---|---|---|
| Format | Binary (terkompilasi) | Teks (perlu interpreter) |
| Contoh Bahasa | C, C++, Go | Bash, Python, Perl |
| Lokasi | /bin, /usr/bin |
Bisa di mana saja |
> Apa itu Proses?
- Pengertian Dasar
Proses adalah instansi eksekusi dari sebuah program yang sedang berjalan, dengan komponen utama:
-
Status proses (contoh: running, sleeping, dll.)
-
Memuat kode program, data, variabel, dan environment
- Identitas Proses
| ID | Keterangan |
|---|---|
| PID | Process ID → identifikasi unik setiap proses |
| PPID | Parent Process ID → ID dari proses induk |
| PGID | Process Group ID → ID grup proses terkait |
- Batasan Sistem
-
Nilai PID maksimal:
32768(default 16-bit) -
Bisa disesuaikan di:
/proc/sys/kernel/pid_max -
Saat mencapai batas, PID akan diulang dari angka
300
- Mekanisme Kontrol
-
Menggunakan preemptive scheduling
-
Hanya kernel yang dapat mengatur kapan proses berjalan atau dihentikan
-
Proses tidak bisa saling menginterupsi secara langsung
- Catatan Khusus
-
Multithreading:
-
Satu program bisa memiliki banyak thread
-
Tiap thread dianggap proses terpisah oleh kernel
-
-
Contoh perintah untuk melihat proses aktif:
ps aux
> Atribut Proses
- Atribut Utama Setiap Proses
-
Program yang Dieksekusi
-
Merupakan kode program yang sedang dijalankan oleh sistem.
-
-
Konteks (State)
-
Merupakan snapshot dari kondisi proses saat ini:
-
Nilai register CPU
-
Posisi eksekusi dalam program
-
Konten memori
-
-
Konteks ini memungkinkan terjadinya context switching oleh kernel.
-
-
Izin (Permissions)
-
Ditetapkan oleh:
-
Real User ID → User yang menjalankan proses
-
Effective User ID → Pemilik file program
-
-
setuid: Bit khusus (
s) yang membuat program berjalan dengan izin pemilik file, bukan user yang menjalankan.-
Contoh penting:
passwd
-
-
-
Sumber Daya Terkait
-
Termasuk:
-
Alokasi memori
-
File handles
-
Resource sistem lainnya
-
-
- Contoh Kritis: setuid
-
Program
passwd:-
Dijalankan oleh user biasa, tapi berjalan dengan hak akses root.
-
Tujuannya: Memungkinkan perubahan file sistem penting seperti
/etc/passwdatau/etc/shadow. -
Perlu dikonfigurasi dengan hati-hati karena bisa menjadi celah keamanan.
-
- Mekanisme Kernel
-
Context Switching:
-
Kernel menyimpan dan memulihkan konteks proses saat berpindah antar-proses.
-
Mekanisme ini mendasari sistem multitasking dan pengelolaan CPU modern.
-
- Catatan Penting
-
Proses dengan setuid root perlu pengawasan ketat, karena dapat menjadi sumber potensi security vulnerability jika salah konfigurasi.
> Proses Isolasi Resource
- Isolasi User Space
Setiap proses berjalan di ruang memori terisolasi untuk:
- Mencegah interferensi antar-proses
- Meningkatkan stabilitas dan keamanansistem
- Akses ke Hardware
- Proses tidak bisa mengakses hardware secara langsung
- Kernel bertindak sebagai perantara melalui **system calls**
Contoh system calls: `read()`, `write()`, `open()`
Mekanisme ini melindungi sistem dari akses ilegal
- Keuntungan
1. Stabilitas: Gagal satu proses tidak memengaruhi proses lain
2. Keamanan: Mencegah eksploitasi antar-proses
- Catatan
System calls adalah satu-satunya cara proses berinteraksi dengan hardware dan resource sistem lainnya.
> Kontrol Proses dengan ulimit
- Fungsi Utama
ulimit adalah perintah built-in pada bash yang digunakan untuk:
-
Menampilkan batasan resource proses:
ulimit -a -
Mengubah batasan resource:
-
Hanya bisa dilakukan oleh administrator/root untuk beberapa jenis limit.
-
- Jenis Batasan
| Tipe | Deskripsi | Contoh Perintah |
|---|---|---|
| Hard Limit | Batas maksimum absolut (hanya root yang bisa mengubah) | ulimit -H -n |
| Soft Limit | Batas saat ini (user bisa ubah jika ≤ hard limit) | ulimit -S -n |
- Contoh Penggunaan
-
Melihat Semua Batasan Resource:
ulimit -a -
Mengubah Batas Maksimum File Terbuka (File Descriptor):
ulimit -n 1600
- Skenario Penggunaan
-
Membatasi Resource
Untuk mencegah proses/user menghabiskan resource seperti memori, CPU, atau file. -
Meningkatkan Resource
Berguna untuk server dengan beban tinggi yang membutuhkan lebih banyak file descriptor (misal: lebih dari 1024).
- Perubahan Permanen
-
Sunting file berikut:
/etc/security/limits.conf -
Diperlukan reboot untuk menerapkan secara menyeluruh.
Perubahan lewat
ulimithanya berlaku untuk shell saat ini.
- Catatan
-
Hard limit adalah nilai mutlak yang tidak dapat dilampaui.
-
Soft limit dapat disesuaikan oleh user selama nilainya ≤ hard limit.
> Pembuatan Proses
- Konsep Dasar
Forking: Proses induk parent) membuat salinan dirinya sebagai proses anak (child).
Fork & Exec:
- fork(): Membuat proses anak yang identik.
- exec()`: Mengganti kode proses anak dengan program baru.
Sering dianggap sebagai satu operasi terpadu.
- Contoh Skenario
1. Web Server:
- Membuat proses/thread baru untuk setiap koneksi client.
- Thread vs. Proses:
Di Linux, keduanya mirip dalam hal alokasi resource.
2. Proses Kernel:
- Bertugas maintenance sistem (contoh: flush buffer ke disk, load balancing CPU).
- Berjalan terus selama sistem aktif (*long-lived*).
3. Proses Eksternal:
- Dijalankan di user space oleh kernel.
- Umumnya berumur pendek (short-lived).
- Catatan Khusus
kthreadd:
- Proses khusus (PID=2) di sistem berbasis systemd.
- Mengadopsi proses anak yang menjadi orphan (PPID=2).
- Contoh Command:
ps -ef | grep kthreadd # Melihat proses kthreadd
> Pembuatan Proses dalam Command Shell
- Alur Eksekusi Perintah (Foreground
1. Fork:
Shell login membuat proses anak (*child*) yang identik.
2. Wait & Sleep:
Proses induk (parent shell) tidur (wait system call).
3. Exec:
Kode program perintah menggantikan memori proses anak (`exec` system call).
4. Exit:
Proses anak selesai dan terminasi (`exit` system call).
5. Wake Up:
Parent shell bangun dan menampilkan prompt baru.
- Perintah Background
- Ditandai dengan & (contoh: sleep 10 &).
- Shell tidak menunggu (skip wait), langsung kembali ke prompt.
- Proses anak berjalan paralel di background.
- Built-in Command
- Contoh: echo, kill.
- Tidak butuh fork/exec karena dieksekusi langsung oleh shell.
- Catatan:
- Proses foreground memblokir shell sampai selesai.
- Background process memungkinkan multitasking di terminal.
> Status Proses dan Mode Eksekusi di Linux
- Status Utama Proses
Running = Proses sedang berjalan di CPU atau berada dalam antrian run queue.
Contoh : top → kolom S = R
Sleeping = Proses menunggu I/O atau event tertentu.
Contoh : Proses baca/tulis disk → S
Stopped = Proses dijeda sementara (misalnya oleh debugger atau Ctrl+Z).
Contoh : gdb, kill -STOP → T
Zombie = Proses sudah selesai, tapi belum di-reap oleh parent.
Contoh : ps aux → kolom STAT = Z
Catatan: Zombie process akan diadopsi oleh
init(PID=1) ataukthreadd(PID=2) jika parent-nya sudah mati.
- Mode Eksekusi
1. User Mode
-
Hak Akses: Terbatas — tidak dapat mengakses hardware langsung.
-
Isolasi: Setiap proses berjalan dalam ruang memori terpisah.
-
Contoh: Semua aplikasi biasa (termasuk milik
rootatausetuid), kecuali saat melakukan sistem call.
2. Kernel Mode (System Mode)
-
Hak Akses: Penuh terhadap seluruh resource sistem (memori, disk, dll).
-
Trigger: Terjadi saat proses melakukan system call seperti
read(),write(),fork(), dll. -
Mekanisme:
-
Proses di user mode memanggil sistem call.
-
Kernel melakukan context switch ke kernel mode.
-
Kernel menjalankan instruksi.
-
Kontrol kembali ke user mode dengan hasil.
-
Level Akses CPU (Arsitektur Intel):
-
User Mode = Ring 3
-
Kernel Mode = Ring 0
- Ilustrasi Sistem Call
$ cat file.txt
# Proses ini melibatkan:1. open() → Masuk kernel mode, buka file dari disk
2. read() → Transfer isi file ke user mode
3. write() → Tampilkan ke terminal
- Catatan Penting
-
Kernel mode juga digunakan untuk:
-
Menangani interrupt dari hardware
-
Menjalankan process scheduler
-
-
Aplikasi tidak pernah langsung berjalan di kernel mode, hanya sistem call yang memicu masuk ke sana.
> Proses Daemon dalam Sistem Linux
- Definisi & Karakteristik
Daemon adalah proses background yang menyediakan layanan spesifik untuk sistem atau pengguna, dengan ciri-ciri:
-
Berjalan tanpa interaksi langsung (headless).
-
Tidak terikat ke terminal atau input/output standar.
-
Nama sering diakhiri huruf
d, seperti:-
httpd -
sshd -
crond -
vsftpd -
systemd-udevd
-
- Cara Kerja
-
Aktivasi:
-
Umumnya dimulai saat boot.
-
Dapat merespons event eksternal (seperti perangkat hardware oleh
systemd-udevd) atau berdasarkan waktu (olehcrond).
-
-
Efisiensi:
-
Hanya aktif saat dibutuhkan (on-demand).
-
- Contoh Daemon Populer dan Fungsinya
-
httpd: Menyediakan layanan web (Apache) -
sshd: Menyediakan akses remote via SSH -
crond: Menjalankan perintah terjadwal secara otomatis -
vsftpd: Menyediakan layanan FTP server -
systemd-udevd: Mengelola event dari perangkat hardware
- Keuntungan
-
Stabilitas: Berjalan terus-menerus tanpa gangguan.
-
Keamanan: Kontrol akses lebih ketat karena tidak berinteraksi langsung dengan user.
> Mengatur Prioritas Proses dengan Nice Value
- Konsep Dasar
-
Nice value digunakan untuk menentukan prioritas eksekusi proses dalam sistem.
-
Nilai berkisar dari -20 (prioritas tertinggi) hingga +19 (prioritas terendah).
-
Semakin besar nilai (semakin nice), maka proses akan mendapat jatah CPU yang lebih rendah.
- Perintah yang Digunakan
-
nice– Menetapkan nice value saat menjalankan proses:-
Contoh:
nice -n 5 command # Menjalankan 'command' dengan nice value +5 -
Jika tidak ditentukan, nilai default adalah +10.
-
Untuk melihat nilai nice proses saat ini:
nice
-
-
renice– Mengubah nice value proses yang sedang berjalan:-
Contoh:
renice +5 -p 20003 # Mengubah nice value proses PID 20003 menjadi +5 -
User biasa hanya bisa menaikkan nilai nice (menurunkan prioritas).
-
Root/superuser bisa menurunkan nilai nice (meningkatkan prioritas proses).
-
- Catatan Penting
-
Nilai nice yang berada di luar rentang (-20 sampai +19) akan dipotong agar tetap dalam batas.
-
Proses dengan nice value tinggi tetap dapat berjalan jika CPU tidak sedang padat.
-
Untuk memberi izin khusus bagi user biasa mengatur nice value, bisa dikonfigurasi melalui
/etc/security/limits.conf.
- Contoh Praktis
-
Menjalankan skrip dengan prioritas tinggi:
nice -n -15 ./script.sh -
Meningkatkan prioritas proses aktif (hanya root):
renice -10 -p 1234
- Tambahan:
-
Gunakan
reniceuntuk proses yang sudah berjalan. -
Cek
man reniceuntuk mempelajari opsi lanjutan.
Perpustakaan Statis dan Dinamis (Shared Libraries)
1. Perpustakaan Statis (Static Libraries)
-
Cara kerja: Kode dari library langsung disisipkan ke dalam program saat proses kompilasi.
-
Keuntungan:
-
Program menjadi mandiri dan tidak bergantung pada file library eksternal saat dijalankan.
-
-
Kekurangan:
-
Ukuran file executable lebih besar.
-
Jika ada perubahan atau update pada library, program harus dikompilasi ulang untuk mendapatkan pembaruan.
-
2. Perpustakaan Dinamis (Shared Libraries)
-
Cara kerja: Library dimuat oleh program saat runtime, bukan saat kompilasi.
-
Keuntungan:
-
Efisiensi memori karena library yang sama bisa digunakan bersama oleh banyak aplikasi.
-
Ukuran program lebih kecil.
-
Update pada library langsung berdampak ke semua program yang menggunakannya, tanpa perlu kompilasi ulang.
-
-
Kekurangan:
-
Jika library hilang atau tidak kompatibel, program bisa gagal dijalankan.
-
- Perintah Penting
-
Untuk melihat dependensi library dari sebuah program, misalnya
ls, gunakan:ldd $(which ls)-
Output ini akan menampilkan daftar shared library yang dibutuhkan oleh program tersebut.
-
Contoh hasil:
linux-vdso.so.1 => (0x00007ffd45df0000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
-
- Contoh Kasus
-
Untuk membuat program statis, biasanya digunakan flag
-staticsaat kompilasi:gcc -static program.c -o program -
Sebagian besar sistem Linux saat ini menggunakan shared library secara default (file berekstensi
.so).
- Catatan Tambahan
-
Shared library juga dikenal sebagai DLL (Dynamic Link Library) di sistem operasi Windows.
-
Lokasi umum penyimpanan library di Linux antara lain:
/lib,/lib64, atau/usr/lib.
- Contoh Library yang Umum Digunakan
-
libc.so.6: Library standar bahasa C (glibc). -
libpthread.so.0: Library untuk manajemen thread. -
libm.so.6: Library untuk fungsi-fungsi matematika.
Mengontrol Proses dengan ulimit
Instruksi:
1. Mulai shell baru dengan mengetikkan bash (atau membuka terminal baru) agar perubahan hanya berlaku pada shell baru.
student@ubuntu:~$ bashstudent@ubuntu:~$
2. Lihat batasan saat ini untuk jumlah maksimal file descriptor yang terbuka:
student@ubuntu:~$ ulimit -n1024
3. Lihat batasan saat ini untuk soft resource:
student@ubuntu:~$ ulimit -S -n1024
4. Lihat batasan saat ini untuk hard resource:
student@ubuntu:~$ ulimit -H -n1048576
5. Setel hard limit ke maksimum dan verifikasi bahwa itu berhasil:
student@ubuntu:~$ ulimit -n hardstudent@ubuntu:~$ ulimit -n1048576
6. Coba atur limit ke 4096. Apakah berhasil?
Hasil yang akan didapatkan:
$ ulimit -n 4096bash: ulimit: open files: cannot modify limit: Operation not permitted$ ulimit -n1048576
Anda tidak bisa mengubah limit ini lagi! Perhatikan bahwa jika kita memilih limit yang berbeda, seperti ukuran stack (-s), kita bisa menaikkannya kembali karena hard limit tidak terbatas.



Komentar
Posting Komentar