Page 100 - Sistem Operasi
P. 100

1.  Ketika  mengeksekusi  operasi  wait,  maka  nilai  semaphore  menjadi  tidak  positif,

                      pada saat itu proses memblok dirinya sendiri dan terjadi waiting queue.
                   2.  Nunggu  Pada  saat  beberapa  proses  yang  lain  mengeksekusi  operasi  signal  maka

                      proses yang lain akan mengunggu hingga semaphore merestar. Proses tersebut akan
                      merestar dengan operasi wakeup dan akan merubah proses dari keadaan waiting ke

                      ready.


                  6.3.   Masalah-Masalah Klasik dalam Sinkronisasi

                         Terdapat 3 permasalahan klasik dalam sincronisasi yaitu :
                   1.  The Bounder-Buffer Problem

                      Problem ini kita upamakan dengan seorang programer yang menghasilkan sebuah
                      program dengan seorang user yang menggunakan program tersebut, maka batasan-

                      batasan yang harus dipenuhi antara lain :

                       Program yang dihasil programer terbatas
                       Program yang digunakan oleh user terbatas.

                       User  hanya  boleh  menggunakan  program  yang  dimaksud  setelah  programer
                         menghasilkan program dalam jumlah tertentu.

                       Programer  hanya  boleh  menghasilkan  program  jika  user  sudah  kehabisan

                         program.
                      Untuk menyelesaikan masalah bounded buffer menggunakan varilabel umum pada

                      semaphore  antara  lain  :  semapore  full,  empty,  mutex.  Inisialisasi  varial  tersebut
                      adalah full=0, empty=n, mutex=1, maka :

                       Struktur program untuk programer  Struktur program untuk user
                       REPEAT                              REPEAT
                             ....
                             menghasilkan item di nexttp       Wait(full);
                             ....                              Wait(mutex);
                             Wait(empty);                      ...
                             Wait(mutx);                       Memindahkan item dari buffer ke nextc
                             ...                               ...
                             Menambah nextp ke buffer          Signal(mutex);
                             ..                                Signal(empty);
                             Signal(mutex);                    ...
                             Signal(full);                     Mengkonsumsi item dari nextc
                       UNTIL false                             ...
                                                           UNTIL false



                                                                                                   86
   95   96   97   98   99   100   101   102   103   104   105