Pendahuluan
Race condition adalah suatu kondisi dimana dua atau lebih proses
mengakses shared memory/sumber daya pada saat yang bersamaan dan hasil
akhir dari data tersebut tergantung dari proses mana yang terakhir selesai
dieksekusi sehingga hasil akhirnya terkadang tidak sesuai dengan yang
dikehendaki.
Solusi Race Condition
Cara untuk menghindari race condition adalah kita harus dapat menjamin
bahwa jika suatu proses sedang menjalankan critical section, maka proses lain
tidak boleh masuk ke dalam critical section tersebut.
Critical Section
Critical section adalah segmen kode yang mengakses data yang digunakan
proses secara bersama-sama yang dapat membawa proses itu ke bahaya race
condition. Biasanya sebuah proses sibuk melakukan perhitungan internal dan
hal-hal lainnya tanpa ada bahaya yang menuju ke race condition pada sebagian
besar waktu. Akan tetapi, biasanya setiap proses memiliki segmen kode
dimana proses itu dapat mengubah variabel, meng- update suatu tabel,
menulis ke suatu file, dan lain-lainnya, yang dapat membawa proses itu ke
bahaya race condition.
Ilustrasi Critical Section
Syarat Solusi Masalah Critical Section
• Mutual Exclusion
• Progress
• Bounded Waiting
Mutual Exclusion
• Jika tidak ada proses yang sedang menjalankan critical section-nya dan jika
terdapat lebih dari satu proses lain yang ingin masuk ke critical section,
maka hanya proses-proses yang tidak sedang menjalankan remainder
section-nya yang dapat berpartisipasi dalam memutuskan siapa yang
berikutnya yang akan masuk ke critical section, dan pemilihan siapa yang
berhak masuk ke critical section ini tidak dapat ditunda secara tak terbatas
(sehingga tidak terjadi deadlock).
Ada batas waktu tunggu (bouded time)
• Jika seandainya ada proses yang sedang menjalankan critical section, maka
terdapat batasan waktu berapa lama suatu proses lain harus menunggu
giliran untuk mengakses critical section. Dengan adanya batas waktu tunggu
akan menjamin proses dapat mengakses ke critical section (tidak
mengalami starvation: proses seolah-olah berhenti,
menunggu request akses ke critical section diperbolehkan).
Solusi Untuk Memecahkan Critical Section
• Adalah sebuah variabel bertipe integer yang selain saat inisialisasi, hanya dapat
diakses melalui dua operasi standar, yaitu increment dan decrement.
• Semafor digunakan untuk menyelesaikan masalah sinkronisasi secara umum.
• Berdasarkan jenisnya, semafor hanya bisa memiliki nilai 1 atau 0, atau lebih dari
sama dengan 0.
• Konsep semafor pertama kali diajukan idenya oleh Edsger Dijkstra pada tahun
1967.
Jenis Semaphore
• Binary semaphore . Semafor ini hanya memiliki nilai 1 atau 0. Sering juga
disebut sebagai semafor primitif
• Counting semaphore . Semafor ini memiliki nilai 0, 1, serta integer lainnya.
Banyak sistem operasi yang tidak secara langsung mengimplementasikan
semafor ini, tetapi dengan memanfaatkan binary semaphore
Fungsi Semaphore
• Mutual Exclusion
• Resource Controller
• Sinkronisasi antar proses
Keuntungan Semaphore
• Pengabaian
• Pencegahan
• Penghindaran
• Pendeteksian dan Pemulihan
Pengabaian
Maksud dari pengabaian di sini adalah sistem mengabaikan terjadinya deadlock dan
pura-pura tidak tahu kalau deadlock terjadi. Dalam penanganan dengan cara ini
dikenal istilah ostrich algorithm. Pelaksanaan algoritma ini adalah sistem tidak
mendeteksi adanya deadlock dan secara otomatis mematikan proses atau program
yang mengalami deadlock. Kebanyakan sistem operasi yang ada mengadaptasi cara
ini untuk menangani keadaan deadlock. Cara penanganan dengan
mengabaikan deadlock banyak dipilih karena kasus deadlock tersebut jarang terjadi
dan relatif rumit dan kompleks untuk diselesaikan. Sehingga biasanya hanya
diabaikan oleh sistem untuk kemudian diselesaikan masalahnya oleh user dengan
cara melakukan terminasi dengan Ctrl+Alt+Del atau melakukan restartterhadap
komputer.
Pencegahan
Pada sistem yang sedang berada pada kondisi deadlock, tindakan yang harus
diambil adalah tindakan yang bersifat represif. Tindakan tersebut adalah
dengan mendeteksi adanya deadlock, kemudian memulihkan kembali sistem.
Proses pendeteksian akan menghasilkan informasi apakah sistem
sedang deadlock atau tidak serta proses mana yang mengalami deadlock. Akan
dibahas secara lebih mendalam pada bagian selanjutnya.
Pencegahan Deadlock
• Mutual Exclusion
• Hold and Wait
• No Preemption
• Circular Wait
Pencegahan Kondisi Mutual Exclusion
Kondisi mutual exclusion pada sumber daya adalah sesuatu yang wajar terjadi,
yaitu pada sumber daya yang tidak dapat dibagi (non-sharable). Sedangkan
pada sumber daya yang bisa dibagi tidak ada istilah mutual exclusive. Jadi,
pencegahan kondisi yang pertama ini sulit karena memang sifat dasar dari
sumber daya yang tidak dapat dibagi.
Pencegahan Kondisi Hold and Wait
Untuk kondisi yang kedua, sistem perlu memastikan bahwa setiap kali proses
meminta sumber daya, ia tidak sedang memiliki sumber daya lain. Atau bisa
dengan proses meminta dan mendapatkan sumber daya yang dimilikinya
sebelum melakukan eksekusi, sehingga tidak perlu menunggu.
Pencegahan Kondisi No Preemption
Kondisi 'lingkaran setan' ini dapat 'diputus' dengan jalan menentukan total
kebutuhan terhadap semua tipe sumber daya yang ada. Selain itu, digunakan
pula mekanisme enumerasi terhadap tipe-tipe sumber daya yang ada. Setiap
proses yang akan meminta sumber daya harus meminta sumber daya dengan
urutan yang menaik. Misalkan sumber daya printer memiliki nomor 1
sedangkan CD-ROM memiliki nomor 3. Proses boleh melakukan permintaan
terhadap printer dan kemudian CD-ROM, namun tidak boleh sebaliknya.
Penghindaran Deaclock
• Tiap proses memberitahu jumlah kebutuhan maksimum untuk setiap tipe sumber daya
yang ada.
• Terdapat deadlock-avoidance algorithm yang secara rutin memeriksa state dari sistem
untuk memastikan tidak adanya kondisi circular wait serta sistem berada pada kondisi safe
state. Safe state adalah suatu kondisi dimana semua proses mendapatkan sumber daya
yang dimintanya dengan sumber daya yang tersedia. Apabila tidak bisa langsung, ia harus
menunggu selama waktu tertentu, kemudian mendapatkan sumber daya yang diinginkan,
melakukan eksekusi, dan terakhir melepas kembali sumber daya tersebut.
• Terdapat dua jenis algoritma penghindaran yaitu resource-allocation graph untuk single
instances resources serta banker's algorithm untukmultiple instances resources.
Pendeteksian Deadlock
• Terminasi Proses
• Rollback and Restart
Terminasi Proses
Pemulihan sistem dapat dilakukan dengan cara melalukan terminasi terhadap semua proses
yang terlibat dalam deadlock. Dapat pula dilakukan terminasi terhadap proses yang terlibat
dalam deadlock secara satu per satu sampai 'lingkaran setan' atau circular wait hilang. Seperti
diketahui bahwa circular wait adalah salah satu karakteristik terjadinya deadlock dan
merupakan kesatuan dengan tiga karakteristik yang lain. Untuk itu, dengan menghilangkan
kondisi circular wait dapat memulihkan sistem dari deadlock.Dalam melakukan terminasi
terhadap proses yang deadlock, terdapat beberapa faktor yang menentukan proses mana
yang akan diterminasi. Faktor pertama adalah prioritas dari proses-proses yang
terlibat deadlock. Faktor kedua adalah berapa lama waktu yang dibutuhkan untuk eksekusi
dan waktu proses menunggu sumber daya. Faktor ketiga adalah berapa banyak sumber daya
yang telah dihabiskan dan yang masih dibutuhkan. Terakhir, faktor utilitas dari proses pun
menjadi pertimbangan sistem untuk melakukan terminasi pada suatu proses.
Rollback and Restart