Anda di halaman 1dari 5

Deteksi deadlock Jika sistem tidak menerapkan pencegahan deadlock atau algoritma penghindaran deadlock, maka deadlock dapat

terjadi. Dalam lingkungan ini, sistem harus menyediakan: Algoritma yang memeriksa keadaan sistem untuk menentukan apakah deadlock telah terjadi Algoritma untuk memperbaiki deadlock Dalam diskusi berikut, kami menguraikan dua kebutuhan sebagaimana hubungan mereka ke sistem dengan hanya satu contoh dari masing-masing jenis sumber daya, sebagaimana sistem dengan beberapa contoh dari masing-masing jenis sumber daya. Pada poin ini, bagaimanapun, kami mencatat bahwa skema deteksi-dan-perbaikan membutuhkan overhead yang meliputi tidak hanya runtime biaya pemeliharaan informasi yang diperlukan dan melaksanakan algoritma deteksi, tetapi juga potensi kerugian dalam pemulihan dari deadlock. 7.6.1 Contoh tunggal dari Setiap Jenis Sumber Daya Jika semua sumber daya hanya memiliki satu contoh, maka kita dapat mendefinisikan suatu algoritma deteksi deadlock yang menggunakan varian dari grafik alokasi sumber daya, yang disebut grafik wait-for. Kami memperoleh grafik ini dari grafik alokasi sumber daya dengan menghapus node sumber daya dan menghapus tepi yang sesuai. Lebih tepatnya, tepi dari Pi ke Pj dalam grafik wait-for menunjukkan bahwa Proses Pi menunggu untuk proses Pj untuk melepaskan sumber daya yang Pj butuhkan. Tepi Pi -> Pj dalam grafik wait-for jika dan hanya jika grafik alokasi sumberdaya yang sesuai berisi dua tepi P, -> Rq dan Rp -> Pi, untuk beberapa sumber daya Rq. Sebagai contoh, pada Gambar 7.8, kami menyajikan grafik alokasi sumber daya dan itu sesuai dengan grafik wait-for. Seperti sebelumnya, deadlock ada dalam sistem jika dan hanya jika grafik wait-for mengandung siklus. Untuk mendeteksi deadlock, sistem perlu untuk mengontrol grafik wait-for dan secara berkala memanggil algoritma mencari untuk siklus dalam grafik. Sebuah algoritma untuk mendeteksi siklus dalam grafik membutuhkan urutan operasi n2, di mana n adalah jumlah simpul dalam grafik. 7.6.2 Beberapa Contoh Tipe Sumber Daya skema grafik wait-for tidak berlaku untuk sistem alokasi sumber daya dengan beberapa contoh dari setiap jenis sumber daya. Kita sekarang kembali ke algoritma deteksi deadlock yang dapat diterapkan pada sistem tersebut. Algoritma menerapkan beberapa variasi waktu struktur data yang mirip dengan yang digunakan dalam algoritma banker (Bagian 7.5.3): Tersedia. Sebuah panjang vektor m menunjukkan jumlah sumber daya yang tersedia masing-masing tipe. Alokasi. Matriks n x m mendefinisikan jumlah sumber daya masing-masing tipe yang dialokasikan untuk setiap proses. Permintaan. Matriks n x m menunjukkan permintaan saat ini pada setiap proses. Jika Permintaan [i] [j] sama dengan k, maka proses Pi yang meminta contoh k lebih dari sumber daya tipe Rj.

Hubungan antara dua vektor s didefinisikan sebagai dalam Bagian 7.5.3. untuk mempermudah notasi, kita membuat baris dalam matriks Alokasi dan Permintaan sebagai vektor, kita menyebut mereka sebagai Alokasi: dan Permintaani. Algoritma deteksi dijelaskan di sini hanya menyelidiki setiap urutan alokasi yang mungkin untuk proses yang masih harus diselesaikan. Bandingkan algoritma ini dengan algoritma banker pada Bagian 7.5.3. 1. Biarkan Work dan Finish dengan vektor panjang m dan n, secara berurutan. inisialisasi Work - Tersedia. Untuk i = 0, 1,. . . , n-1, jika Alokasi; 0, maka Finish *i+ = false; sebaliknya, Finish [i] = true. 2. Cari indeks i seperti yang kedua a. Finish [i] == false b. Requesti < Work Jika tidak ada i, lanjutkan ke langkah 4. 3. Work = Work + Alokasii Finish [i] = true Lanjutkan ke langkah 2. 4. Jika Finish [i] == false, untuk beberapa /', 0 < i <n, maka sistem ini dalam status deadlock. Apalagi jika Finish [i] == false, maka proses Pi adaah deadlock. Algoritma ini membutuhkan urutan dalam operasi x n2 untuk mendeteksi apakah sistem dalam keadaan buntu. Anda mungkin bertanya-tanya mengapa kita merebut kembali sumber daya dari proses P, - (pada langkah 3) segera setelah kami menentukan bahwa Permintaan Pekerjaan / <(2b dalam langkah). Kita tahu bahwa P, saat ini tidak terlibat dalam kebuntuan (sejak Permintaan Kerja, <). Dengan demikian, kita mengambil sikap optimis dan menganggap bahwa P-akan membutuhkan sumber daya tidak lebih untuk menyelesaikan tugasnya, dengan demikian akan segera mengembalikan semua sumber daya yang saat ini dialokasikan ke sistem. Jika asumsi kita benar, kebuntuan bisa terjadi kemudian. bahwa kebuntuan akan terdeteksi pada saat algoritma kebuntuan-deteksi dipanggil. Untuk menggambarkan algoritma ini, kami menganggap sistem dengan lima proses PQ

