Modul ini membahas masalah starvation dan deadlock pada sistem operasi konkuren. Deadlock terjadi ketika sekelompok thread saling menunggu satu sama lain untuk memperoleh akses ke sumber daya. Empat kondisi harus terpenuhi agar terjadi deadlock: eksklusi bersama, tunggu dan pegang, tidak dapat direbut, dan menunggu sirkuler. Modul ini juga menjelaskan cara-cara mencegah dan mengatasi deadlock, seperti menghilangkan salah
1. MODUL S.O – DEADLOCK
TUJUAN
Menjelaskan perbedaan antara starvation dan deadlock
Menyebutkan kondisi-kondisi penyebab deadlock
Menjelaskan mekanisme mencegah dan menghadapi deadlock
MASALAH PADA CONCURRENCY
MASALAH STARVATION
Sebuah keadaan yang dapat mengakibatkan thread tidak dieksekusi
Satu atau lebih thread menunggu dalam ketidaktentuan
contoh starvation
Real World : Meninggu pada saat standby untuk sebuah penerbangan
S.O: Thread dengan prioritas rendah menunggu untuk menggunakan/mengakses resource yang
sedang digunakan secara konstan oleh thread berprioritas tinggi.
MASALAH LIVELOCK
Sebuah keadaan yang mengakibatkan semua thread melakukan sesuatu tanpa akhir, tanpa
melakukan progress apapun.
Contoh : out of memory , tetapi multiple thread terus mencoba mendapatkan alokasi
MASALAH DEADLOCK
Sebuah keadaan yang mengakibatkan semua thread stuck, sehingga tidak dapat dilakukan apapun
Semua thread mmenunggu selamanya
Deadlock terjadi di antara sebuah kumpulan thread bila :
o Setiap thread pada kumpulan tersebut menunggu sebuah event (utk mendapatkan akses ke
resource atau melepaskan resource)
o Event ini hanya dapat dilakukan oleh thread lain dalam kumpulan tersebut
2. Contoh :
o Real Word : Gridlock pada lalulintas
o S.O :
Thread 1 me –lock Resource A menunggu resource B
Thread 2 me-lock Resource B menunggu Resource A
STARVATION VS DEADLOCK
Key Idea :
Deadlock => starvation (tapi tidak sebaliknya)
Penyelesaian :
o Starvation : dapat berakhir ( tapi tidak harus)
o Deadlock : tidak dapat diakhiri kecuali dengan intervensi eksternal
KONDISI PENYEBAB DEADLOCK
1. Mutual Exclusion : paling sedikit satu proses menggunakan resource yang tidak boleh dishare
2. Hold and wait : ada sebuah proses yang menggunakan (holding) sebuah resource sambil menunggu
resource lainnya
3. No preemption : Resource tidak boleh di preempt ( dikuasai/direbut)
4. Circular Wait : Ada sekumpulan proses {P1, P2, ..PN} sedemikian sehingga P1 menunggu P2, P2
menunggu P3, ..dan PN menunggu P1.
Ke empat kondisi ini harus terpenuhi untuk menyebabkan deadlock terjadi
CONTOH DEADLOCK
3. Bagaimana keempat kondisi yang menyebabkan lock terjadi pada contoh di atas?
1. Mutual Exclusion : terjadi pd contoh di atas, krn kedua thread melakukan lock. Lock menghasilkan
mutual exclusion
2. Hold and wait : thread 1 dan 2 menginginkan untuk melock sebuah resource tertentu dan dalam
waktu yang sama tetap menahan (me-lock) re source lainnya.
3. No preemption : tidak ada satu halpun yang dapat memaksa thread 1 dan 2 untuk melepaskan lock
nya
4. Circular wait : thread 1 menunggu/memembutuhkan apa yang di lock oleh thread 2 dan thread 2
menunggu/membutuhkan apa yang dilock oleh thread 1.
MENGHADAPI DEADLOCK
MENGHADAPI DEADLOCK : IGNORE
Berpura-pura deadlock tidak akan terjadi
Ternyata pendekatan yang paling umum
MENGHADAPI DEADLOCK : REACTIVE
Secara periodeik mengecek bukti deadlock
o Dengan timeout: bila sampai batas waktu tertentu tidak terjadi apa apa berarti kemungkinan
terjadi deadlock dan SO harus melakukan sesuatu utk menghadapinya
Recover
o Blue screen dan reboot komputer
o Memilih thread yang akan di-terminate
Hanya mungkin dilakukan pada beberapa aplikasi (yang tidak kritikal)
Thread harus di clean up ketika di terminate
Thread biasanya akan diulangi dari awal
o Memecahkan kondisi preemption
Biasanya pada database.
MENGHADAPI DEADLOCK : PROACTIVE
Mencegah salah 1 dari 4 kondisi yang mengakibatkan deadlock
Tidak ada pendekatan tunggal yang sesuai untuk semua situasi
4. o Perlu teknik untuk tiap 4 kondisi
MENCEGAH DEADLOCK : NO MUTUAL EXCLUSION
Membuat resource bisa dishare (dengan batasan batasan tertentu) ‘Jangan pelit!’
Contoh : read-only file
Contoh : Alih alih memakai variabel global, digunakan variabel untuk tiap thread counter untuk
tiap thread (bukan counter global)
MENCOBA MEMPERBAIKI DEADDLOCK
Sample Deadlock :
Bagaimana memperbaikinya?
MENCEGAH DEADLOCK : NO HOLD AND WAIT
Hanya meminta resource bila sedang tidak ‘mengenggam’ resource yang lain (Jangan serakah!);
lepaskan resource yang sedang ‘digenggam’ sebelum minta resource yang lain
Contoh :
MENCEGAH DEADLOCK : PREEMPTION
Memaksa penyerahan resource (preempt resource)
Contoh :
o Bila Thread A menunggu resource yang ditahan oleh Thread B, maka ambil resource tersebut
dari B dan berikan ke A
Problem :
o Hanya dapat berlaku untk beberapa resource ( ct CPU dan memori)
o Tidak mungkin berlaku bila resource tidak bisa disimpan dan direstore.
5. MENCEGAH DEADLOCK : NO CIRCULAR WAIT
Terapkan pengaturan/urutan pada resource.
o Berikan semua resource sebuah ranking; ranking tertinggi mendapat akses resource Lock
Hierarchy
KUIS
1. Sebutkan contoh starvation dan deadlock (bila perlu gambarkan) dalam kehidupan sehari hari (selain
dari contoh di modul ini)
2. Jelaskan cara cara menghadapi/mencegah deadlock.