You are on page 1of 3

Algoritma Dekker Algoritma ini dirancang oleh ahli matematika Belanda bernama Dekker.

Algoritma ini menjabarkan mutual exclusion bagi dua proses. Solusi yang dikembangkan oleh algoritma ini dilakukan secara bertahap. Kelebihan dari algoritma ini adalah mampu menjelaskan bug-bug yang paling sering dijumpai di dalam pembuatan program-program konkuren. Didalam algoritma ini terdapat beberapa usaha yang dilakukan untuk melakukan mutual exclusion pada dua proses. 1.1 Usaha Pertama Mekanisme yang paling umum digunakan adalah Constrain. Mekanisme yang paling umum digunakan adalah Constrain. Yakni hanya mengizinkan satu akses ke lokasi memori pada suatu saat tertentu. Cara yang dilakukan adalah dengan membuat satu variabel bebas (int turn = 0). Sebuah proses (P0 atau P1), yang menginginkan untuk mengeksekusi bagian kritisnya harus memeriksa isi dari turn. Jika nilai turn sama dengan jumlah dari proses, maka proses dapat melanjutkan ke bagian kritis. Jika tidak maka proses tersebut menunggu untuk dapat mengeksekusi waktu krisisnya, atau yang dinamakan busywaiting. Busywaiting adalah proses menunggu untuk mengeksekusi namun terus melakukan pemeriksaan terhadap nilai dari turn. Usaha pertama ini telah mampu memenuhi persayaratan mutual exclusion, namun memiliki dua kekurangan mendasar. Pertama, proses-proses harus diawasi dengan ketat dalam bergantian penggunaan bagianbagian kritisnya. Jadi kecepatan ekseskusi ditentukan oleh kecepatan proses yang lebih lambat yang dimiliki oleh kedua proses. Apabila P0 mengkases bagian kritisnya 1 kali dalam satu jam, sedangkan P1 mengakses 1000 kali dalam satu jam. Maka P0 akan dipaksa menerima kelajuan dari P1. Masalah yang lebih serius terjadi apabila ada saru proses yang mengalami kegagalan, proses yang lain akan terblokir semua. Jadi usaha tersebut walaupun sudah dikatakan mampu melakukan teknik penstrukturan yang berguna, namun belum mampu mendukung pengolahan konkuren. Usaha pertama ini biasanya dikenal dengan nama coroutine. 1.2 Usaha Kedua Usaha kedua ini dilakukan untuk memenuhi syarat agar proses dapat memeriksa keadaan proses yang lain. Jadi ketika sebuah proses musnah, proses yang lain masih bisa mengeksekusi ke bagian kritisnya. Untuk itu dibuat variabel global bagi pakai Flag[0] dan Flag[1]. Flag[0] berhubungan dengan P0 dan Flag[1] berhubungan dengan P1. Ilustrasinya, ketika proses P1 akan memasukki bagian kritis maka ia memeriksa Flag [0] miliki P0. Jika Flag[0] bernilai false maka P1 akan mengeksusi bagian kritisnya dan mengeset Flag[1] menjadi bernilai true. Setelah selesai mengeksekusi, maka Flag[1] diset kembali menjadi nilai false. Dengan pendekatan seperti ini maka apabila sebuah proses mengalami kegagalan di luar bagian kritis, proses lain tidak akan terblokir. Proses akan dapat masuk kebagian kritisnya sesering mungkin yang ia mau karena status flag selalu bernilai false, namun ketika proses gagal ketika berada di bagian kritisnya maka proses akan terblokkir selamanya. Namun proses ini memiliki tingkat sulisi yang lebih buruk dari usaha pertama. Hal ini dikarenakan usaha kedua tidak mampu menjamin adanya mutual exclusion. Dengan sistem pendekatan seperti di atas maka akan terjadi kemungkinan kedua proses berada pada bagian kritisnya secara bersamaan. Dan ini akan menjadi deadlock. 1.3 Usaha Ketiga

