2. 23.1. Pendahuluan
Deadlock dalam arti sebenarnya adalah
kebuntuan. Kebuntuan yang dimaksud dalam
sistem operasi adalah kebuntuan proses. Jadi
Deadlock ialah suatu kondisi dimana proses tidak
berjalan lagi atau pun tidak ada komunikasi lagi
antar proses. Deadlock disebabkan karena proses
yang satu menunggu sumber daya yang sedang
dipegang oleh proses lain yang sedang menunggu
sumber daya yang dipegang oleh proses tersebut.
Dengan kata lain setiap proses dalam set
menunggu untuk sumber yang hanya dapat
dikerjakan oleh proses lain dalam set yang sedang
menunggu.
3. 23.2. Daur Ulang Sumber Daya
Sumber daya ini tidak habis dipakai oleh proses mana
pun.Tetapi setelah proses berakhir, sumber daya ini
dikembalikan untuk dipakai oleh proses lain yang sebelumnya
tidak kebagian sumber daya ini. Contohnya prosesor, kanal M/K,
disk, semafor. Contoh peran sumber daya jenis ini pada
terjadinya Deadlock ialah misalnya sebuah proses memakai disk
A dan B, maka akan terjadi Deadlock jika setiap proses sudah
memiliki salah satu disk dan meminta disk yang lain. Masalah ini
tidak hanya dirasakan oleh pemrogram tetapi oleh seorang yang
merancang sebuah sistem operasi. Cara yang digunakan pada
umumnya dengan cara memperhitungkan dahulu sumber daya
yang digunakan oleh proses-proses yang akan menggunakan
sumber daya tersebut. Contoh lain yang menyebabkan
Deadlock dari sumber yang dapat dipakai berulang-ulang ialah
berkaitan dengan jumlah proses yang memakai memori utama.
4. Contohnya dapat dilihat dari kode berikut ini:
Contoh 23.2. P-Q
//dari kelas proses kita tambahkan method yaitu meminta
public void meminta (int banyakA) {
//meminta dari sumber daya a
if ( banyakA < banyak )
banyak = banyak - banyakA;
else
wait();
}
//mengubah kode pada mainnya sebagai berikut
public static void main ( String [] args ) {
Proses P = new Proses();
Proses Q = new Proses();
P.meminta(80);
Q.meminta(70);
P.meminta(60);
Q.meminta(80);
}
private int banyak = 200;
private int banyakA;
5. Setelah proses P dan Q telah melakukan
fungsi meminta untuk pertama kali, maka
sumber daya yang tersedia dalam banyak
ialah 50 (200-70-80). Maka saat P
menjalankan fungsi meminta lagi sebanyak
60, maka P tidak akan menemukan sumber
daya dari banyak sebanyak 60, maka P akan
menunggu hingga sumber daya yang diminta
dipenuhi. Demikian juga dengan Q, akan
menunggu hingga permintaannya dipenuhi,
akhirnya terjadi Deadlock. Cara
mengatasinya dengan
menggunakan memori maya.
6. 23.3. Sumber Daya Sekali
Pakai
Dalam kondisi biasa tidak ada batasan
untuk memakai sumber daya apa pun,
selain itu dengan tidak terbatasnya
produksi akan membuat banyak sumber
daya yang tersedia. Tetapi dalam kondisi
ini juga dapat terjadi Deadlock. Contohnya:
7. Contoh 23.3. Deadlock
//menambahkan method receive dan send
public void receive( Proses p ){
//method untuk menerima sumber daya
}
public void send ( Proses p ){
//method untuk memberi sumber daya
}
Dari kedua fungsi tersebut ada yang bertindak untuk menerima dan memberi
sumber daya, tetapi
ada kalanya proses tidak mendapat sumber daya yang dibuat sehingga terjadi
blok, karena itu terjadi
Sumber Daya Sekali Pakai
201
Deadlock. Tentu saja hal ini sangat jarang terjadi mengingat tidak ada batasan
untuk memproduksi
dan mengkonsumsi, tetapi ada suatu keadaan seperti ini yang mengakibatkan
Deadlock. Hal ini
mengakibatkan Deadlock jenis ini sulit untuk dideteksi. Selain itu Deadlock ini
dihasilkan oleh
beberapa kombinasi yang sangat jarang terjadi
8. 23.4. Kondisi untuk Terjadinya
DeadlockMenurut Coffman(1971) ada empat kondisi yang dapat menyebabkan
terjadinya deadlock. Keempat kondisi tersebut tidak dapat berdiri sendiri,
saling mendukung.
1. Mutual Eksklusif. Hanya ada satu proses yang boleh memakai sumber daya,
dan proses lain yang ingin memakai sumber daya tersebut harus menunggu
hingga sumber daya tadi dilepaskan atau tidak ada proses yang memakai
sumber daya tersebut.
2. Memegang dan Menunggu. Proses yang sedang memakai sumber daya
boleh meminta sumber daya lagi maksudnya menunggu hingga benar-benar
sumber daya yang diminta tidak dipakai oleh proses lain, hal ini dapat
menyebabkan kelaparan sumber daya sebab dapat saja sebuah proses tidak
mendapat sumber daya dalam waktu yang lama.
3. Tidak ada Preemption. Sumber daya yang ada pada sebuah proses tidak
boleh diambil begitu saja oleh proses lainnya. Untuk mendapatkan sumber
daya tersebut, maka harus dilepaskan terlebih dahulu oleh proses yang
memegangnya, selain itu seluruh proses menunggu dan mempersilahkan
hanya proses yang memiliki sumber daya yang boleh berjalan.
4. Circular Wait. Kondisi seperti rantai, yaitu sebuah proses membutuhkan
sumber daya yang dipegang proses berikutnya.
9. 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 mendata
informasi tambahan tentang proses mana yang
akan meminta dan menggunakan sumber daya.
4. Pencegahan yang secara struktur bertentangan
dengan empat kondisi terjadinya Deadlock
dengan Deadlock prevention sistem untuk
memasti- kan bahwa salah satu kondisi yang
penting tidak dapat menunggu.
10. 23.5. Mengabaikan Masalah
Deadlock
Untuk memastikan sistem tidak memasuki deadlock, sistem
dapat menggunakan pencegahan deadlock atau penghindaran
deadlock. Penghindaran deadlock membutuhkan informasi tentang
sumber daya yang mana yang akan suatu proses meminta dan
berapa lama akan digunakan. Dengan informasi tersebut dapat
diputuskan apakah suatu proses harus menunggu atau tidak. Hal
ini disebabkan oleh keberadaan sumber daya, apakah ia sedang
digunakan oleh proses lain atau tidak. Metode ini lebih dikenal
dengan Algoritma Ostrich. Dalam algoritma ini dikatakan bahwa
untuk menghadapi Deadlock ialah dengan berpura-pura bahwa
tidak ada masalah apa pun. Hal ini seakan-akan melakukan suatu
hal yang fatal, tetapi sistem operasi Unix menanggulangi Deadlock
dengan cara ini dengan tidak mendeteksi Deadlock dan
membiarkannya secara otomatis mematikan program sehingga
seakan-akan tidak terjadi apa pun. Jadi jika terjadi Deadlock, maka
tabel akan penuh, sehingga proses yang menjalankan proses
melalui operator harus menunggu pada waktu tertantu dan
mencoba lagi.
11. 23.6. Mendeteksi dan
Memperbaiki
Hal-hal yang terjadi dalam mendeteksi
adanya Deadlock adalah:
1. Permintaan sumber daya dikabulkan
selama memungkinkan.
2. Sistem operasi memeriksa adakah kondisi
circular wait secara periodik.
3. Pemeriksaan adanya Deadlock dapat
dilakukan setiap ada sumber daya yang
hendak digunakan oleh sebuah proses.
4. Memeriksa dengan algoritma tertentu.
12. 23.7. Menghindari Deadlock
Pada sistem kebanyakan permintaan terhadap
sumber daya dilakukan sebanyak sekali saja. Sistem
sudah harus dapat mengenali bahwa sumber daya itu
aman atau tidak (tidak terkena Deadlock), setelah itu
baru dialokasikan. Ada dua cara yaitu:
1. Jangan memulai proses apa pun jika proses
tersebut akan membawa kita pada kondisi
Deadlock, sehingga tidak mungkin terjadi
Deadlock karena ketika akan menuju Deadlock
sudah dicegah.
2. Jangan memberi kesempatan pada suatu proses
untuk meminta sumber daya lagi jika penambahan
ini akan membawa kita pada suatu keadaan
Deadlock Menghindari Deadlock
13. 23.8. Pencegahan Deadlock
Jika pada awal bab ini 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.
1. Masalah Mutual Eksklusif Kondisi ini tidak dapat dilarang, jika aksesnya perlu bersifat
spesial untuk satu proses, maka hal ini harus di dukung oleh kemampuan sistem operasi.
Jadi diusahakanagar tidak mempergunakan kondisi spesial tersebut sehingga sedapat
mungkin Deadlock dapat dihindari.
2. Masalah Kondisi Menunggu dan Memegang 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 atau pun 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.
14. 3. Masalah tidak ada Preemption 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.