Deadlock adalah keadaan dimana dua program memegang kontrol terhadap sumber daya
yang dibutuhkan oleh program yang lain. Tidak ada yang dapat melanjutkan proses
masing-masing sampai program yang lain memberikan sumber dayanya, tetapi tidak
ada yang mengalah. Deadlock yang mungkin dapat terjadi pada suatu proses
disebabkan proses itu menunggu suatu kejadian tertentu yang tidak akan pernah
terjadi. Dua atau lebih proses dikatakan berada dalam kondisi deadlock, bila
setiap proses yang ada menunggu suatu kejadian yang hanya dapat dilakukan oleh
proses lain dalam himpunan tersebut.
Karakteristik Deadlock
Karakteristik-karakteristik ini harus dipenuhi
keempatnya untuk terjadi deadlock. Namun, perlu diperhatikan bahwa hubungan
kausatif antara empat karakteristik ini dengan terjadinya deadlock adalah
implikasi. Deadlock mungkin terjadi apabila keempat karakteristik terpenuhi.
Empat kondisi tersebut adalah:
1.Mutual Exclusion . Kondisi yang pertama adalah
mutual exclusion yaitu proses memiliki hak milik pribadi terhadap sumber daya
yang sedang digunakannya. Jadi, hanya ada satu proses yang menggunakan suatu
sumber daya. Proses lain yang juga ingin menggunakannya harus menunggu hingga
sumber daya tersebut dilepaskan oleh proses yang telah selesai menggunakannya.
Suatu proses hanya dapat menggunakan secara langsung sumber daya yang tersedia
secara bebas.
2.Hold and Wait . Kondisi yang kedua adalah hold
and wait yaitu beberapa proses saling menunggu sambil menahan sumber daya yang
dimilikinya. Suatu proses yang memiliki minimal satu buah sumber daya melakukan
request lagi terhadap sumber daya. Akan tetapi, sumber daya yang dimintanya
sedang dimiliki oleh proses yang lain. Pada saat yang sama, kemungkinan adanya
proses lain yang juga mengalami hal serupa dengan proses pertama cukup besar
terjadi. Akibatnya, proses-proses tersebut hanya bisa saling menunggu sampai
sumber daya yang dimintanya dilepaskan. Sambil menunggu, sumber daya yang telah
dimilikinya pun tidak akan dilepas. Semua proses itu pada akhirnya saling
menunggu dan menahan sumber daya miliknya.
3.No Preemption . Kondisi yang selanjutnya adalah
no preemption yaitu sebuah sumber daya hanya dapat dilepaskan oleh proses yang
memilikinya secara sukarela setelah ia selesai menggunakannya. Proses yang
menginginkan sumber daya tersebut harus menunggu sampai sumber daya tersedia,
tanpa bisa merebutnya dari proses yang memilikinya.
4.Circular Wait . Kondisi yang terakhir adalah
circular wait yaitu kondisi membentuk siklus yang berisi proses-proses yang
saling membutuhkan. Proses pertama membutuhkan sumber daya yang dimiliki proses
kedua, proses kedua membutuhkan sumber daya milik proses ketiga, dan seterusnya
sampai proses ke n-1 yang membutuhkan sumber daya milik proses ke n. Terakhir,
proses ke n membutuhkan sumber daya milik proses yang pertama. Yang terjadi
adalah proses-proses tersebut akan selamanya menunggu.
Penanganan Deadlock
4 cara untuk menangani keadaan deadlock, yaitu:
1.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 restart terhadap komputer.
2.Pencegahan. Penanganan ini dengan cara mencegah
terjadinya salah satu karakteristik deadlock. Penanganan ini dilaksanakan pada
saat deadlock belum terjadi pada sistem. Intinya memastikan agar sistem tidak
akan pernah berada pada kondisi deadlock. Akan dibahas secara lebih mendalam
pada bagian selanjutnya.
3.Penghindaran. Menghindari keadaan deadlock.
Bagian yang perlu diperhatikan oleh pembaca adalah bahwa antara pencegahan dan
penghindaran adalah dua hal yang berbeda. Pencegahan lebih kepada mencegah
salah satu dari empat karakteristik deadlock terjadi, sehingga deadlock pun tidak
terjadi. Sedangkan penghindaran adalah memprediksi apakah tindakan yang diambil
sistem, dalam kaitannya dengan permintaan proses akan sumber daya, dapat
mengakibatkan terjadi deadlock. Akan dibahas secara lebih mendalam pada bagian
selanjutnya.
4.Pendeteksian dan Pemulihan. 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
Pencegahan deadlock dapat dilakukan dengan cara
mencegah salah satu dari empat karakteristik terjadinya deadlock. Berikut ini
akan dibahas satu per satu cara pencegahan terhadap empat karakteristik
tersebut.
1.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.
2.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.
3.No Preemption . Pencegahan kondisi ini dengan
cara membolehkan terjadinya preemption. Maksudnya bila ada proses yang sedang
memiliki sumber daya dan ingin mendapatkan sumber daya tambahan, namun tidak
bisa langsung dialokasikan, maka akan preempted. Sumber daya yang dimiliki
proses tadi akan diberikan pada proses lain yang membutuhkan dan sedang
menunggu. Proses akan mengulang kembali eksekusinya setelah mendapatkan semua
sumber daya yang dibutuhkannya, termasuk sumber daya yang dimintanya terakhir.
4.Circular Wait . 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 Deadlock
Penghindaran terhadap deadlock adalah cara
penanganan yang selanjutnya. Inti dari penghindaran adalah jangan sembarangan
membolehkan proses untuk memulai atau meminta lagi. Maksudnya jangan pernah
memulai suatu proses apabila nantinya akan menuju ke keadaan deadlock. Kedua,
jangan memberikan kesempatan pada proses untuk meminta sumber daya tambahan
jika penambahan tersebut akan membawa sistem pada keadaan deadlock. Tidak
mungkin akan terjadi deadlock apabila sebelum terjadi sudah kita hindari.
Langkah lain untuk menghindari adalah dengan cara
tiap proses memberitahu jumlah kebutuhan maksimum untuk setiap tipe sumber daya
yang ada. Selanjutnya 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 untuk multiple instances resources. Dalam banker's
algorithm, terdapat beberapa struktur data yang digunakan, yaitu:
Available . Jumlah sumber daya yang tersedia. Max
. Jumlah sumber daya maksimum yang diminta oleh tiap proses.
Allocation . Jumlah sumber daya yang sedang
dimiliki oleh tiap proses.
Need . Sisa sumber daya yang masih dibutuhkan oleh
proses, didapat dari max- allocation. Kemudian terdapat safety algorithm untuk
menentukan apakah sistem berada pada safe state atau tidak.
Pendeteksian Deadlock
Pada dasarnya kejadian deadlock sangatlah jarang
terjadi. Apabila kondisi tersebut terjadi, masing-masing sistem operasi
mempunyai mekanisme penanganan yang berbeda. Ada sistem operasi yang ketika
terdapat kondisi deadlock dapat langsung mendeteksinya. Namun, ada pula sistem
operasi yang bahkan tidak menyadari kalau dirinya sedang mengalami deadlock.
Untuk sistem operasi yang dapat mendeteksi deadlock, digunakan algoritma
pendeteksi. Secara lebih mendalam, pendeteksian kondisi deadlock adalah cara
penanganan deadlock yang dilaksanakan apabila sistem telah berada pada kondisi
deadlock. Sistem akan mendeteksi proses mana saja yang terlibat dalam kondisi
deadlock. Setelah diketahui proses mana saja yang mengalami kondisi deadlock,
maka diadakan mekanisme untuk memulihkan sistem dan menjadikan sistem berjalan
kembali dengan normal.
Mekanisme pendeteksian adalah dengan menggunakan detection algorithm yang akan
memberitahu sistem mengenai proses mana saja yang terkena deadlock. Setelah
diketahui proses mana saja yang terlibat dalam deadlock, selanjutnya adalah
dengan menjalankan mekanisme pemulihan sistem yang akan dibahas pada bagian
selanjutnya. Berikut ini adalah algoritma pendeteksian deadlock.
Pemulihan Deadlock
Pemulihan kondisi sistem terkait dengan pendeteksian
terhadap deadlock. Apabila menurut algoritma pendeteksian deadlock sistem
berada pada keadaan deadlock, maka harus segera dilakukan mekanisme pemulihan
sistem. Berbahaya apabila sistem tidak segera dipulihkan dari deadlock, karena
sistem dapat mengalami penurunan performance dan akhirnya terhenti.
Cara-cara yang ditempuh untuk memulihkan sistem
dari deadlock adalah sebagai berikut:
1.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.
2.Rollback and Restart . Dalam memulihkan keadaan
sistem yang deadlock, dapat dilakukan dengan cara sistem melakukan preempt
terhadap sebuah proses dan kembali ke state yang aman. Pada keadaan safe state
tersebut, proses masih berjalan dengan normal, sehingga sistem dapat memulai
proses dari posisi aman tersebut. Untuk menentukan pada saat apa proses akan
rollback, tentunya ada faktor yang menentukan. Diusahakan untuk meminimalisasi
kerugian yang timbul akibat memilih suatu proses menjadi korban. Harus pula
dihindari keadaan dimana proses yang sama selalu menjadi korban, sehingga
proses tersebut tidak akan pernah sukses menjalankan eksekusi.