DEADLOCK
Sinkronisasi diperlukan untuk
menghindari terjadinya ketidak-konsistenan data akibat adanya akses data secara
konkuren. Proses-proses disebut konkuren jika proses-proses itu ada dan
berjalan pada waktu yang sama, proses-proses konkuren ini bisa bersifat
independen atau bisa juga saling berinteraksi. Proses-proses konkuren yang
saling berinteraksi memerlukan sinkronisasi agar terkendali dan juga
menghasilkan output yang benar
Deadlock atau pada beberapa buku
disebut Deadly Embrace 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.
1.
Peranan Deadlock
Menurut Coffman dalam bukunya
“Operating System” menyebutkan empat syarat bagi terjadinya deadlock,
yaitu:
- Mutual Exclusion
- Suatu kondisi dimana setiap sumber daya diberikan tepat pada satu proses pada suatu waktu.
- Hold and Wait
- Kondisi yang menyatakan proses-proses yang sedang memakai suatu sumber daya dapat meminta sumber daya yang lain.
- Non-pre-emptive
- Kondisi dimana suatu sumber daya yang sedang berada pada suatu proses tidak dapat diambil secara paksa dari proses tersebut,sampai proses itu melepaskannya.
- Circular Wait
- Kondisi yang menyatakan bahwa adanya rantai saling meminta sumber daya yang dimiliki oleh suatu proses oleh proses lainnya.
2.
Strategi menghadapi Deadlock
Strategi untuk menghadapi deadlock
dapat dibagi menjadi tiga pendekatan, yaitu:
- Mengabaikan adanya deadlock.
- Memastikan bahwa deadlock tidak akan pernah ada, baik dengan metode Pencegahan, dengan mencegah empat kondisi deadlock agar tidak akan pernah terjadi. Metode Menghindari deadlock, yaitu mengizinkan empat kondisi deadlock, tetapi menghentikan setiap proses yang kemungkinan mencapai deadlock.
- Membiarkan deadlock untuk terjadi, pendekatan ini membutuhkan dua metode yang saling mendukung, yaitu:
- Pendeteksian deadlock, untuk mengidentifikasi ketika deadlock terjadi.
- Pemulihan deadlock, mengembalikan kembali sumber daya yang dibutuhkan pada proses yang memintanya.
v
Strategi Ostrich
Pendekatan yang paling sederhana
adalah dengan menggunakan strategi burung unta: masukkan kepala dalam pasir dan
seolah-olah tidak pernah ada masalah sama sekali. Beragam pendapat muncul
berkaitan dengan strategi ini. Menurut para ahli Matematika, cara ini sama
sekali tidak dapat diterima dan semua keadaan deadlock harus ditangani.
Sementara menurut para ahli Teknik, jika komputer lebih sering mengalami
kerusakkan disebabkan oleh kegagalan hardware, error pada
kompilator atau bugs pada sistem operasi. Maka ongkos yang dibayar untuk
melakukan penanganan deadlock sangatlah besar dan lebih baik mengabaikan
keadaan deadlock tersebut. Metode ini diterapkan pada sistem operasi
UNIX dan MINIX.
3.
Mencegah Deadlock
Metode ini merupakan metode yang
paling sering digunakan. Metode Pencegahan dianggap sebagai solusi yang bersih
dipandang dari sudut tercegahnya deadlock. Tetapi pencgahan akan
mengakibatkan kinerja utilisasi sumber daya yang buruk.
Metode pencegahan menggunakan
pendekatan dengan cara meniadakan empat syarat yang dapat menyebabkan deadlock
terjadi pada saat eksekusi Coffman (1971).
Syarat pertama yang akan dapat
ditiadakan adalah Mutual Exclusion, jika tidak ada sumber daya yang
secara khusus diperuntukkan bagi suatu proses maka tidak akan pernah terjadi deadlock.
Namun jika membiarkan ada dua atau lebih proses mengakses sebuah sumber daya
yang sama akan menyebabkan chaos. Langkah yang digunakan adalah dengan spooling
sumber daya, yaitu dengan mengantrikan job-job pada antrian dan akan
dilayani satu-satu.
Beberapa masalah yang mungkin
terjadi adalah:
- Tidak semua dapat di-spool, tabel proses sendiri tidak mungkin untuk di-spool
- Kompetisi pada ruang disk untuk spooling sendiri dapat mengarah pada deadlock
Hal inilah yang menyebabkan mengapa
syarat pertama tidak dapat ditiadakan, jadi mutual exclusion benar-benar
tidak dapat dihilangkan.
Cara kedua dengan meniadakan kondisi
hold and wait terlihat lebih menjanjikan. Jika suatu proses yang sedang
menggunakan sumber daya dapat dicegah agar tidak dapat menunggu sumber daya
yang lain, maka deadlock dapat dicegah. Langkah yang digunakan adalah
dengan membuat proses agar meminta sumber daya yang mereka butuhkan pada awal
proses sehingga dapat dialokasikan sumber daya yang dibutuhkan. Namun jika
terdapat sumber daya yang sedang terpakai maka proses tersebut tidak dapat
memulai prosesnya.
Masalah yang mungkin terjadi:
- Sulitnya mengetahui berapa sumber daya yang dibutuhkan pada awal proses
- Tidak optimalnya pengunaan sumber daya jika ada sumber daya yang digunakan hanya beberapa waktu dan tidak digunakan tapi tetap dimiliki oleh suatu proses yang telah memintanya dari awal.
Meniadakan syarat ketiga non
preemptive ternyata tidak lebih menjanjikan dari meniadakan syarat kedua,
karena dengan meniadakan syarat ketiga maka suatu proses dapat dihentikan
ditengah jalan. Hal ini tidak dimungkinkan karena hasil dari suatu proses yang
dihentikan menjadi tidak baik.
Cara terakhir adalah dengan
meniadakan syarat keempat circular wait. Terdapat dua pendekatan, yaitu:
- Mengatur agar setiap proses hanya dapat menggunakan sebuah sumber daya pada suatu waktu, jika menginginkan sumber daya lain maka sumber daya yang dimiliki harus dilepas.
- Membuat penomoran pada proses-proses yang mengakses sumber daya. Suatu proses dimungkinkan untuk dapat meminta sumber daya kapan pun, tetapi permintaannya harus dibuat terurut.
Masalah yang mungkin terjadi dengan
mengatur bahwa setiap proses hanya dapat memiliki satu proses adalah bahwa
tidak semua proses hanya membutuhkan satu sumber daya, untuk suatu proses yang
kompleks dibutuhkan banyak sumber daya pada saat yang bersamaan. Sedangkan
dengan penomoran masalah yang dihadapi adalah tidak terdapatnya suatu penomoran
yang dapat memuaskan semua pihak.
Secara ringkas pendekatan yang
digunakan pada metode pencegahan deadlock dan masalah-masalah yang
menghambatnya, terangkum dalam tabel dibawah ini.
Tabel Deadlock
|
Syarat
|
Langkah
|
Kelemahan
|
|
Mutual Exclusion
|
Spooling sumber daya
|
Dapat menyebabkan chaos
|
|
Hold and Wait
|
Meminta sumber daya di awal
|
Sulit memperkirakan di awal dan
tidak optimal
|
|
No Pre-emptive
|
Mengambil sumber daya di tengah
proses
|
Hasil proses tidak akan baik
|
|
Circular Wait
|
Penomoran permintaan sumber daya
|
Tidak ada penomoran yang memuaskan
semua pihak
|
4.
Menghindari Deadlock
Pendekatan metode ini adalah dengan
hanya memberi kesempatan ke permintaan sumber daya yang tidak mungkin akan
menyebabkan deadlock. Metode ini memeriksa dampak pemberian akses pada
suatu proses, jika pemberian akses tidak mungkin menuju kepada deadlock,
maka sumber daya akan diberikan pada proses yang meminta. Jika tidak aman,
proses yang meminta akan di-suspend sampai suatu waktu permintaannya
aman untuk diberikan. Kondisi ini terjadi ketika setelah sumber daya yang
sebelumnya dipegang oleh proses lain telah dilepaskan.
Kondisi aman yang dimaksudkan
selanjutnya disebut sebagai safe-state, sedangkan keadaan yang tidak
memungkinkan untuk diberikan sumber daya yang diminta disebut unsafe-state.
- Kondisi Aman (Safe state)
Suatu keadaan dapat dinyatakan
sebagai safe state jika tidak terjadi deadlock dan terdapat cara
untuk memenuhi semua permintaan sumber daya yang ditunda tanpa menghasilkan deadlock.
Dengan cara mengikuti urutan tertentu.
- Kondisi Tak Aman (Unsafe state)
Suatu state dinyatakan
sebagai state tak selamat (unsafe state) jika tidak terdapat cara
untuk memenuhi semua permintaaan yang saat ini ditunda dengan menjalankan
proses-proses dengan suatu urutan.
5.
Mendeteksi Deadlock dan
Memulihkan Deadlock
Metode ini mengunakan pendekatan
dengan teknik untuk menentukan apakah deadlock sedang terjadi serta
proses-proses dan sumber daya yang terlibat dalam deadlock tersebut. Setelah
kondisi deadlock dapat dideteksi, maka langkah pemulihan dari kondisi deadlock
dapat segera dilakukan. Langkah pemulihan tersebut adalah dengan memperoleh
sumber daya yang diperlukan oleh proses-proses yang membutuhkannya. Beberapa
cara digunakan untuk mendapatkan sumber daya yang diperlukan, yaitu dengan
terminasi proses dan pre-emption (mundur) suatu proses. Metode ini
banyak digunakan pada komputer mainframe berukuran besar.
Kesimpulan
Untuk mengatasi problem critical
section dapat digunakan berbagai solusi software. Namun masalah yang akan
timbul dengan solusi software adalah solusi software tidak mampu menangani
masalah yang lebih berat dari critical section. Tetapi Semaphores mampu
menanganinya, terlebih jika hardware yang digunakan mendukung maka akan
memudahkan dalam menghadapi problem sinkronisasi. Berbagai contoh klasik
problem sinkronisasi berguna untuk mengecek setiap skema baru sinkronisasi.
Monitor termasuk ke dalam level tertinggi mekanisme sinkronisasi yang berguna
untuk mengkoordinir aktivitas dari banyak thread ketika mengakses data melalui
pernyataan yang telah disinkronisasi. Kondisi deadlock akan dapat
terjadi jika terdapat dua atau lebih proses yang akan mengakses sumber daya
yang sedang dipakai oleh proses yang lainnya. Pendekatan untuk mengatasi deadlock
dipakai tiga buah pendekatan, yaitu:
- Memastikan bahwa tidak pernah dicapai kondisi deadlock
- Membiarkan deadlock untuk terjadi dan memulihkannya
- Mengabaikan apa pun deadlock yang terjadi
- Dari ketiga pendekatan diatas, dapat diturunkan menjadi empat buah metode untuk mengatasi deadlock, yaitu:
- Pencegahan deadlock
- Menghindari deadlock
- Mendeteksi deadlock
- Pemulihan deadlock
Namun pada sebagian besar Sistem
Operasi dewasa ini mereka lebih condong menggunakan pendekatan untuk
mengabaikan semua deadlock yang terjadi. Silberschatz (1994) merumuskan
sebuah strategi penanggulangan deadlock terpadu yang dapat disesuaikan dengan
kondisi dan situasi yang berbeda, strateginya sendiri berbunyi:
- Kelompokkan sumber daya kedalam kelas yang berbeda
- Gunakan strategi pengurutan linear untuk mencegah kondisi circular waityang nantinya.
- Gunakan algoritma yang paling cocok untuk suatu kelas sumber daya yang berbeda satu dengan yang lain.
Tidak ada komentar:
Posting Komentar