Linux
  • Pengenalan
  • Filesystem Tree
  • Proses
  • Sinyal
  • Manajemen package
  • Monitoring sistem
  • Monitoring I/O
  • Filesystem dan VFS (belum)
  • Fitur filesystem (belum)
  • Manajemen volume logis / LVM (belum)
  • Kernel
  • Manajemen akun user
  • Izin dan kepemilikan file
  • Alamat jaringan
  • Konfigurasi perangkat jaringan
  • Firewall
  • Startup sistem dan grub
  • System Init: Systemd, SystemV dan Upstart
  • Troubleshooting dasar
  • Lab & Quiz
Powered by GitBook
On this page
  • Apa itu program?
  • Apa itu proses?
  • Atribut proses
  • Isolasi sumber daya proses
  • Mengontrol proses dengan ulimit
  • Menciptakan proses
  • Membuat proses di command shell
  • Status proses
  • Daemon
  • Menentukan prioritas dan memodifikasi nilai nice
  • Libraries statis dan shared (bersama)

Proses

Apa itu program?

Program adalah sekumpulan instruksi dengan data internal/eksternal untuk menjalankannya. data internal berupa teks string di dalam program yang digunakan untuk menampilkan perintah user dan data eksternal berupa data dari database. Program terdiri dari instruksi tingkat mesin yang dijalankan langsung oleh CPU atau daftar perintah yang ditafsirkan oleh program lain.

Banyak perintah user seperti ls, cat, dan rm merupakan program yang berada di luar kernel sistem operasi, atau shell (dengan kata lain, program tersebut memiliki program yang dapat dieksekusi sendiri dalam disk).

note

  • program = yang didikompilasi kedalam bentuk biner yang dapat dieksekusi

  • skrip = yang harus dijalankan oleh interpreter seperti bash

Apa itu proses?

Proses adalah turunan dari suatu program yang sedang dieksekusi. Setiap proses memiliki pid (ID proses), ppid (ID proses induk), dan pgid (ID grub proses), selain itu juga memiliki kode program, data, variabel, deskriptor file, dan environment (lingkungan).

Proses dikendalikan oleh scheduling (penjadwalan) yang bersifat preemptive. hanya kernel yang mempunyai hak untuk mendahului suatu proses, mereka tidak bisa melakukannya satu sama lain. PID terbesar dibatasi pada angka 16-bit / 32768, nilai ini dapat diubah dalam /proc/sys/kernel/pid_max. saat proses mencapai pid_max, proses akan dimulai lagi dengan PID = 300.

Sebuah program dapat terdiri dari beberapa thread simultan (multithreading), yang masing-masing dianggap sebagai prosesnya sendiri.

Atribut proses

  • program sedang dijalankan

  • konteks (keadaan)

  • izin

  • sumber daya terkait

Konteks proses adalah lokasi eksekusinya dalam program, apa yang ada dalam memori proses dan informasi lainnya. Proses dapat dijadwalkan masuk dan keluar ketika berbagi waktu CPU dengan yang lain, kemampuan untuk menyimpan seluruh konteks ketika menukar proses dan dapat mengembalikannya pada saat eksekusi dimulai kembali sangat penting bagi kemampuan kernel untuk melakukan context switching (pengalihan konteks).

Setiap proses memiliki izin berdasarkan user yang memanggilnya untuk dieksekusi, mungkin juga memiliki hak akses berdasarkan siapa yang memiliki file programnya. Program yang ditandai dengan bit execute "s" memiliki user id "efektif" yang berbeda dengan user id "sebenarnya" yang disebut program setuid.

Program dengan setuid berjalan dengan user-id dari user yang memiliki program tersebut sedangakan non-setuid berjalan dengan izin dari user yang memulainya. Perintah passwd adalah contoh program setuid yang dapat dijalankan semua user dengan izin root untuk mengupdate file /etc/passwd dan /etc/shadow.

Setiap proses memiliki sumber daya seperti memori yang dialokasikan, file handler, dll.

Isolasi sumber daya proses

