Anda di halaman 1dari 8

Deadlock

Submitted by dewabayu on Sat, 10/23/2010 - 12:40

Beberapa proses yang membutuhkan resource yang sama tidak dapat diproses secara
bersamaan. Jika suatu resource sedang digunakan oleh suatu proses, kemudian ada
proses lainnya yang membutuhkan resource tersebut maka proses baru tersebut akan
berada pada kondisi waiting.

Proses ketika ingin menggunakan resource maka dia akan melakukan request terhadap
resource tersebut terlebih dahulu. Ketika resource telah tersedia baru proses dapat
menggunakan resource tersebut. Setelah proses selesai dikerjakan proses akan
melepas kembali reource yang digunakan. Sehingga ada tiga hal yang dilakukan proses
terhadap resource, yaitu : request, use dan release.

Kondisi deadlock terjadi ketika suatu proses melakukan request terhadap suatu
resource, namun resource tersebut telah ditahan oleh proses lainnya yang sama-sama
berada pada waitung state. Sehingga kedua proses tersebut akan tetap berada pada
keadaan waiting.

Request dan relase suatu resoure dilakukan dengan System Calls.

Jika resource sedang digunakan maka request resource oleh proses tersebut akan
dimasukkan ke antrian. Suatu proses tidak hanya menggunakan sebuah resource,
namun bisa saja beberapa resource.

Contoh kasus deadlock :

1.  Sistem komputer memiliki tiga buah CD ROM drive, ada tiga proses yang
menggunakan masing-masing CD ROM drive tersebut. Kemudian, setiap proses
ingin mengakses CD ROM drive yang berbeda. Maka pada kasus ini akan terjadi
deadlock karena CD ROM drive masih ditahan oleh proses lainnya yang sama-
sama meminta CD ROM drive lainnya.
2.   Proses Pi mengerjakan CD ROM drive, proses Pj mengerjakan printer.
Kemudian Pi dan Pj ingin menggunakan printer dan CD ROM drive. Maka akan
terjadi deadlock juga.

Kondisi penyebab terjadinya deadlock :

1. Mutual Exclusion : hanya ada 1 proses yang dapat menggunakan resource


dalam waktu yang bersamaan.
2. Hodl and Wait : suatu proses menahan suatu resource dan menunggu untuk
mendapatkan tambahan resource yang sedang digunakan oleh proses lainnya.
3. No preemption : penggunaan resource tidak dapat disela ketika digunakan.
Resource hanya dapat dilepas ketika proses yang menggunakannya telah
selesai dikerjakan.
4. Circular Wait : misalnya {P0, P1, …, Pn } adalah proses yang berada pada kondisi
waiting. P0 menunggu resource yang ditahan oleh P1, P1 menunggu resource
yang digunakan oleh P2, … , Pn-1 menunggu resource yang sedang digunakan P n
dan demikan juga Pn menunggu resource yang sedang ditahan oleh P 1.

Deadlock hanya akan terjadi jika keempat kondisi diatas terjadi. Namun, jelas kondisi di
atas tidak saling berdiri sendiri. Jika Circular Wait maka kondisi hold and wait juga akan
terjadi. Dari penjelasan tersebut dapat ditarik kesimpulan, kita bisa menghindari
terjadinya deadlock dengan menjaba paling tidak satu kondisi di atas tidak terjadi.

Ada beberapa algoritma yang digunakan untuk menghindari terjadinya deadlock seperti
yang akan dibahas berikutnya.

Safe State

Suatu state dikatakan aman (safe) ketika sistem dapat mengalokasi resource untuk
setiap proses dengan urutan tertentu dan tetap tidak terjadi deadlock. State dikatakan
aman jika kasus Pi membutuhkan resource yang sedang dikerjakan P j. Pi dapat
menunggu dan ketika Pj telah selesai dikerjakan, maka resourcenya akan digunakan
oleh Pi, dan ketika Pi telah selesai maka akan dilanjutkan oleh Pi+1. Urutan penggunaan
ini dikatakan safe. Jika tidak ada urutan yang jelas maka akan berpotensi menimbulkan
unsafe state.

Safe state bukan deadlock.

Deadlock state adalah unsafe state.

Tidak semua unsafe state adalah deadlock state.

Contoh kasus

Panjang pita tape adalah 12, dibagi untuk mengerjakan 3 proses {P 0, P1, P2}. P0
membutuhkan 10, P1 membutuhkan 4, dan P0 membutuhkan 9. Pada saat t0, Pita tape
yang sudah digunakan oleh masing-masing proses P 0, P1, P2 adalah 5, 2, 2.

  Maximum needed Current needed


P0 10 5
P1 4 2
P2 9 2

