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.
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)
Last updated