Ketika suatu proses dimulai, proses tersebut diisolasi di ruang penggunanya sendiri untuk melindunginya dari proses lain. Hal ini meningkatkan keamanan dan menciptakan stabilitas yang lebih baik. Proses tidak memiliki akses langsung ke hardware. Hardware dikelola oleh kernel, sehingga suatu proses harus menggunakan system calls (panggilan sistem) untuk mengakses hardware secara tidak langsung. Panggilan sistem adalah interface mendasar antara aplikasi dan kernel.

Mengontrol proses dengan ulimit

ulimit adalah perintah bash bawaan yang menampilkan atau mengatur ulang sejumlah batasan sumber daya yang terkait dengan proses yang berjalan dibawah shell.

Administrator mungkin perlu mengubah beberapa nilai:

  • Untuk restrict (membatasi) kemampuan sehingga pengguna dan/atau proses individual tidak dapat menghabiskan sumber daya sistem, seperti memori, waktu cpu, atau jumlah maksimum proses pada sistem

  • Untuk expand (memperluas) kemampuan sehingga suatu proses tidak mengalami keterbatasan sumber daya; misalnya, server yang menangani banyak klien mungkin menemukan bahwa default 1024 file terbuka membuat pekerjaannya tidak mungkin dilakukan

2 macam batasan:

  • hard = nilai maksimum yang ditetapkan user root sehingga user dapat menaikkan batas sumber dayanya

  • soft = nilai pembatas saat ini yang dapat diubah user tapi tidak boleh melebihi batas maksimum.

ulimit -H -n
ulimit -S -n
ulimit [options] [limit]

atau dengan mengubah pada file /etc/security/limits.conf

Menciptakan proses

  • forking = proses induk asli tetap berjalan sedangkan proses anak baru dimulai

  • exec = proses induk berakhir dan proses anak mewarisi ID proses dari induknya

Pertimbangan server web yang menangani banyak klien, mungkin meluncurkan proses baru setiap kali koneksi baru dibuat dengan klien atau mungkin hanya memulai thread baru sebagai bagian dari proses yang sama.

Proses kernel internal menangani pekerjaan pemeliharaan, seperti memastikan buffer dibuang ke disk, beban pada CPU yang berbeda seimbang secara merata, driver perangkat menangani pekerjaan yang telah diantrekan untuk dilakukan dll, proses ini berjalan salama sistem berjalan

Proses eksternal adalah proses yang bejalan di ruang user seperti aplikasi normal, tetapi dijalankan oleh kernel, biasanya jumlahnya sangat sedikit dan berumur pendek.

sistem berbasis systemd menjalankan proses khusus bernama kthreadd dengan pid=2 yang tugasnya mengadopsi anak yatim piatu yang kemudian menampilkan ppid=2.

Membuat proses di command shell

yang terjadi ketika user menjalankan perintah di penerjemah perintah shell (bash):

  • Proses baru dibuat (bercabang dari shell login pengguna)

  • Panggilan sistem tunggu membuat proses shell induk tertidur

  • Perintah dimuat ke ruang proses anak melalui panggilan sistem exec. Dengan kata lain, kode untuk perintah tersebut menggantikan program bash di ruang memori proses anak

  • Perintah selesai dijalankan, dan proses anak mati melalui panggilan sistem keluar

  • Shell induk dibangunkan kembali dengan matinya proses anak dan mulai mengeluarkan prompt shell baru

  • Shell induk kemudian menunggu permintaan perintah berikutnya dari pengguna, pada saat itu siklus akan diulangi

Jika perintah dikeluarkan untuk background processing, shell induk akan melewatkan permintaan tunggu dan bebas segera mengeluarkan prompt shell baru, sehingga proses background dapat dijalankan di paralel. Jika tidak, untuk foreground request , shell menunggu hingga proses anak selesai atau dihentikan melalui sinyal.

Status proses

Status proses utama

Penjadwal (scheduler) mengelola semua proses dan status proses dilaporkan oleh daftar proses

  • Running = sedang dieksekusi di CPU / inti CPU / dalam antrian menunggu potongan waktu yang baru dan dijalankan lagi ketika proses layak menempati CPU / penjadwal memindahkan ke CPU lain yang menganggur

  • Sleeping (waiting) = menunggu permintaan yang dibuat (biasanya I/O) dan tidak dapat melanjutkan hingga permintaan tersebut selesai. akan running lagi ketika permintaan selesai

  • Stopped = ditangguhkan ketika ingin memeriksa program yang berjalan, register CPU, flag dll. biasanya dilakukan ketika proses berjalan di bawah debugger atau user menekan ctrl+Z

  • Zombie = berhenti tapi tidak ada proses lain (biasanya induknya) yang menanyakan tentang kondisi keluarnya yaitu menuai kembali. proses zombie telah melepaskan semua sumber dayanya kecuali proses keluarnya dan entri dalam tabel proses. jika induk proses mati, akan diadopsi init (PID=1) atau kthreadd (PID=2)

