TMR 24 : Adinusa Linux System Administration - Modul 3

+    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

  1. Program Kompilasi (Binary)

    • Sudah diterjemahkan ke bahasa mesin

    • Dapat dijalankan langsung oleh CPU

    • Contoh: Program yang ditulis dalam C/C++

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

  1. Program yang Dieksekusi

    • Merupakan kode program yang sedang dijalankan oleh sistem.

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

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

  4. 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/passwd atau /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

  1. Melihat Semua Batasan Resource:

    ulimit -a
    
  2. 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 ulimit hanya 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 : gdbkill -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) atau kthreadd (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 root atau setuid), 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:

    1. Proses di user mode memanggil sistem call.

    2. Kernel melakukan context switch ke kernel mode.

    3. Kernel menjalankan instruksi.

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

  1. Aktivasi:

    • Umumnya dimulai saat boot.

    • Dapat merespons event eksternal (seperti perangkat hardware oleh systemd-udevd) atau berdasarkan waktu (oleh crond).

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

  1. 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
      
  2. 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 renice untuk proses yang sudah berjalan.

  • Cek man renice untuk 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 -static saat 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:~$ bash
student@ubuntu:~$


2.    Lihat batasan saat ini untuk jumlah maksimal file descriptor yang terbuka:

student@ubuntu:~$ ulimit -n
1024


3.    Lihat batasan saat ini untuk soft resource:

student@ubuntu:~$ ulimit -S -n
1024


4.    Lihat batasan saat ini untuk hard resource:

student@ubuntu:~$ ulimit -H -n
1048576


5.    Setel hard limit ke maksimum dan verifikasi bahwa itu berhasil:

student@ubuntu:~$ ulimit -n hard
student@ubuntu:~$ ulimit -n
1048576


6.    Coba atur limit ke 4096. Apakah berhasil?
Hasil yang akan didapatkan:

$ ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n
1048576

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