Usaha keempat ini mengatur sedemikian rupa supaya setiap proses tidak masuk ke bagian kritis. Jika ditemukan bahwa turn = 0. . flag[1] menjadi true dan P0 tidak dapat masuk kebagian kritis. Sesuai dengan solusi yang ditawarkan. maka hal ini akan menimbulkan masalah baru. kemudian mengetahui bahwa akan kembali untuk memaksakan dan secara periodic memeriksa P1 flag. hanya dapat dijelaskan dan tidak dapat dipertahankan untuk suatu waktu yang lama. Untuk itu perlu membuat urutan aktivitas kedua proses. 1. Apabila flagnya false. Peterson telah memberikan solusi yang singkat dan baik sekali. Kemudian P0 memeriksa flag P1. Variabel turn ini akan mengindikasikan proses mana yang mempunyai hak memasuki daerah kritisnya. Solusi ini dapat dijelaskan sebagai berikut. Untuk lebih jelasnya seperti berikut. P1 akan dalam beberapa titik memeriksa bahwa akan kembali ke pemeriksaan kembali dan men-set flag false.4 Usaha Keempat Usaha keempat ini menjamin adanya mutual exclusion. Ketika P0 akan mengeksekusi bagian kritisnya maka akan mengeset flag [0] bernilai true agar proses P1 tidak dapat mengakses bagian kritisnya ketika P0 sedang memasukki bagian kritisnya. Ilustrasi yang dilakukan menggunakan sudut pandang P0. membolehkan P0 untuk dilanjutkan. Namun dengan mengeset nilai flagnya menjadi true sebelum mengeksekusi bagian kritisnya. Apabila P0 menyetel flag[0] ke true . Sebaliknya mutual blocking dicegah dicegah dengan memanfaatkan variabel turn. maka proses akan terblokir selamanya. Apabila P1 telah masuk ke bagian kritis. hal ini dapat diatasi dengan menggunakan variabel turn pada pendekatan pertama. 1. Ketika P0 ingin memasukki daerah kritisnya.5 Solusi yang Benar Pendekatan dengan flag array masih belum cukup untuk mengatasi masalah “mutual courtesy”. P1 sedang menunggu bagian kritisnya. akan men-set flag ke false untuk membebaskan bagian kritis dan men-set turn ke 1 untuk mentransfer hak untuk memaksakan ke P1. Setelah P0 telah digunakan dalam bagian kritis. 2 Algoritma Peterson Algoritma dekker menyeleseikan masalah mutual exclusion namun menggunakan program yang agak rumit dan sulit dipahami serta kebenarannya sangat sulit dibuktikan. dan variabel turn digunakan untuk memecah konflik yang simultan. Kejadian ini merupakan deadlock. P0 memeriksa dengan turn. Dalam usaha kedua bila proses rusak pada bagian diluar kritisnya maka proses lain masih dapat mengakses bagian kritisnya. P0 dapat dengan segera memasukki bagian kritisnya. Tidak dapat terjadi karena jika turn = 1 maka P1 dapat memasukki bagian kritisnya. Namun ketika proses terhenti di bagian kritisnya. Kondisi ini dikenal dengan nama livestock. Hal ini tidak mungkin terjadi karena P1 mengimplikasikan flag[1] = false. Hal ini telah mampu memenuhi syarat mutual exclusion. Untuk lebih jelasnya dapat dilihat pada kemungkinan yang akan terjadi sebagai berikut : 1. P1 tidak bisa masuk ke bagian kritis. P0 menyetel flagnya ke true. 2. Yakni ketika kedua proses pada saat yang bersamaan mengeset flag masingmasing menjadi true sebelum mengerjakan bagian kritisnya. Skenario ini tidak dapat diterima karena. maka kedua proses mengira proses lain sedang berada di bagian kritis. jika tidak.Usaha ketiga ini dilakukan untuk menyempurnakan kelemahan yang dimiliki oleh usaha kedua. flag variabel array global digunakan untuk mengindikasikan bahwa posisi setiap proses dalam kaitannya dengan mutual exclusion. P1 tidak berminat memasukki bagian kritisnya.

Algoritma ini mampu menjelaskan mutual exclusion secara lebih mudah. . Dan algoritma ini mampu dengan mudah untuk degenerate untuk sistem n-proses.3. Hal ini tidak terjadi karena karena P1 memiliki kewajiban member kesempatan kepada P0 dengan cara men-set turn menjadi 0. P1 Sedang menggunakan bagian kritisnya dan memonopoli.