Back to IF2130 Sistem Operasi
Masalah Sinkronisasi dan Solusi Dasar
Questions/Cues
Mengapa perlu sinkronisasi?
Apa itu Race Condition?
Apa itu Critical Section?
Apa 3 syarat solusi Critical Section Problem?
Apa itu Mutex Lock?
Apa itu busy waiting/spinlock?
Apa itu Semaphore?
Beda counting vs binary semaphore?
Apa itu Deadlock dan Starvation?
Reference Points
PDF: 5. IF2130-06-2025-Synchronization.pdf
Slides: 4-42
Latar Belakang: Inkonsistensi Data
Proses atau thread yang kooperatif seringkali berbagi data (variabel, buffer, dll). Jika beberapa proses/thread mencoba mengakses dan memanipulasi data bersama secara bersamaan, hasilnya bisa menjadi kacau dan tidak dapat diprediksi.
Race Condition
Race Condition adalah situasi di mana beberapa proses/thread mengakses dan memanipulasi data bersama secara konkuren, dan hasil akhir dari data tersebut bergantung pada urutan eksekusi yang “kebetulan” terjadi.
Contoh Klasik: Operasi
counter++dancounter--. Di level mesin, operasi ini terdiri dari tiga instruksi (load, increment/decrement, store). Jika eksekusi dari dua thread yang melakukan operasi ini saling tumpang tindih (interleaved), hasil akhirnya bisa salah.The Critical-Section Problem
Critical Section: Bagian dari kode program di mana sebuah proses mengakses sumber daya bersama (shared resource).
Tujuan: Mendesain sebuah protokol yang memastikan bahwa ketika satu proses sedang mengeksekusi di dalam critical section-nya, tidak ada proses lain yang boleh masuk ke critical section mereka (yang mengakses sumber daya yang sama).
Syarat Solusi Critical-Section
Mutual Exclusion (Eksklusi Mutual): Jika satu proses ada di dalam critical section, maka tidak boleh ada proses lain yang berada di dalam critical section mereka.
Progress (Kemajuan): Jika tidak ada proses di critical section dan ada beberapa proses yang ingin masuk, maka pemilihan proses berikutnya tidak boleh ditunda tanpa batas.
Bounded Waiting (Tunggu Terbatas): Harus ada batas berapa kali proses lain diizinkan masuk ke critical section setelah sebuah proses mengajukan permintaan, untuk mencegah starvation.
Solusi 1: Mutex Locks
Mutex (Mutual Exclusion) Lock adalah alat sinkronisasi paling sederhana. Ia bekerja seperti kunci pintu.
Sebuah proses harus mengambil kunci (
acquire()) sebelum masuk ke critical section.Setelah selesai, ia harus melepaskan kunci (
release()).Jika proses mencoba
acquire()saat kunci sedang dipegang, ia harus menunggu. Implementasi sederhana dariacquire()seringkali menggunakan busy waiting (terus-menerus memeriksa apakah kunci sudah tersedia). Kunci yang menggunakan busy waiting disebut spinlock.Solusi 2: Semaphores
Semaphore adalah variabel integer yang lebih general daripada mutex dan hanya bisa diakses melalui dua operasi atomik:
wait(S)atauP(S): Mengurangi nilai semaphoreS. JikaSmenjadi negatif, proses yang memanggil akan diblokir (tidur) dan dimasukkan ke dalam antrian tunggu.
signal(S)atauV(S): Menambah nilai semaphoreS. Jika ada proses yang sedang menunggu di antrian, satu proses akan “dibangunkan” dan dipindahkan ke ready queue.Jenis Semaphore:
Counting Semaphore: Nilainya bisa berapa saja. Digunakan untuk mengontrol akses ke sumber daya yang jumlahnya terbatas (misal,
Nslot buffer).Binary Semaphore: Nilainya hanya bisa 0 atau 1. Berfungsi seperti mutex lock.
Deadlock dan Starvation
Deadlock: Situasi di mana dua atau lebih proses saling menunggu sumber daya yang dipegang oleh proses lain dalam set tersebut, sehingga tidak ada yang bisa maju.
Starvation: Sebuah proses tidak pernah mendapat giliran karena terus-menerus “kalah saing” oleh proses-proses lain.
Sinkronisasi diperlukan untuk mencegah inkonsistensi data akibat race condition saat beberapa proses/thread mengakses sumber daya bersama di dalam critical section. Solusi yang baik harus memenuhi syarat mutual exclusion, progress, dan bounded waiting. Alat sinkronisasi dasar termasuk Mutex Lock yang bekerja seperti kunci pintu (seringkali dengan busy waiting), dan Semaphore, sebuah variabel integer yang dikelola oleh operasi atomik wait() (untuk mengambil sumber daya/menunggu) dan signal() (untuk melepaskan sumber daya/membangunkan) untuk mengoordinasikan eksekusi tanpa menyebabkan deadlock atau starvation.