Mode eksekusi

Suatu proses (atau thread tertentu dari proses multi-thread) mungkin dijalankan dalam mode user atau mode sistem (mode kernel). Intruksi apa yang dapat dieksekusi tergantung pada mode dan diberlakukan pada tingkat hardware bukan software. Mode bukanlah status sistem tapi status prosesor.

Mode user

Kecuali ketika menjalankan system call (panggilan sistem), proses dieksekusi dalam mode user yang memilki hak istimewa lebih rendah dibanding mode kernel. proses diisolasi di ruang usernya sendiri untuk melindunginya dari proses lain yang disebut process resource isolation. Tiap proses memiliki ruang memorinya sendiri yang sebagian dapat digunakan bersama proses lain kecuali untuk segmen memori bersama.

Proses yang dijalankan oleh user root atau sebagai program setuid berjalan dalam mode user, kecuali melompat ke system call dan hanya memiliki kemampuan terbatas untuk mengakses keras.

Mode sistem (kernel)

Dalam mode kernel (sistem), CPU memilki akses penuh ke semua hardware pada sistem. ketika aplikasi membutuhkan akses ke sumber daya itu harus mengeluarkan system call yang menyebabkan peralihan konteks dari mode user ke mode kernel bukan berarti kode aplikasi berjalan pada mode kernel tapi system call tersebut yang merupakan kode kernel.

Ada saat-saat lain ketika sistem dalam mode kernel yang tidak ada hubungannya dengan proses, seperti ketika menangani interupsi perangkat keras atau menjalankan rutinitas penjadwalan dan tugas-tugas manajemen lainnya untuk sistem.

Daemon

Proses background untuk menyediakan layanan khusus kepada user di sistem.

  • Mereka bisa sangat efisien karena hanya beroperasi bila diperlukan

  • Banyak daemon dimulai pada saat boot

  • Nama daemon sering kali (tetapi tidak selalu) diakhiri dengan d, misalnya httpd dan systemd-udevd

  • Daemon dapat merespons peristiwa eksternal (systemd-udevd) atau waktu yang telah berlalu (crond)

  • Daemon umumnya tidak memiliki terminal pengontrol dan tidak memiliki perangkat input/output standar

  • Daemon terkadang memberikan kontrol keamanan yang lebih baik

  • Beberapa contohnya termasuk xinetd, httpd, lpd, dan vsftpd

Menentukan prioritas dan memodifikasi nilai nice

Mengatur prioritas

Prioritas proses dapat dikontrol melalui perintah nice dan renice. nice bernilai dari -20 (prioritas tertinggi) hingga +19 (prioritas terendah) yang nilai defaultnya 10.

Memodifikasi nilai nice

renice digunakan untuk menaikkan dan menurunkan nilai nice dari program yang sudah berjalan.

user yang tidak memiliki hak istimewa dapat meningkatkan nilai nice dengan rentang yang ditentukan dengan mengedit /etc/security/limit.conf. tapi hanya super user yang dapat menurunkan nilai nice.

Libraries statis dan shared (bersama)

Program dibangun menggunakan libraries of code (pustaka kode)untuk berbagai tujuan.

2 jenis libraries:

  • Static = kode untuk fungsi library yang dimasukan ke program saat dikompilasi dan tidak berubah setelahnya meski library diperbarui

  • Shared = kode untuk fungsi library yang dimuat ke program saat berjalan dan dapat berudah dengan memodifikasi library yang baru. lebih efisien karena dapat digunakan banyak aplikasi sehingga penggunaan memori, ukuran yang dapat dieksekusi dan waktu pemuatan aplikasi berkurang. disebut juga Dynamic Link Libraries (DLL)

PreviousFilesystem TreeNextSinyal

Last updated 1 year ago