Safe state akan terjadi apabila urutan prosesnya adalah <P 1, P0, P2>. Ingat sisa tape
saat ini adalah 3. P1 hanya membutuhkan 2 lagi, dan dapat menyelesaikan prosesnya.
Setelah P1 selesai maka pita tape akan dikembalikan sehingga sisa tape adalah 5.
Prses selanjutnya adalah P0 yang membutuhkan 5. Ketika selesai maka tape akan
dilepas, sehingga sisany akan menjadi 10. Yang terakhir adalah P 2. Akhirnya semua
proses dapat dikerjakan.

Kondisi unsafe terjadi ketika urutannya adalah < P 2, P0, P1>, yang pada saat itu hanya
sisa 3 diambil seluruhnya oleh P2. Namun, tape tersebut belum dapat menyelesaikan
proses P2. Dilanjutkan dengan P0, namun karena tape tidak tersisa maka dilanjutkan ke
proses selanjutnya. Terjadi deadlock pada kasus ini.

Deadlock dapat dihindari jika sistem menguji apakah proses yang merequest resource
dapat mengalokasikan resource atau harus menunggu.

Resource Allocation Graph

Misalnya ada 2 proses dan 2 resource,

R1 sedang digunakan oleh P1, namun P2 melakukan request ke R1 dan harus


menunggu sampai P1 melepas R1. P1 kemudian merequest R2. Algorima ini kemudian
mencegah P2 jika ingin merequest R2 pada sat yang sama. Karena, jika hal ini diijinkan
maka akan terbentuk cycle yang deadlock. Pengujian cycle atau tidak menggunakan
algoritma deteksi cycle.

Resource allocation graph di atas hanya untuk resource yang terdiri dari 1 instance.

Banker’s Algorithm

Ketika proses baru nasuk ke sistem, proses harus mendeklarasikan jumlah instance
dari setiap resource yang akan digunakan. Jumlahnya tidak melebihi total resource di
sistem. Ketika user merequest sekumpulan resource, sitem akan menentukan apakah
alokasi yang diberikan dalam keadaan safe atau tidak. Jika safe, maka resource akan di
alokasikan, namun terkadang harus menunggu proses lain diselesaikan sampai
resource yang diinginkan tercukupi.

Berikut adalah struktur data yng digunakan untuk mengalokasikan resource, dimana n
adalah jumlah proses dan m adalah jumlah resource :

  Available : sebuah vektor dengan panjang m mengindikasikan jumlah resource


yang tersedia. Jika Available[j]=k maka ada k instaces dari resource tipe Rj yang
tersedia.
 Max : sebuah matriks nxm mendefinisikan permintaan maksimal dari setiap
proses. Jika Max[i][j]=k, maka proses Pi merequest paling banyak k instances
dari resource tipe Rj.
  Allocation : sebuah matriks nxm mendefinisikan jumlah resource dari setiap tipe
yang dialokasikan ke setiap proses. Jika Allocation[i][j]=k, maka proses Pi
sedang mengalokasikan k instances dari resources tipe Rj.
 Need sebuah matriks nxm mengindikasikan resource yang masih dibutuhkan
oleh setiap proses. Jika Need[i][j]=k, maka proses Pi membutuhkan k lagi
instance resource dengan tipe Rj untuk menyelesaikan tugasnya. Need[i][j] =
Max[i][j] – Allocation[i][j].

Ilustrasi Contoh :

Ada lima proses { P0, P1, P2, P3, P4} dan tiga resource {A,B,C}. Resource A,B, dan C
masing-masing terdiri dari 10, 5, dan 7 instaces.

Pada saat t0, sistem mengalokasikan :

Alokasi adalah jumlah instance yang telah dialokasikan oleh sistem untuk masing-
masing proses. Max adalah instance yang dibutuhkan untuk menyelesaikan task dari
masing-masing proses. Availabe adalah instace yang tersisa dari masing-masing
resource. Nilai ini didapatkan dari total resource yang ada dikurangi total allocation
pada masing-masing tipe resource. Kita dapat menghitung instace yang masih
dibutuhkan oleh setiap proses (Need) dengan melakukan operasi pengurangan antara
Max dan allocation.

Proses berikutnya yang akan dikerjakan disesuaikan dengan jumlah instace yang
available. Dari data need terlihat bahwa P 1 akan dikerjakan terlebih dahulu, karena P 0
melebihi batas Available. Ketika P1 telah menyelesaikan task nya maka instance yang
telah dialokasikan akan dilepas semuanya sehingga akan menambah nilai available.

 
Ketika mengerjakan P1, resource available (3 3 2), P1 membutuhkan (1 2 2) maka
instance available pada saat P1 diproses adalah (3 3 2) – (1 2 2)= (2 1 0). Setelah P 1
selesai dikerjakan maka P1 akan melepas semua instance yang digunakan, sehingga
instance available ketika P1 selesai diproses adalah (2 1 0) + (3 2 2) = (5 3 2). Atau
dapat dihitung dengan available terakhir ditambah dengan yang sudah dialokasikan
untuk P1 yaitu (3 3 2) + (2 0 0) = (5 3 2). Hal ini dilakukan juga pada penyelesaian
proses yang lainnya.

