Assalammualaikum Warahmatullahi Wabarakatuh. Semoga dengan mengunjungi blog ini dapat menambah pengetahuan bagi kita semua. Amiiin.

Senin, 15 April 2013

Sistem Operasi: Algoritma 1 & 2


Algoritma 1

     Algoritma 1 mencoba mengatasi masalah criticalsection untuk dua proses. Algoritma ini menerapkan sistem bergilir kepada kedua proses yang ingin mengeksekusi criticalsection, sehingga kedua proses tersebut harus bergantian menggunakan criticalsection.



     Algoritma ini menggunakan variabel bernama turn, nilai turn menentukan proses mana yang boleh memasuki criticalsection dan mengakses data yang di- sharing. Pada awalnya variabel turn diinisialisasi 0, artinya P0 yang boleh mengakses criticalsection. Jika turn= 0 dan P0 ingin menggunakan criticalsection, maka ia dapat mengakses criticalsection-nya. Setelah selesai mengeksekusi criticalsection, P0 akan mengubah turn menjadi 1, yang artinya giliran P1 tiba dan P1 diperbolehkan mengakses criticalsection. Ketika turn= 1 dan P0 ingin menggunakan criticalsection, maka P0 harus menunggu sampai P1 selesai menggunakan criticalsection dan mengubah turn menjadi 0.


    Ketika suatu proses sedang menunggu, proses tersebut masuk ke dalam loop, dimana ia harus terus-menerus mengecek variabel turn sampai berubah menjadi gilirannya. Proses menunggu ini disebut busywaiting. Sebenarnya busywaiting mesti dihindari karena proses ini menggunakan CPU. Namun untuk kasus ini, penggunaan busywaiting diijinkan karena biasanya proses menunggu hanya berlangsung dalam waktu yang singkat.

     Pada algoritma ini masalah muncul ketika ada proses yang mendapat giliran memasuki criticalsection tapi tidak menggunakan gilirannya sementara proses yang lain ingin mengakses criticalsection. Misalkan ketika turn= 1 dan P1 tidak menggunakan gilirannya maka turn tidak berubah dan tetap 1. Kemudian P0 ingin menggunakan criticalsection, maka ia harus menunggu sampai P1 menggunakan criticalsection dan mengubah turn menjadi 0. Kondisi ini tidak memenuhi syarat progress karena P0 tidak dapat memasuki criticalsection padahal saat itu tidak ada yang menggunakan criticalsection dan ia harus menunggu P1 mengeksekusi non- criticalsection-nya sampai kembali memasuki criticalsection. Kondisi ini juga tidak memenuhi syarat boundedwaiting karena jika pada gilirannya P1 mengakses criticalsection tapi P1 selesai mengeksekusi semua kode dan terminate, maka tidak ada jaminan P0 dapat mengakses criticalsection dan P0-pun harus menunggu selamanya.

 

Algoritma 2



     Algoritma 2 juga mencoba memecahkan masalah criticalsection untuk dua proses. Algoritma ini mengantisipasi masalah yang muncul pada algoritma 1 dengan mengubah penggunaan variabel turn dengan variabel flag. Variabel flag menyimpan kondisi proses mana yang boleh masuk criticalsection. Proses yang membutuhkan akses ke criticalsection akan memberikan nilai flag-nya true. Sedangkan proses yang tidak membutuhkan criticalsection akan men- set nilai flagnya bernilai false.

  Suatu proses diperbolehkan mengakses criticalsection apabila proses lain tidak membutuhkan criticalsection atau flag proses lain bernilai false. Tetapi apabila proses lain membutuhkan criticalsection(ditunjukkan dengan nilai flag-nya true), maka proses tersebut harus menunggu dan "mempersilakan" proses lain menggunakan criticalsection-nya. Disini terlihat bahwa sebelum memasuki criticalsectionsuatu proses melihat proses lain terlebih dahulu (melalui flag-nya), apakah proses lain membutuhkan criticalsection atau tidak.

     Awalnya flag untuk kedua proses diinisialisai bernilai false, yang artinya kedua proses tersebut tidak membutuhkan criticalsection. Jika P0 ingin mengakses criticalsection, ia akan mengubah flag[0] menjadi true. Kemudian P0 akan mengecek apakah P1 juga membutuhkan criticalsection, jika flag[1] bernilai false maka P0 akan menggunakan criticalsection. Namun jika flag[1] bernilai true maka P0 harus menunggu P1 menggunakan criticalsection dan mengubah flag[1] menjadi false.
     
     Pada algoritma ini masalah muncul ketika kedua proses secara bersamaan menginginkan criticalsection, kedua proses tersebut akan men- set masing-masing flag-nya menjadi true. P0 men- set flag[0] =true, P1 men- set flag[1] = true. Kemudian P0 akan mengecek apakah P1 membutuhkan criticalsection. P0 akan melihat bahwa flag[1] = true, maka P0 akan menunggu sampai P1 selesai menggunakancriticalsection. Namun pada saat bersamaan, P1 juga akan mengecek apakah P0 membutuhkan criticalsection atau tidak, ia akan melihat bahwa flag[0] = true, maka P1 juga akan menunggu P0 selesai menggunakan criticalsection-nya. Kondisi ini menyebabkan kedua proses yang membutuhkan criticalsection tersebut akan saling menunggu dan "saling mempersilahkan" proses lain untuk mengaksescriticalsection, akibatnya malah tidak ada yang mengakses criticalsection. Kondisi ini menunjukkan bahwa Algoritma II tidak memenuhi syarat progress dan syarat boundedwaiting, karena kondisi ini akan terus bertahan dan kedua proses harus menunggu selamanya untuk dapat mengakses criticalsection.

Penjelasan selanjutnya : Algoritma 3

Penjelasan sebelumnya : Solusi ke masalah criticalsection


Tidak ada komentar:

Posting Komentar

Related Posts Plugin for WordPress, Blogger...

Daftar Isi