SISTEM OPERASI
Davit Hermawan, S.T., [Link]
Proccess & Thread
Proccess
Secara sederhana, proses adalah sebuah program yang sedang
dieksekusi. Namun, proses tidak hanya sebatas kode program
statis.
Secara informal, proses adalah program dalam eksekusi. Suatu
proses itu lebih dari kode program, dimana kadang kala dikenal
Proccess sebagai bagian tulisan.
Suatu proses umumnya juga termasuk process stack, yang
berisikan data temporer (seperti parameter metoda, address
yang kembali, dan variabel lokal) dan sebuah data section, yang
berisikan variabel global.
Walau dua proses dapat dihubungkan dengan program yang
sama, program tersebut dianggap dua urutan eksekusi yang
berbeda.
Multitasking: Memungkinkan beberapa program berjalan secara
bersamaan, sehingga kita bisa melakukan banyak tugas
sekaligus.
Mengapa Proses Multiprogramming: Memungkinkan sistem operasi untuk
Penting? menjalankan beberapa program secara bergantian, sehingga
CPU tidak menganggur.
Multiprocessing: Memungkinkan sistem operasi untuk
menjalankan beberapa program secara paralel pada beberapa
CPU.
The Process
Model
Model proses yang menggambarkan konsep Dalam model ini, semua perangkat lunak yang
dasar dari multiprogramming dalam sistem dapat dijalankan di komputer, termasuk sistem
operasi, yang merupakan kemampuan sistem operasi, diorganisasikan ke dalam sejumlah
operasi untuk menjalankan beberapa program proses berurutan, atau singkatnya disebut proses.
secara bersamaan.
Pada Gambar 2-1(a) kita melihat komputer melakukan
multiprogramming terhadap empat program dalam
memori.
Pada Gambar 2-1(b) kita melihat empat proses, masing-
masing dengan aliran kontrolnya sendiri (yaitu, penghitung
program logisnya sendiri), dan masing-masing berjalan
secara independen dari yang lain.
Pada Gambar 2-1(c) kita melihat bahwa, jika dilihat dari
interval waktu yang cukup lama, semua proses telah
mengalami kemajuan, tetapi pada saat tertentu hanya satu
proses yang benar-benar berjalan.
One Program Counter: Garis panah melingkar di bagian atas gambar
menunjukkan adanya satu program counter. Program counter ini
merupakan sebuah register dalam CPU yang menunjuk ke instruksi yang
sedang dieksekusi saat ini.
Proses A, B, C, D: Kotak-kotak bertuliskan A, B, C, dan D
merepresentasikan empat proses yang berbeda. Setiap proses memiliki
bagian kode program, data, dan tumpukan (stack) sendiri.
Process Switch: Kata "Process switch" menunjukkan perpindahan eksekusi
dari satu proses ke proses lainnya. Ketika terjadi proses switch, nilai
program counter dari proses yang sedang berjalan disimpan, kemudian
program counter dari proses yang akan dieksekusi berikutnya dimuat.
Four Program Counter: Di bagian atas gambar, terdapat tulisan "Four
program counters". Ini menunjukkan bahwa dalam sistem ini, ada empat
program yang sedang berjalan secara bersamaan, dan masing-masing
program memiliki program counter sendiri.
Kotak A, B, C, D: Setiap kotak mewakili satu proses (program yang sedang
berjalan). Huruf A, B, C, dan D adalah label untuk membedakan setiap
proses.
Panah ke Bawah: Panah yang mengarah ke bawah di dalam setiap kotak
merepresentasikan program counter untuk proses tersebut. Program
counter ini menunjuk ke instruksi yang akan dieksekusi selanjutnya pada
proses itu.
Sumbu-X (Waktu): Sumbu horizontal mewakili aliran waktu. Semakin ke
kanan, waktu semakin maju.
Sumbu-Y (Proses): Sumbu vertikal mewakili proses-proses yang sedang
berjalan. Dalam gambar ini, ada empat proses yang diberi label A, B, C,
dan D.
Baris Horizontal: Setiap baris horizontal mewakili waktu eksekusi dari suatu
proses. Ketika sebuah baris muncul, artinya proses tersebut sedang
dieksekusi oleh CPU.
Tidak Ada Tumpang Tindih: Baris-baris horizontal tidak pernah tumpang
tindih. Ini menunjukkan bahwa pada satu waktu, hanya satu proses yang
dapat dieksekusi oleh CPU.
Proses dieksekusi secara bergantian Waktu eksekusi berbeda Tidak ada proses yang berjalan terus-menerus
Process Creation
Mekanisme di mana sebuah proses baru dibuat dari proses yang
sudah ada. Proses baru ini sering disebut sebagai child process
(proses anak), sedangkan proses asalnya disebut sebagai parent
Process Creation process (proses induk).
Membuat proses baru berguna ketika pekerjaan yang harus
dilakukan dapat dengan mudah diformulasikan dalam bentuk
beberapa proses yang saling terkait, tetapi saling berinteraksi
secara independen.
Membuat program baru: Setiap kali kita menjalankan
sebuah program, sistem operasi akan membuat
sebuah proses baru untuk menjalankan program
tersebut.
Mengapa Proses Perlu Membuat proses anak: Suatu proses dapat membuat
Diciptakan? proses anak untuk menjalankan tugas-tugas tertentu,
misalnya untuk menangani permintaan dari klien atau
menjalankan proses latar belakang.
Mengkloning proses: Proses dapat membuat duplikat dirinya
sendiri untuk menjalankan tugas yang sama dengan
parameter yang berbeda.
Hubungan: Proses induk dan anak memiliki hubungan
hierarkis. Proses induk dapat membuat banyak proses
anak, dan proses anak juga dapat membuat proses
anak lagi.
Proses Induk dan Pembagian Sumber Daya: Proses anak mewarisi
sebagian besar sumber daya dari proses induknya,
Proses Anak seperti file yang terbuka dan variabel lingkungan.
Namun, proses anak juga memiliki ruang alamat yang
terpisah.
Terminasi: Ketika proses anak selesai atau dihentikan,
sumber dayanya akan dikembalikan ke sistem operasi.
Proses induk dapat menunggu hingga semua proses
anaknya selesai sebelum berakhir.
Process
Termination
Mekanisme di mana sebuah proses mengakhiri eksekusinya
dan melepaskan semua sumber daya yang digunakannya.
Proses ini merupakan kebalikan dari penciptaan proses.
Process Termination Exit Normal: Proses telah menyelesaikan semua tugasnya
dan mencapai kondisi akhir yang diharapkan.
Exit Error: Terjadi kesalahan fatal dalam proses, seperti
kesalahan pemrograman atau kehabisan memori.
Killed by another process: Proses menerima sinyal dari
proses lain atau dari sistem operasi yang
menginstruksikannya untuk berhenti.
Fatal error : Sistem operasi menghentikan proses karena
alasan tertentu, misalnya melanggar kebijakan sistem
atau menggunakan terlalu banyak sumber daya.
Pembebasan Sumber Daya: Ketika sebuah proses
dihentikan, semua sumber daya yang digunakannya,
seperti memori, file, dan perangkat I/O, akan
dikembalikan ke sistem operasi.
Konsekuensi Status Anak: Jika proses yang dihentikan adalah proses
Penghentian Proses induk, maka semua proses anaknya akan menjadi proses
yatim (orphan). Sistem operasi biasanya akan
mengadopsi proses-proses yatim ini menjadi anak dari
proses init.
Zombie Proses: Jika proses anak selesai sebelum proses
induknya memanggil wait() untuk menunggu status
keluaran anak, maka proses anak akan menjadi zombie
proses. Zombie proses masih terdaftar dalam tabel
proses, tetapi tidak menggunakan sumber daya sistem.
Process
Hierarchies
Menggambarkan hubungan antara proses induk (parent
process) dan proses anak (child process) dalam sebuah
sistem operasi. Hubungan ini membentuk sebuah struktur
pohon, di mana proses induk berada di tingkat atas dan
Process Hierarchies proses anak berada di tingkat bawah.
Hierarki proses terbentuk ketika sebuah proses (induk)
membuat proses baru (anak). Proses anak mewarisi sebagian
besar atribut dari proses induknya.
Organisasi Proses: Membantu dalam mengorganisasi dan mengelola
proses-proses yang berjalan dalam sistem.
Mengapa Hierarki Pembagian Sumber Daya: Memungkinkan kontrol yang lebih baik terhadap
pembagian sumber daya antara proses induk dan anak.
Proses Penting? Komunikasi Antar Proses: Menyediakan mekanisme untuk komunikasi antara
proses induk dan anak.
Terminasi Proses: Memungkinkan proses induk untuk menunggu hingga
semua proses anaknya selesai sebelum mengakhiri dirinya sendiri.
Process States
Kondisi di mana sebuah proses berada pada suatu waktu tertentu
selama eksekusinya. Setiap proses akan beralih dari satu status ke
status lainnya selama siklus hidupnya. Status ini mencerminkan aktivitas
yang sedang dilakukan oleh proses tersebut dan interaksi proses
dengan sistem operasi.
Process States
Meskipun setiap proses merupakan entitas independen, dengan
penghitung program dan status internalnya sendiri, proses sering kali
perlu berinteraksi dengan proses lain. Satu proses dapat menghasilkan
beberapa keluaran yang digunakan proses lain sebagai masukan.
Running: Proses sedang aktif dieksekusi oleh
CPU. Blocked: Proses sedang menunggu suatu
kejadian (event) untuk terjadi, sehingga tidak
Ready: Proses siap untuk dieksekusi, namun dapat melanjutkan eksekusi.
sedang menunggu giliran untuk menggunakan
CPU.
Angka-angka pada panah menunjukkan peristiwa yang
menyebabkan transisi dari satu status ke status lainnya:
Running ke Blocked: Proses yang sedang berjalan (Running) akan
beralih ke status Blocked ketika ia membutuhkan suatu sumber
daya yang saat ini tidak tersedia, misalnya menunggu input dari
pengguna atau hasil dari operasi I/O.
Running ke Ready: Proses yang sedang berjalan akan beralih ke
status Ready ketika waktu eksekusinya habis atau ketika proses
lain dengan prioritas lebih tinggi membutuhkan CPU.
Ready ke Running: Proses yang berada dalam status Ready akan
beralih ke status Running ketika scheduler (penjadwal) memilih
proses tersebut untuk dieksekusi.
Blocked ke Ready: Proses yang sedang menunggu suatu event
(Blocked) akan beralih ke status Ready ketika event yang
ditunggu terjadi. Misalnya, jika proses sedang menunggu input
dari pengguna dan pengguna telah memberikan input, maka
proses tersebut akan siap untuk melanjutkan eksekusi.
Thread
thread bisa diibaratkan sebagai "utas" eksekusi di dalam proses
tersebut. Sederhananya, satu proses bisa memiliki beberapa
thread yang berjalan secara paralel atau konkuren.
Secara informal, proses adalah program yang sedang
dieksekusi. Ada dua jenis proses, proses berat (heavyweight)
atau biasa dikenal dengan proses tradisional, dan proses ringan
Thread atau kadang disebut thread.
Thread saling berbagi bagian program, bagian data, dan
sumber daya sistem operasi dengan thread lain yang mengacu
pada proses yang sama.
Threads adalah unit terkecil dari eksekusi yang dapat
dijadwalkan oleh sistem operasi.
Thread Usage mengacu pada cara kita memanfaatkan konsep
thread dalam desain dan implementasi sistem operasi modern.
Threads digunakan karena memungkinkan program untuk
Thread Usage menjalankan beberapa tugas secara bersamaan dalam proses
yang sama. Ini sangat berguna untuk meningkatkan efisiensi dan
responsivitas aplikasi.
Threads dapat membuat program lebih responsif, karena satu
thread dapat menangani interaksi pengguna, sementara thread
lainnya mengurus tugas pemrosesan di latar belakang.
Keyboard: Ini adalah perangkat input yang digunakan untuk
memasukkan teks ke dalam sistem.
Kernel: Ini adalah inti dari sistem operasi, yang bertanggung
jawab untuk mengelola sumber daya sistem, menjalankan
proses, dan menyediakan layanan inti lainnya.
Disk: Ini adalah perangkat penyimpanan yang digunakan untuk
menyimpan data secara permanen.
Gambar ini menggambarkan bagaimana threads memungkinkan word processor untuk menjalankan beberapa
fungsi penting secara bersamaan: menerima input pengguna, menyimpan data secara otomatis, dan mengelola
tata letak dokumen. Pendekatan ini membuat aplikasi lebih efisien dan responsif, karena setiap tugas dapat
dijalankan di thread terpisah tanpa saling mengganggu.
Thread untuk Input dari Keyboard: Satu thread khusus menangani
input dari keyboard, seperti pengetikan teks oleh pengguna.
Dengan adanya thread khusus ini, word processor dapat
merespons input pengguna secara real-time tanpa menunggu
tugas-tugas lain selesai.
Thread untuk Background Auto-Saving (Menyimpan Otomatis di
Latar Belakang): Thread kedua menangani proses penyimpanan
otomatis ke disk. Fungsi ini penting agar data pengguna secara
berkala disimpan untuk mencegah kehilangan data apabila
terjadi kesalahan atau aplikasi tiba-tiba tertutup.
Thread untuk Proses Pemformatan atau Pembuatan Layout
Dokumen: Thread ketiga dapat digunakan untuk tugas-tugas
seperti pemformatan teks atau tampilan halaman.
Web Server Process: Ini adalah proses utama yang menjalankan
web server. Proses ini bertanggung jawab untuk menerima
permintaan dari klien, mengelola sumber daya, dan memastikan
kelancaran operasi server.
Dispatcher Thread: Thread ini bertindak sebagai "penerima
tamu" yang menerima semua permintaan masuk dari klien
melalui koneksi jaringan. Ketika ada permintaan baru, dispatcher
thread akan menugaskan permintaan tersebut kepada salah
satu worker thread yang tersedia.
Worker Thread: Thread-thread inilah yang sebenarnya melakukan
pekerjaan untuk melayani permintaan klien. Mereka mengambil
permintaan dari dispatcher thread, memproses permintaan
tersebut (misalnya, mencari file yang diminta, menjalankan
skrip), dan mengirimkan respons kembali ke klien.
Gambar ini menggambarkan bagaimana sebuah web server dapat dirancang untuk menangani banyak
permintaan klien secara bersamaan dengan menggunakan konsep thread.
Web Page Cache: Ini adalah area penyimpanan sementara yang
digunakan untuk menyimpan salinan halaman web yang sering
diakses. Dengan adanya cache, server dapat melayani
permintaan ulang untuk halaman yang sama dengan lebih
cepat, karena tidak perlu memproses permintaan tersebut dari
awal.
Kernel: Ini adalah inti dari sistem operasi, yang bertanggung
jawab untuk mengelola sumber daya sistem, menjalankan
proses, dan menyediakan layanan inti lainnya. Kernel akan
mengatur alokasi CPU dan memori untuk setiap thread.
User Space dan Kernel Space: Ini adalah dua area memori yang
berbeda. User space adalah area di mana aplikasi pengguna
(seperti web server) berjalan, sedangkan kernel space adalah
area di mana kernel sistem operasi berjalan.
Implementing
Thread
Thread in user space adalah implementasi thread
yang sepenuhnya berada di dalam ruang alamat
proses pengguna. Kernel sistem operasi tidak
secara langsung terlibat dalam manajemen
thread tingkat rendah.
Implementing Threads
in User Space
Manajemen thread, penjadwalan, dan semua
operasi terkait thread lainnya ditangani oleh
pustaka runtime yang disediakan oleh sistem
operasi atau oleh aplikasi itu sendiri.
Pustaka Runtime: Sebuah pustaka runtime menyediakan
fungsi-fungsi untuk membuat, menghancurkan, dan mengelola
thread.
Ruang Alamat: Semua thread dalam sebuah proses berbagi
ruang alamat yang sama.
Cara Kerja Threads in
User Space Stack: Setiap thread memiliki stack sendiri untuk menyimpan
informasi lokal, parameter fungsi, dan alamat return.
Konteks Switching: Ketika terjadi peralihan antara thread,
pustaka runtime menyimpan konteks eksekusi thread yang
sedang berjalan (misalnya, nilai register, pointer stack) dan
memuat konteks thread yang akan dieksekusi.
Thread in the kernel, atau sering disebut sebagai
kernel-level threads, adalah implementasi thread
di mana manajemen dan penjadwalan thread
dilakukan secara langsung oleh sistem operasi
(kernel).
Implementing Threads
in the Kernel
Kernel-level threads menawarkan kinerja yang
lebih baik dan dukungan yang lebih baik dari
sistem operasi dibandingkan dengan user-level
threads. Namun, implementasi kernel-level
threads lebih kompleks dan membutuhkan
overhead yang lebih besar.
Pembuatan Thread: Ketika sebuah proses membuat thread
baru, kernel akan mengalokasikan sumber daya yang
diperlukan untuk thread tersebut, termasuk stack, register, dan
entri dalam tabel proses.
Cara Kerja Threads in Penjadwalan: Kernel menggunakan algoritma penjadwalan
untuk menentukan thread mana yang akan dieksekusi pada
the Kernel suatu waktu tertentu.
Konteks Switching: Ketika terjadi peralihan antara thread,
kernel akan menyimpan konteks eksekusi thread yang sedang
berjalan dan memuat konteks thread yang akan dieksekusi.
Gambar (a) memperlihatkan pendekatan user-level Gambar (b) memperlihatkan kernel-level threads, yang
threads, yang menawarkan performa cepat di ruang memberikan kontrol penuh kepada kernel atas thread,
pengguna tetapi dengan keterbatasan seperti memungkinkan parallelism pada multiprosesor tetapi
kurangnya dukungan parallelism dan masalah dengan mengorbankan performa karena adanya overhead system
operasi blocking. call.
Komponen utama pada gambar (a):
Process: Setiap proses memiliki satu atau lebih thread yang
dikelola oleh pustaka thread di user space.
User Space: Bagian atas gambar mewakili ruang pengguna, di
mana aplikasi pengguna berjalan.
Kernel Space: Bagian bawah gambar mewakili ruang kernel, di
mana sistem operasi berjalan.
Run-time System: Ini adalah sebuah pustaka yang berjalan di
ruang pengguna dan bertanggung jawab untuk mengelola
thread-thread yang dibuat oleh aplikasi. Pustaka ini
menyediakan API untuk membuat, menghancurkan, dan
mensinkronkan thread.
Thread Table: Tabel ini dikelola oleh run-time system dan berisi
informasi tentang semua thread yang sedang berjalan dalam
proses.
Process Table: Tabel ini juga dikelola oleh run-time system,
tetapi pada tingkat yang lebih tinggi. Tabel ini berisi informasi
tentang proses secara keseluruhan.
Komponen utama pada gambar (b):
Process: Sama seperti pada gambar (a), tetapi kernel memiliki
informasi lengkap mengenai thread yang ada dalam setiap
proses.
Thread Table: Tabel ini disimpan di kernel, berisi informasi
mengenai setiap thread di semua proses. Karena kernel
mengetahui setiap thread secara langsung, maka kernel bisa
mengelola dan menjadwalkan thread secara lebih efisien.
Process Table: Di kernel, setiap proses masih memiliki entri
tersendiri, tetapi kernel juga memiliki informasi mengenai
thread-thread di dalamnya.
Keuntungan Threads in User Space Kekurangan Threads in User Space
Fleksibilitas: Pengembang memiliki
kendali penuh atas perilaku
thread. Performa: Jika terjadi blocking system call,
seluruh proses dapat terblokir.
Efisiensi: Overhead sistem lebih
rendah karena kernel tidak terlibat
dalam setiap operasi thread.
Dukungan Sistem Operasi: Tidak semua
sistem operasi mendukung thread-level
user space.
Portabilitas: Mudah diporting ke
sistem operasi yang berbeda.
Keuntungan Threads in the Kernel Kekurangan Threads in the Kernel
Kinerja: Kernel dapat melakukan
penjadwalan thread yang lebih
efisien. Overhead: Overhead sistem lebih tinggi
karena kernel harus mengelola setiap
thread.
Blocking System Call: Jika sebuah
thread terblokir, kernel dapat
dengan mudah menjadwalkan
Kompleksitas: Implementasi lebih
thread lain.
kompleks.
Dukungan Sistem Operasi: Hampir
semua sistem operasi modern
mendukung kernel-level threads.