Deteksi Deadlock

Ada dua kasus pada deteksi deadlock, yaitu kasus dimana 1 resource hanya terdiri dari
1 instance dan kasus 1 resource terdiri dari beberapa instances.

Kasus 1 : 1 resource = 1 instance

Kasus ini dapat menggunakan graph wait-for. Menjelaskan gambar proses P i yang
menunggu proses lainnya yang sedang menggunakan resource. Contohnya :

Gambar tersebut memperlihatkan P2 menunggu P3, P4, dan P5 untuk menggunakan


resource., demikian juga P1 yang menunggu P2, dan sebagainya.
Kasus 2 : 1 resource beberapa instance

Menggunakan beberapa struktur data yang sama pada algoritma Banker, yaitu :

  Available
 Allocation
  Request : adalah matriks n x m yang mengundikasi request yang ada dari setiap
proses. Jika Request[i][j]=k, maka proses Pi merequest k instance dari resource
tipe Rj.

Ilustrasi Contoh :

Ada lima proses { P0, P1, P2, P3, P4} dan tiga resource {A,B,C}. Resource A,B, dan C
masing-masing terdiri dari 7, 2, dan 6 instaces. Alokasi instance pada saat t 0 adalah  :

Pengerjaan proses tersebut akan tidak deadlock apabila urutan prosesnya adalah < P 0,
P2, P3, P1, P4>. Dapat terlihat bahwa proses yang dikerjakan terlebih dahulu adalah yang
memiliki nilai request yang paling kecil dan tersedua di available. Ketika request P 2
dirubah menjadi (0 0 1) maka akan terjadi kondisi deadlock untuk  P1, P2, P3, P4.

Perbaikan deadlock dilakukan dengan 2 cara, yaitu :

1.  Proses Terminasi

Ada dua metode proses terminasi, yaitu :

 Gagalkan semua proses deadlock


 Membatalkan suatu proses sampai deadlock cycle dapat dihilangkan.

Ada beberapa pertimbangan yang harus dipikirkan untuk memilih proses yang akan
dihentikan. Tentu saja pertimbangan ini agar proses yang dihentikan cost nya minimum.
Pertimbangan tersebut adalah :
a. Apa prioritas dari proses?
b. Berapa lama proses dikerjakan dan berapa lama lagi harus dikerjakan sampai
selesai?
c. Berapa banyak dan resource apa yang digunakan?
d. Berapa banyak resource tambahan yang dibutuhkan?
e. Berapa banyak proses yang akan dibutuhkan untuk diterminate?
f. Apakah proses interaktif atau batch?

2. Resource Preemtion

Menjadikan resource menjadi preemtive, sehingga tidak dimonopoli oleh suatu proses
tertentu.

Menjadikan resource preemtive memiliki beberapa permasalahan, antara lain :

 Resource dan proses ma yang akan dijadikan premtive?


 Rollback : jika ada 1 resource dari proses yang dijadikan preempt, tentu proses
tersebut akan bekerja tidak norman karena kehilangan resource yang
dibutuhkan. Kita harus mampu mengembalikan proses tersebut ke keadaan safe
dan restart dari state tersebut.
 Starvation : Bagaimana kita menjamin tidak terjadi starvation? Bagaimana kita
menjamin resources tidak akan dipreemt oleh satu proses yang sama terus.

Selain deadlock ada masalah yang hampir sama tentang penangan proses atau thread
yang disebut dengan livelock. Keduanya sama-sama tidak dapat menjalankan
beberapa proses atau thread karena suatu alasan tertentu. Alasan inilah yang
membedakan deadlock dengan livelock. Deadlock terjadi ketika setiap proses atau
thread di block menunggu untuk suatu event yang disebabkan karena proses atau
thread lain sedang memblock resource yang dibutuhkan tersebut. Namun livelock
terjadi ketika sebuah proses atau thread mencoba secara terus menerus namun gagal.
Contoh terjadinya livelock biasanya terjadi pada algoritma yang berdasarkan pada
prioritas. Misalnya algoritma Producer-Consumer, dimana producer akan memiliki
prioritas yang paling tinggi dan nilai buffer full. Consumer mendapatkan prioritas yang
lebih rendah. Karena nilai prioritas producer paling tinggi, maka producer akan
dikerjakan terlebih dahulu dari pada consumer. Namun, karena nilai buffer penuh maka
producer tidak akan menghasilkan apa dan terus menunggu sampai nilai buffer
berkurang. Nilai buffer akan berkurang hanya ketika consumer dijalankan, namun
consumer tidak akan pernah dijalankan karena mendapat prioritas yang rendah dan
produser masih dalam state running.