Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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.
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.
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.
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.
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 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 :
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.
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 ini dapat menggunakan graph wait-for. Menjelaskan gambar proses P i yang
menunggu proses lainnya yang sedang menggunakan resource. Contohnya :
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.
1. Proses Terminasi
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.
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.