PENDETEKSIAN, PENCEGAHAN,
DAN CARA MENGATASI DEADLOCK
Metode Pendeteksian
Deadlock
Deadlock akan terjadi, jika dan hanya jika grafik tunggu
memiliki siklus di dalamnya.Untuk mendeteksi deadlock, sistem harus memiliki
grafik tunggu dan menjalankan algoritma deteksi deadlock secara periodik. Hal
yang harus diperhatikan adalah seberapa sering algoritma deteksi harus
dipanggil. Hal ini tergantung dari dua faktor:
1.
Frekuensi terjadinya deadlock pada umumnya
2.
Jumlah proses yang akan terpengaruh ketika
deadlock terjadi.
Pencegahan deadlock
Jika pada
awal kita membahas tentang ke-empat hal yang menyebabkan terjadinya deadlock.
Maka pada bagian ini, kita akan membahas cara menanggulangi keempat penyebab
deadlock itu, sehingga dengan kata lain kita mengadakan pencegahan terhadap
deadlock.
·
Masalah Kondisi Mutual Eksklusif (Mutual
exclusion)
Masalah
ini tidak dapat dilarang, jika aksesnya perlu bersifat spesial untuk satu
proses, maka hal ini harus di dukung oleh kemampuan sistem operasi. Jadi
diusahakan agar tidak mempergunakan kondisi spesial tersebut sehingga sedapat
mungkin deadlock dapat dihindari.
·
Masalah Kondisi Menunggu dan Memegang (Hold
and wait condition)
Penanggulangan deadlock dari kondisi ini lebih baik dan menjanjikan,
asalkan kita dapat menahan proses yang memegang sumber daya untuk tidak
menunggu sumber daya laun, kita dapat mencegah deadlock. Caranya ialah dengan
meminta semua sumber daya yang ia butuhkan sebelum proses berjalan. Tetapi
masalahnya sebagian proses tidak mengetahui keperluannya sebelum ia berjalan.
Jadi untuk mengatasi hal ini, kita dapat menggunakan algoritma bankir. Yang
mengatur hal ini dapat sistem operasi ataupun sebuah protokol. Hasil yang dapat
terjadi ialah sumber daya lebih di-spesifikasi dan kelaparan sumber daya, atau
proses yang membutuhkan sumber daya yang banyak harus menunggu sekian lama
untuk mendapat sumber daya yang dibutuhkan.
·
Masalah tidak ada Preemption (No preemption
condition)
Hal ketiga ialah jangan sampai ada preemption pada sumber daya yang telah
dialokasikan. Untuk memastikan hal ini, kita dapat menggunakan protokol. Jadi
jika sebuah proses meminta sumber daya yang tidak dapat dipenuhi saat itu juga,
maka proses mengalami preempted. Atau dengan kata lain ada sumber daya
dilepaskan dan diberikan ke proses yang menunggu, dan proses itu akan menunggu
sampai kebutuhan sumber dayanya dipenuhi.
Jalan lain kita harus mencek sumber daya yang dimaui oleh proses di cek
dahulu apakah tersedia. Jika ya maka kita langsung alokasikan, sedangkan jika
tidak tersedia maka kita melihat apakah ada proses lain yang menunggu sumber
daya juga. Jika ya, maka kita ambil sumber daya dari proses yang menunggu
tersebut dan memberikan pada proses yang meminta tersebut. Jika tidak tersedia
juga, maka proses itu harus menunggu. Dalam menunggu, beberapa dari sumber
dayanya dapat saja di preempted, tetapi jika ada proses yang memintanya. Cara
ini efektif untuk proses yang menyimpan dalam memory atau register.
·
Masalah Circular Wait
Masalah
ini dapat ditangani oleh sebuah protokol yang menjaga agar sebuah proses tidak
membuat lingkaran siklus yang dapat mengakibatkan deadlock
Atau kita harus mencek sumber daya yang dimaui oleh proses
di cek dahulu apakah tersedia. Jika ya maka kita langsung alokasikan, sedangkan
jika tidak tersedia maka kita melihat apakah ada proses lain yang menunggu
sumber daya juga. Jika ya, maka kita ambil sumber daya dari proses yang
menunggu tersebut dan memberikan pada proses yang meminta tersebut. Jika tidak
tersedia juga, maka proses itu harus menunggu. Dalam menunggu, beberapa dari
sumber dayanya bisa saja di preempted, tetapi jika ada proses yang memintanya.
Cara ini efektif untuk proses yang menyimpan dalam memory atau register
Mengatasi Deadlock
dan Dining Philosophers
Bila deadlock terjadi maka algoritma deteksi harus sering
dipanggil. Resource yang dialokasikan ke proses-proses yang mengalami deadlock
tidak akan digunakan sampai kondisi deadlock diatasi. Bila deadlock tidak
segera diatasi maka jumlah proses yang terlibat dalam deadlock akan semakin
bertambah. Salah satu ciri terjadinya deadlock adalah ketika beberapa proses
mengajukan permohonan untuk resource, tetapi permohonan ini tidak dapat
dipenuhi dengan segera. Sistem dapat saja memanggil algoritma deteksi setiap
kali permohonan untuk resource tidak dapat diperoleh dengan segera.
Namun,semakin sering algoritma deteksi dipanggil, maka waktu overhead yang
dibutuhkan untuk komputasi menjadi semakin besar.
Banyak cara untuk
menanggulangi deadlock:
1. Mengabaikan masalah deadlock.
2. Mendeteksi dan memperbaiki
3. Penghindaran yang terus menerus dan pengalokasian yang
baik dengan menggunakan protokol untuk memastikan sistem tidak pernah memasuki
keadaan deadlock . Yaitu dengan deadlock avoidance
sistem untuk men- data informasi tambahan tentang proses mana yang akan meminta
dan menggunakan sumber daya.
4. Pencegahan yang secara struktur bertentangan dengan 4
kondisi terjadinya deadlockdengan deadlock prevention
sistem untuk memasti- kan bahwa salah satu kondisi yang penting tidak dapat
menunggu.
Mengabaikan
Masalah deadlock
Metode ini lebih
dikenal dengan Algoritma Ostrich. Dalam algoritma ini dikatakan bahwa untuk
menghadapi deadlock ialah dengan berpura-pura bahwa tidak ada
masalah apapun. Hal ini seakan-akan melakukan suatu hal yang fatal, tetapi
sistem operasi Unix menanggulangideadlock dengan cara ini dengan
tidak mendeteksi deadlock dan membiarkannya secara otomatis
mematikan program sehingga seakan-akan tidak terjadi apapun. Jadi jika terjadideadlock,
maka tabel akan penuh, sehingga proses yang menjalankan proses melalui operator
harus menunggu pada waktu tertantu dan mencoba lagi.
Mendeteksi dan
Memperbaiki
Caranya ialah dengan
cara mendeteksi jika terjadi deadlock pada suatu proses maka
dideteksi sistem mana yang terlibat di dalamnya. Setelah diketahui sistem mana
saja yang terlibat maka diadakan proses untuk memperbaiki dan menjadikan sistem
berjalan kembali. Ada beberapa jalan untuk kembali dari deadlock:
-
Lewat Preemption
Dengan cara untuk sementara waktu menjauhkan sumber
daya dari pemakainya, dan memberikannya pada proses yang lain. Ide untuk
memberi pada proses lain tanpa diketahui oleh pemilik dari sumber daya tersebut
tergantung dari sifat sumber daya itu sendiri. Perbaikan dengan cara ini sangat
sulit atau bisa dikatakan tidak mungkin. Cara ini bisa dilakukan dengan memilih
korban yang akan dikorbankan atau diambil sumber dayanya utuk sementara, tentu
saja harus dengan perhitungan yang cukup agar waktu yang dikorbankan seminimal
mungkin.
-
Lewat melacak kembali
setelah kita lakukan beberapa langkah Preemption, maka
proses utama yang diambil sumber dayanya akan berhenti dan tidak dapat
melanjutkan kegiatannya, oleh karena itu dibutuhkan langkah untuk kembali pada
keadaan aman dimana proses masih berjalan dan memulai proses lagi dari situ.
Tetapi untuk beberapa keadaan sangat sulit menentukan kondisi aman tersebut,
oleh karena itu umumnya dilakukan cara mematikan program tersebut lalu memulai
kembali proses. Meskipun sebenarnya lebih efektif jika hanya mundur beberapa
langkah saja sampai deadlock tidak terjadi lagi. Untuk
beberapa sistem mencoba dengan cara mengadakan pengecekan beberapa kali secara
periodik dan menandai tempat terakhir kali menulis ke disk, sehingga saat
terjadi deadlock dapat mulai dari tempat terakhir penandaannya
berada.
-
Lewat membunuh proses
yang menyebabkan deadlock.
Cara yang paling umum ialah membunuh semua proses yang
mengalami deadlock. Cara ini paling umum dilakukan dan
dilakukan oleh hampir semua sistem operasi. Atau dipilih salah satu korban
untuk melepaskan sumber dayanya, dengan cara ini maka masalah pemilihan korban
menjadi lebih selektif, sebab telah diperhitungkan beberapa kemungkinan jika si
proses harus melepaskan sumber dayanya.
Kriteria seleksi korban ialah :
a. Yang paling jarang memakai prosesor
b. Yang paling sedikit hasil programnya
c. Yang paling banyak memakai sumber daya sampai saat ini
d. Yang alokasi sumber daya totalnya tersedkit
e. Yang memiliki prioritas terkecil
Kondisi Aman
Saat kondisi aman,
maka suatu sistem bisa mengalokasikan sumber daya pada setiap proses (sampai
pada batas maksimumnya) dengan urutan tertentu.
Jika sistem dalam
state aman maka tidak terjadi deadlock, sedangkan jika sistem
dalam state tidak
aman (unsafe state) maka kemungkinan terjadi deadlock seperti
Gambar 6-4. Metode
menghindari deadlock menjamin bahwa sistem tidak pernah
memasuki state tidak
aman.
SUMBER :
(pada hari Miggu, 29 April 2013 ---- 20.10 WIB
(pada hari Miggu, 29 April 2013 ---- 20.15 WIB
(pada hari Miggu, 29 April 2013 ---- 20.29 WIB