Deadlock

Menangani Deadlock

1)    Memakai protokol untuk menghindari atau mengabaikan deadlock, sehingga dipastikan tidak akan memasuki keadaan deadlock.

2)    Deadlock avoidance => memerintahkan pada sistem operasi untuk memberi informasi tentang operasi mana yang bisa dan perlu dilaksanakan (keadaan aman). selain itu bisa juga menggunakan algoritma banker.

3)    Deadlock prevention => memastikan bahwa keadaan yang penting tidak bisa menunggu, membiarkan sistem memasuki waktu deadlock, mendeteksinya, dan memperbaikinya.

4)    Mengabaikan adanya deadlock dan menganggap keadaan deadlock tidak pernah terjadi ( algoritma ostrich ).

5)    Secara sederhana algoritma ini dapat dikatakan abaikan deadlock seakan-akan tidak ada masalah apapun dengannya.

6)    Algoritma ini disadur oleh sistem operasi unix, meskipun memerlukan biaya yang cukup besar untuk mengatasi sebuah deadlock.

Save State

Saat sistem meminta izin untuk mengambil sumber dayanya, sistem operasi harus memastikan bahwa ia dalam kondisi aman. Sistem dalam kondisi aman jika seluruh sistem dapat berjalan tanpa terancam kekurangan sumber daya atau deadlock.

Algoritma Banking

Setiap proses yang masuk harus memberitahu berapa banyak sumber daya maksimum yang dibutuhkan. Setelah itu sistem mendeteksi apakah sumber daya yang dibutuhkan memang bisa dijalankan dalam kondisi aman.

#.  jika ya, maka sistem akan melepaskan sumber dayanya

untuk digunakan

#.  jika tidak, maka proses harus menunggu hingga sumber

dayanya cukup

Keluar dari Deadlock

  • mematikan program
  • matikan semua proses yang berjalan, hanya matikan proses yang berjalan dalam siklus deadlock urutan terminasinya :

ü  prioritas rendah

ü  seberapa jauh dan berapa banyak bahan yang proses sudah atau akan dibutuhkan atau dilakukan

ü  data sumber daya yang dibutuhkan sebelumnya

ü  pilih korban proses dengan sumber daya terkecil

ü  kembali ke keadaan aman, jika deadlock sudah terdeteksi

  • resiko yang harus dihadapi ialah proses dengan sumber daya terkecil akan mengalami kelaparan atau tidak pernah dieksekusi.

Penyelesaian Dining Philosophers Problem

Salah satu teknik yang dapat digunakan untuk menangani dining philosophers problem adalah dengan menggunakan teknik semaphore.

  • solusi yang mungkin langsung terlihat  adalah dengan menggunakan semafor.
  • Setiap sumpit mewakili sebuah semafor.
  • Jika filsuf ingin mengambil sumpit, ia  jalankan perintah wait
  • Jika filsuf ingin meletakkan kembali  sumpit, ia jalankan perintah signal

Contoh Semaphore

var chopstick: array [0..4] of semaphore;

repeat

wait (chopstick [i]);

wait (chopstick [i + 1 mod 5 ]);

eat

signal (chopstick [i]);

signal (chopstick [i + 1 mod 5 ]);

think

until false

Kelemahan Semaphor

  • Low level
  • Karena tersebar di seluruh program, maka sulit dalam pemeliharaannya
  • Error yang terjadi sulit untuk dideteksi
  • Lebih baik menggunakan high-level construct
  • Dapat terjadi deadlock!
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s