melalui P4 dan jenis sumber daya tiga A, B, dan jenis C. Sumber Daya A memiliki tujuh contoh, sumber daya tipe B memiliki dua kasus, dan sumber daya tipe C memiliki enam contoh. Misalkan, pada waktu Untuk, kita memiliki alokasi sumber daya-berikut negara: Alokasi Tersedia Permintaan ABC ABC ABC Po 010 0 0 0 0 0 0 Pj 2 0 0 2 0 2 P2 3 0 3 0 0 0 P3 2 1 1 1 0 0 P4 0 0 0 0 2 2 Kami mengklaim bahwa sistem ini tidak dalam keadaan buntu. Memang, jika kita mengeksekusi algoritma kita, kita akan menemukan bahwa urutan <Pn, Pi, Pi, P\, PA> hasil di Finish [i] - berlaku untuk semua i. Misalkan sekarang bahwa proses Pj membuat satu permintaan tambahan untuk contoh tipe C. Matriks Permintaan dimodifikasi sebagai berikut: Pi! sebuah i[ Alim P3 Alim Rei A 0 9 0 1 0

litest SM 00 02 01 00 02 Kami mengklaim bahwa sistem sekarang jalan buntu. Meskipun kita dapat merebut kembali sumber daya yang dimiliki oleh proses Po, jumlah sumber daya yang tersedia tidak cukup untuk memenuhi permintaan dari proses lainnya. Dengan demikian, ada jalan buntu, yang terdiri proses Pi, Pi, P3, dan P4. 7.6.3 Deteksi-Algoritma Penggunaan Kapan kita harus memanggil algoritma deteksi? Jawabannya tergantung pada dua faktor: 1. Seberapa sering adalah kebuntuan mungkin terjadi? 2. Berapa banyak proses akan terpengaruh oleh kebuntuan ketika itu terjadi? Jika kebuntuan sering terjadi, maka algoritma deteksi harus dipanggil sering. Sumber daya yang dialokasikan untuk proses buntu akan menganggur sampai Kebuntuan dapat rusak. Selain itu, jumlah proses yang terlibat dalam siklus kebuntuan bisa tumbuh. Deadlock terjadi hanya ketika beberapa proses membuat permintaan yang tidak bisa segera diberikan. Permintaan ini mungkin permintaan terakhir yang melengkapi rantai proses menunggu. Dalam ekstrim, kita dapat meminta deadlockdetection tersebut algoritma setiap kali permintaan untuk alokasi tidak dapat diberikan segera. Dalam kasus ini, kita dapat mengidentifikasi tidak hanya set buntu dari proses tetapi juga proses tertentu yang "menyebabkan" kebuntuan. (Dalam kenyataannya, setiap proses buntu adalah link dalam siklus dalam grafik sumber daya, sehingga semua dari mereka, bersama-sama, menyebabkan kebuntuan) Jika ada sumber daya yang berbeda. jenis, satu permintaan dapat menciptakan banyak siklus dalam grafik sumber daya, setiap siklus

diselesaikan oleh permintaan terbaru dan "disebabkan" oleh salah satu diidentifikasi proses. Tentu saja, jika algoritma kebuntuan-deteksi dipanggil untuk setiap sumber daya permintaan, hal ini akan dikenakan biaya overhead yang cukup besar dalam perhitungan waktu. A kurang alternatif mahal hanya untuk memanggil algoritma pada interval kurang sering - Misalnya, sekali per jam atau setiap kali penggunaan CPU turun di bawah 40 persen. (Kebuntuan Sebuah akhirnya melumpuhkan sistem throughput dan menyebabkan CPU pemanfaatan untuk menjatuhkan) Jika algoritma deteksi dipanggil pada titik-titik sembarang. waktu, mungkin ada banyak siklus dalam grafik sumber daya. Dalam kasus ini, kita akan umumnya tidak dapat membedakan mana proses buntu banyak "disebabkan" kebuntuan.

Anda mungkin juga menyukai