Rabu, 02 Mei 2012

Sinkronisasi Proses








Sinkronisasi Proses



POKOK BAHASAN:

9   Permasalahan Critical Section
9   Sinkronisasi Perangkat Keras
9   Semaphore
9   Masalah-masalah Klasik dalam Sinkronisasi


TUJUAN BELAJAR:

Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:
9   Memahami permasalahan critical section
9   Memahami algoritma sinkronisasi
9   Memahami konsep semaphore untuk sinkronisasi proses
9   Memahami  implementasi  sinkronisasi  dengan  masalah-masalah  klasik  dalam sinkronisasi proses





5.1  LATAR BELAKANG

Proses-proses  yang  konkuren  adalah  proses-proses  (lebih  dari  satu)  berada pada saat yang sama Proses-proses ini dapat sepenuhnya tak bergantung dengan yang lainnya tapi   dapa juga   saling   berinteraksi.                                                              Proses-proses   yang   berinteraksi memerlukan sinkronisasi agar terkendali dengan baik.
Proses-proses   yang   melakukan   akse secar konkuren   pada   data   yang digunakan bersama-sama menyebabkan data tidak konsisten (inconsistence).  Agar data konsisten dibutuhkan mekanisme untuk menjamin eksekusi yang berurutan pada proses- proses   yang   bekerja   sama.           Pada   mode shared   memory   untu penyelesaian



1

 BAB 5  SINKRONISASI PROSES                                                                                                                        2

permasalahan  bounded-buffer  paling  banyak  menyimpan  n   1  item pada  buffer  pada

saat  yang  bersamaan Untuk  mendapatkan  solusi  dimana  semua  N  buffer  digunakan bukan   masalah   yang   sederhana.                              Misalny dilakukan   modifikasi   kode   producer- consumer  dengan  menambahkan  variabel  counter  yang  diinisialisasi  0  dan  dinaikkan setiap satu item baru ditambahkan ke buffer.   Definisi data   yang digunakan bersama- sama (shared data) adalah sebagai berikut :
#define BUFFER_SIZE 10

typedef struct {

. . .

} item;

item buffer[BUFFER_SIZE];

int in = 0;

int out = 0;

int counter = 0;



Proses pada producer akan menambahkan satu nilai variabel counter sebagai berikut :

item nextProduced;

while (1) {

while (counter == BUFFER_SIZE)

; /* do nothing */

buffer[in] = nextProduced;

in = (in + 1) % BUFFER_SIZE;

counter++;

}

Sebaliknya juga proses pada consumer akan menurunkan satu nilai variabel counter

sebagai berikut :

item nextConsumed;

while (1) {

while (counter == 0)

; /* do nothing */

nextConsumed = buffer[out];

out = (out + 1) % BUFFER_SIZE;

counter--;

}

 BAB 5 SINKRONISASI PROSES                                                                                                                         3

Pernyataan   counter++  dan   counter--  harus   dilakuka secar atomik.

Operasi atomik adalah operasi yang harus menyelesaikan seluruh pernyataannya tanpa interupsi.  Pernyataan counter++ akan diimplementasikan dalam bahasa mesin sebagai berikut :
register1 = counter register1 = register1 + 1 counter = register1


Sedangkan   pernyataan   counter-- akan   diimplementasika dala bahas mesin sebagai berikut :
register1 = counter register1 = register1 + 1 counter = register1


Apabila   baik   producer   dan   consumer   mencoba   mengubah   buffer   secara konkuren,  pernyataa dalam  bahasa   mesin  diatas  aka dilakukan  secara  terpisah. Misalnya counter diinisialisasi 5.  Pernyataan yang dijalankan adalah :
producer: register1 = counter (register1 = 5)

producer: register1 = register1 + 1 (register1 = 6) consumer: register2 = counter (register2 = 5) consumer: register2 = register2 1 (register2 = 4) producer: counter = register1 (counter = 6)
consumer: counter = register2 (counter = 4)

Nilai  counter kemungkinan  bernilai  4  atau  6,  sedangkan  hasil  yang  benar seharusnya 5, hal ini yang dimaksud dengan data yang tidak konsisten.   Situasi dimana beberapa  proses  mengakses  dan  memanipulasi  data  yang  digunakan  bersama-sama secara konkuren disebut dengan race condition Nilai akhir dari data yang digunakan bersama-sama  tersebut tergantung  dari  proses  yang  terakhir  selesai.   Untuk  mencegah race condition tersebut, proses yang konkuren harus dilakukan sinkronisasi.

 BAB 5  SINKRONISASI PROSES                                                                                                                        4



5.2  PERMASALAHAN CRITICAL-SECTION (CRITICAL-SECTION PROBLEM)

Suatu system terdiri dari n proses dimana semuanya berkompetisi menggunakan data  yang  digunakan  bersama-sama Masing-masing  proses  mempunyai  sebuah  kode segmen  yang  disebut  dengan  critical  section,  dimana  proses  memungkinkan  untuk mengubah  variabel  umum,  mengubah  sebuah  tabel,  menulis  file  dan  lain  sebagainya. Gambaran penting dari sistem adalah, ketika sebuah proses dijalankan di dalam critical section,  tidak  ada  proses  lain  yang  diijinkan  untuk  menjalankan  critical  section-nya. Sehingga  eksekusi  dari  critical  section  oleh  proses-proses  tersebut  berlaku  eksklusif
(mutually exclusive).  Permasalahan critical section digunakan untuk mendesain sebuah protokol  dimana  proses-proses  dapat  bekerja  sama. Masing-masing  proses  harus meminta      ijin    untuk   memasuki                 critical           section-nya.                              Daerah               kode    yang mengimplementasikan  perintah  ini  disebut  daerah  entryCritical  section  biasanya diikuti oleh daerah exit.  Kode pengingat terletak di daerah remainder.
Sebuah  solusi  dari  permasalahan  critical  section  harus  memenuhi  3  syarat sebagai berikut :
1.   Mutual Exclusion.  Apabila proses P menjalankan critical section-nya, maka tidak

ada proses lain yang dapat menjalankan critical section.

2.   Progress.   Apabila  tidak  ada  proseyang  menjalankan  critical  section-nya  dan terdapat  beberapa  proses  yang  akan  memasuki  critical  section-nya,  maka  hanya proses-proses itu yang tidak diproses di dalam daerah pengingat (remainder) dapat ikut  berpartisipasi  di  dalam  keputusan  proses  mana  yang  akan  memasuki  critical section selanjutnya, dan pemilihan ini tidak dapat ditunda tiba-tiba.
3.   Bounded Waiting.   Terdapat batasan jumlah waktu yang diijinkan oleh proses lain

untuk  memasuki critical section setelah  sebuah  proses  membuat permintaan untuk memasuki critical section-nya dan sebelum permintaan dikabulkan.
Asumsi  bahwa  masing-masing  proses  dijalankan  pada  kecepatan  bukan  nol

(nonzero).  Akan tetapi tidak ada asumsi mengenai kecepatan relatif dari proses ke n. Pemecahan masalah critical section tidak mengandalkan semua asumsi tentang
instruksi hardware atau jumlah prosessor dari hardware yang mendukung.  Akan tetapi, diasumsikan  bahwa  instruksi  dasar  bahasa  mesin  (instruksi  primitif,  misalnyload, store  dan  test)  dijalankan  secara  otomatis.   Sehingga  apabila  dua  instruksi  dijalankan

 BAB 5 SINKRONISASI PROSES                                                                                                                         5

bersama-sama, hasilnya ekuivalen dengan deret eksekusi dalam beberapa pesanan yang

tidak  diketahui Sehingga  apabila  perintah  load  dan  store  dijalankan  bersama-sama, perintah  load  akan  mempunyai  nilai  lama  atau  nilai  baru,  tetapi  tidak  kombinasi  dari kedua perintah itu.
Ketika  mengimplementasikan  suatu  algoritma,  kita  menentukan  dahulu  hanya

variable-variabel  yang  digunakan  untuk  keperluan  sinkronisasdan  menggambarkan hanya proses Pi  seperti struktur seperti Gambar 5-1.   Entry section dan exit section di dalam   kotak   untu menunjukka segmen   kode   yang   penting.                                                               Proses-proses kemungkinan menggunakan variabel-variabel umum untuk sinkronisasi kegiatannya.


do {

entry section

critical section

exit section
remainder section

} while(1)



Gambar 5-1 : Struktur umum dari proses Pi


5.2.1   Pemecahan Dua Proses

Pada  sub  bab  ini  kita  membatasi  pada  algoritmyang  dapat  diaplikasikan hanya  terhadap  dua  proses  pada  satu  waktu.   Proses  tersebut  diberi  nama  P0  dan  P1. Untuk jelasnya, ketika menyatakan Pi, kita gunakan Pj  untuk menyatakan proses yang lain, dimana j = 1 i.


5.2.1.1 Algoritma 1

Pendekatan  pertama  adalah   memperbolehkan  semua  proses   menggunakan variable integer  turn diinisialisasi ke 0 (atau 1).
int turn;

Apabila turn = i, maka proses Pi  diijinkan untuk menjalankan critical section nya. Struktur dari proses Pi  adalah sebagai berikut :

 BAB 5  SINKRONISASI PROSES                                                                                                                        6


do {


while (turn != i) ;

critical section

turn = j;

reminder section


} while (1);



Pemecahan ini menjamin hanya satu proses pada satu waktu yang dapat berada

di critical section.   Tetapi hal ini tidak memuaskan kebutuhan progress, karena hal ini membutuhkan  proses  lain  yang  tepat  pada  eksekusi  dari  critical  section.                       Sebagai contoh,  apabila  turn=0 dan  P1  siap  untuk  memasuki  critical  section,  P1  tidak  dapat melakukannya, meskipun P0  mungkin di dalam remainder section nya.


5.2.1.2 Algoritma 2

Kelemahan  dengan  algoritma  1  adalah  tidak  adanya  informasi  yang  cukup tentang  state  dari  masing-masing  proses.                                 Untuk  mengatasi  masalah  ini  dilakukan penggantian variabel turn dengan array
boolean flag[2];

Inisialisasi awal flag [0] = flag [1] = false.  Apabila flag[i] bernilai true, nilai  ini  menandakan  bahwa  P siap  untukmemasuki  critical  section.                                    Struktur  dari proses Pi  adalah sebagai berikut :
do {

flag[i] := true;

while (flag[j]) ;

critical section

flag [i] = false;

remainder section

} while (1);


Pemecahan  ini  menjamin  mutual  exclusion,  tetapi  masih  belum  memenuhi

progress .

 BAB 5 SINKRONISASI PROSES                                                                                                                         7

5.2.1.3 Algoritma 3

Algoritma ini  merupakan kombinasi algoritma 1 dan algoritma 2.   Harapannya akan  didapatkan  solusi  yang  benar  untuk  masalah  critical-section,  dimana  proses  ini menggunakan dua variabel :
int turn;

boolean flag[2];

Inisialisasi  flagI[0] = flag[1] = false dan  nilai  dari  turn bernilai  0  atau  1. Struktur dari proses Pi  adalah :
do {

flag [i]:= true;

turn = j;

while (flag [j] and turn = j) ;

critical section

flag [i] = false;

remainder section

} while (1);


Algoritma   ketig in memenuhi   ketig kebutuhan   diatas   yait mutual   exclusion, progress  dan  bounded  waiting  dan  memecahkan  permasalahan  critical  section  untuk dua proses.


5.2.2   Algoritma Bakery

Algoritma    Bakery    adalah    algoritma    yang    digunakan    untuk    pemecahan permasalahan critical section pada n proses.  Sebelum memasuki critical section, proses menerimnomo.    Proseyang  mempunyai  nomor  terkecil  dapat  memasukcritical section Jika proses Pdan Pmenerima nomor yang sama, jika i < j maka Pi  dilayani lebih dahulu, sebaliknya Pj  akan dilayani lebih dahulu.  Skema pemberian nomor selalu membangkitkan nomor dengan menaikkan nilai urut misalnya 1, 2, 3, 3, 3, 3, 4, 5, ….. Pada  algoritma  bakery  terdapat  notasi  <º  untuk  urutan  nomor  (ticket  #,  process  id  #) sebagai berikut :
·    (a,b) < (c,d) if a < c or if a = c and b < d

 BAB 5  SINKRONISASI PROSES                                                                                                                        8

·    max    (a0,…,    an-1)    is    a    number,    k,    such    that    k    ³    ai    for    i    -    0,

…, n 1

Variabel umum  yang digunakan adalah :

boolean choosing[n];

int number[n];

Struktur data diatas diinisialisasi false dan 0.  Struktur dari proses Pi  adalah :

do {

choosing[i] = true;

number[i] = max(number[0], number[1], , number [n 1])+1;

choosing[i] = false;

for (j = 0; j < n; j++) {

while (choosing[j]) ;

while ((number[j] != 0) && (number[j],j < number[i],i)) ;

}

critical section

number[i] = 0;

remainder section

} while (1);




5.3  PERANGKAT KERAS SINKRONISASI

Pada sistem multiprosessor, proses-pmroses bertindak independen.   Interupsi di satu pemroses tidak mempengaruhi pemroses-pemroses yang lain.   Pemroses-pemroses yang memakai memori bersama maka pengaksesan terhadap suatu memori dijaga pada tingkat  perangkat  keras  agar  tidak  boleh  pemroses  lain  tidak  dapat  mengakses  suatu lokasi yang sama di saat yang sama.
Perancang  perangkat  keras  menyediakan  instruksi-instruksi  atomik  yang  tak dapa diinterupsi.                                Instruksi   dilaksanakan   sampai   selesai.  Instruksi   ini   biasanya dilaksanakan  dengan  cara  mngunci  bus  sehingga  pemroses-pemroses  lain  tak  dapat menggunakan  bus.   Pemroses  yang  mengunci  bus  dengan  leluasa  membaca  dan/atau memodifikasi suatu lokasi memori.
Beragam instruksi mesin disediakan oleh perancang pemroses guna membantu implementasi mutual exclusion.  Diantara instruksi-instruksi itu adalah:

 BAB 5 SINKRONISASI PROSES                                                                                                                         9


·    tsl (test and set lock)

·    tas atau ts (test and set), digunakan IBM S/360, keluarga Motorola M68000, dan lain-lain
·    cs (compare and set), digunakan IBM 370 series

·    exchange (xchg), digunakan intel X86

·    dsb



5.3.1   Metode Test and Set

Metode  Test  and  Set  melakukan  testing  dan  memodifikasi  isi  memori  secara atomik menggunakan fungsi Test and Set sebagai berikut :
boolean TestAndSet (boolean &target)

{

boolean rv = target;

tqrget = true;

return rv;

}



Untuk  menyelesaikan permasalahan mutual exclusion dengan  metode Test and

Set maka digunakan variable umum berikut :

boolean lock = false;

Sedangkan Process Pi  mempunyai struktur sebagai berikut :

do {

while (TestAndSet(lock)) ;

critical section

lock = false;

remainder section

}



5.3.2   Metode Swap

Metode swap menggunakan prosedur swap untuk menukar dua variable secara atomic.  Prosedur swap adalah sebagai berikut :

 BAB 5  SINKRONISASI PROSES                                                                                                                      10

void Swap(boolean &a, boolean &b) {

boolean temp = a;

a = b;

b = temp;

}

Untuk  menyelesaikan  permasalahan  mutual  exclusion  menggunakan  prosedur  swap, variabel umum yang digunakan adalah
boolean lock;

boolean waiting[n];

Kedua  variable  diatas  diinisialisasi  false.   Sedangkan  struktur  process  P adalah sebagai berikut :
do {

key = true;

while (key == true) Swap(lock,key);
critical section

lock = false;

remainder section

}




5.4  SEMAPHORE

Semaphore adalah pendekatan yang dikemukakan Dijkstra.   Prinsip semaphore adalah   sebagai   berikut   :                                Dua   proses   ata lebih   dapat   bekerja   sam dengan menggunakan  penanda-penanda  sederhana.      Proses  dipaksa  berhenti  sampai  proses memperoleh   penanda   tertentu.                                               Sembarang   kebutuhan   koordinasi  kompleks   dapat dipenuhi dengan strukstur penanda yang sesuai kebutuhannya.   Variabel khusus untuk penandaan ini disebut semaphore.
Semaphore   adalah   alat   untuk   sinkronisasi   yang   tida membutuhkan   busy

waiting.  Semaphore S  berupa variable integer.  Semaphore hanya dapat diakses melalui operasi atomic yang tak dapat diinterupsi sampai kode selesai.  Operasi dari semaphore
S adalah wait dan signal berikut :

wait (S):

 BAB 5 SINKRONISASI PROSES                                                                                                                      11

while S£ 0 do no-op;

S--;



signal (S):

S++;


Adanya semaphore mempermudah penyelesaian persoalan critical section pada

n proses.  Penyelesaian critical section menggunakan semaphore menggunakan variabel umum berikut :
semaphore mutex;

Variabel  semaphore  mutex diinisialisasi  mutex = 1.    Sedangkan  struktur  program untuk proses Pi  adalah :
do {

wait(mutex);

critical section signal(mutex);
remainder section

} while (1);

Implementasi   semaphore   harus   dapat   menjami mutual   exclusion   variabel semaphore yaitu   hany mengijinkan   satu   proses   pada   satu   saat   yang   boleh memanipulasi semaphore.  Implementasi sebuah semaphore menggunakan struktur data record sebagai berikut :
typedef struct {

int value;

struct process *L;

} semaphore;

Pada  semaphore  terdapat  dua  operasi  sederhana  yaitu  block untuk  menghentikan sementara  proses  yang  menggunakan  semaphore  dan  wakeup(P) untuk  melanjutkan eksekusi proses P yang di-blok.  Operasi wait dan signa dari semaphore didefinisikan sebagai :
wait(S):

S.value--;

if (S.value < 0)   {

 BAB 5  SINKRONISASI PROSES                                                                                                                      12

tambahkan proses ke S.L;

block;

}



signal(S):

S.value++;

if (S.value <= 0) {

hapus proses P dari S.L;

wakeup(P);

}



Sebagai alat sinkronisasi yang umum, semaphore dieksekusi oleh suatu proses setelah  proses  lain.    Misalnya  semaphore  B  pada  proses  Pj  hanya  dieksekusi  setelah semaphore  A  dieksekusi  pada  proses  Pi.                                                                    Pada  saat  menggunakan  semaphore,  flag diinisialisasi 0.  Kode yang diakses proses Pi  dan Pj  dapat dilihat berikut ini :
Pi                                         Pj

M                                M
A                                wait(flag)

signal(flag)                B



Semaphore merupakan salah satu sumber daya sistem.   Misalnya dua proses P1 dan  P2,  dua  sumber  daya  kritis  R dan  R2,  proses  P1  dan  P2  harus  mengakses  kedua sumber daya.  Kondisi berikut dapat terjadi : R1  diberikan ke P1, sedang R2  diberikan ke P2.   Apabila  dua  proses  untuk  melanjutkan  eksekusi  memerlukan  kedua  sumber  daya sekaligus maka kedua proses akan saling menunggu sumber daya lain selamanya Tak ad proses   yang   dapat   melepaskan   sumber   day yang   telah   dipegangny karena menunggu sumber daya lain yang tak pernah diperolehnya.  Kedua proses dalam kondisi deadlock, tidak dapat membuat kemajuan apapun.
Pada  saat  beberapa  proses  membawa  semaphore  dan  masing-masing  proses menunggu  semaphore  yang  sedang  dibawa  oleh  proses  lain  maka  kemungkinan  akan terjadi deadlock.  Misalnya terdapat dua semaphore S dan Q  yang diinisialisasi 1.

 BAB 5 SINKRONISASI PROSES                                                                                                                      13

P0                                              P1

wait(S);                          wait(Q);

wait(Q);                         wait(S);

M                                     M
signal(S);                       signal(Q);

signal(Q);                      signal(S);



Proses P0 dan P1  masing-masing menjalankan operasi wait(S) dan wait(Q).     Kemudian proses P0  dan P1  menjalankan operasi wait(Q) dan wait(S) maka sistem akan deadlock sampai salah satu proses menjalankan operasi signal.
Apabila suatu proses tidak pernah dihapus dari antrian semaphore setelah suatu semaphore dihentikan sementara, maka terjadi bloking yang tak terbatas.   Keadaan ini disebut starvation.
Keadaan starvation digambarkan sebagai berikut.   Misalnya terdapat tiga proses

P1, P2  dan P3  yang memerlukan pengaksesan sumber daya R secara periodik.  Skenario yang bisa terjadi :
·    P1  sedang diberi sumber daya R, P2  dan P3  blocked menunggu sumber daya R.

·    Ketika P1  keluar dari critical section, P2  dan P3  diijinkan mengakses R.

·    Asumsi P3  diberi hak akses.  Kemudian setelah selesai, hak akses kembali diberikan

ke P1  yang saat itu kembali membutuhkan sumber daya R.

Jika pemberian hak akses bergantian terus-menerus antara P1  dan P3, maka P2 tidak pernah memperoleh pengaksesan sumber daya R, meski tidak ada deadlock.  Pada situasi ini, P2  mengalami yang disebut Starvation.
Terdapat   dua   bentuk   semaphore   yaitu   counting   semaphore       dan   binary

semaphore.     Counting   semaphore   menggunaka nilai   intege yang   mempunyai jangkauan  tak  terbatas  seperti  pada  struktur  yang  telah  dijelanskan  diatas.        Binary semaphore  menggunakan  nilai  integer  dengan  jangkauan  antara  0  dan  1  sehingga implementasinya          lebih    sederhana.       Counting                       semaphore  S                       diatas                               dapat diimplementasikan dengan binary semaphore.  Struktur data yang digunakan adalah :
binary-semaphore S1, S2;

int C:

Struktur data diatas diinisialisasi dengan

 BAB 5  SINKRONISASI PROSES                                                                                                                      14

S1 = 1

S2 = 0

C = initial value of semaphore S

Implementasi operasi wait dan signal pada binary semaphore S adalah sebagai berikut : Operasi wait :
wait(S1); C--;
if (C < 0) { signal(S1); wait(S2);
}

signal(S1);



Operasi signal : wait(S1); C ++;
if (C <= 0)

signal(S2);


else



signal(S1);





5.5  MASALAH-MASALAH KLASIK SINKRONISASI

Untuk  mengimplementasikan  permasalahan  sinkronisasi  dapat  menggunakan model yang digunakan untuk permasalahan Bounded Buffer, Reader Writer dan Dining Philosopher yang akan dijelaskan di bawah ini.


5.5.1   Bounded-Buffer (Producer-Consumer) Problem

Produsen  menghasilkan  barang  dan  konsumen  yang  akan  menggunakannya. Ada beberapa batasan yang harus dipenuhi, antara lain :
-    Barang yang dihasilkan oleh produsen terbatas

-    Barang yang dipakai konsumen terbatas

 BAB 5 SINKRONISASI PROSES                                                                                                                      15

-    Konsumen  hanya  boleh  menggunakan  barang  yang  dimaksud  setelah  produsen

menghasilkan barang dalam jumlah tertentu

-    Produsen hanya boleh memproduksi barang jika konsumen sudah kehabisan barang

Untuk   penyelesaian   permasalahan   bounded   buffer   menggunaka semaphore

menggunakan variabel umum berikut :

semaphore full, empty, mutex;

Inisialisasi  untuk  variable  diatas,  full = 0,  empty = n,  mutex = 1.  Struktur program untuk produsen adalah
do {

                                                                                                    

menghasilkan item pada nextp

           wait(empty); wait(mutex);
                                                                                                   

menambah nextp ke buffer

signal(mutex); signal(full);
} while (1);

Sedangkan struktur program untuk konsumen adalah

do {

wait(full)

wait(mutex);

                                                                                                   

mengambil item dari buffer ke nextc

              signal(mutex); signal(empty);
                                                                                                   

menggunakan item pada nextc

                                                                                                   

} while (1);

 BAB 5  SINKRONISASI PROSES                                                                                                                      16

5.5.2   Reader and Writer Problem

Terdapat dua variasi pada masalah ini, yaitu :

a.    seorang  reader  tidak  perlu  menuggu  reader  lain  untuk  selesai  hanya  karena  ada

writer menunggu (reader memiliki prioritas lebih tinggi disbanding dengan writer)

b.    Jika  ada  writer  yang  sedang  menunggu,  maka  tidak  boleh  ada  reader  lain  yang bekerja (writer memiliki prioritas yang lebih tinggi)
Jika   terdapat   writer   dala critical   section   dan   terdapat   n reader   yang menunggu,  maka satu reader  akan  antri  di wrt dan  n-1 reader akan  antri di mutex. Jika  writer  mengeksekusi  signal(wrt),  maka  dapat  disimpulkan  bahwa  eksekusi adalah menunggu reader atau menunggu satu writer Variabel umum yang digunakan adalah
semaphore mutex, wrt;

Inisialisasi  variable  diatas  adalah  mutex  =  1,  wrt  =  1,  readcount  =  0. Struktur proses writer adalah
wait(wrt);


menulis


signal(wrt);

Sedangkan struktur proses reader adalah

wait(mutex);

readcount++;

if (readcount == 1)

wait(rt);

signal(mutex);


membaca

wait(mutex); readcount--;
if (readcount == 0)

signal(wrt);

signal(mutex):

 BAB 5 SINKRONISASI PROSES                                                                                                                      17

5.5.3   Dining-Philosophers Problem

Permasalahan dining-philosophers digambarkan pada Gambar 5-2 dimana terdapat

5  filosof  yang  akan  makan.   Di  sana  disediakan  5  supit.    Jika  filosof  lapar,  ia  akan mengambil  2 supit yaitu  di  tangan  kanan  dan  kiri.   Namun  adakalanya hanya  diambil supit satu saja.   Jika ada filosof yang mengambil 2 supit, maka ada filosof yang harus menunggu  sampai supit  tersebut  diletakkan.   Hal  ini  dapat  diimplementasikan  dengan wait dan signal.




Struktur data yang digunakan untuk penyelesaian permasalahan ini dengan semaphore

adalah

semaphore chopstick[5];

Dimana semua nilai array dinisialisasi 1.  Struktur program untuk filosof ke i adalah

do {

wait(chopstick[i])

wait(chopstick[(i+1) % 5])


makan


 BAB 5  SINKRONISASI PROSES                                                                                                                      18

signal(chopstick[i]);

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


berfikir


} while (1);



Meskipun solusi ini menjamin bahwa tidak ada 2 tetangga yang makan bersama- sama,  namun  masih  mungkin  terjadi  deadlock,  yaitu  jika  tiap-tiap  filosof  lapar  dan mengambil supit kiri, maka semua nilai supit = 0, dan juka kemudian tiap-tiap filosof akan  mengambil  supit  kanan,  maka  akan  terjadi  deadlock Ada  beberapa  cara  untuk menghindari deadlock, antara lain :
a.   mengijinkan  paling  banyak  4  orang  filosof  yang  duduk  bersama-sama  pada  satu

meja.

b.   Mengijinkan seorang filosof mangambil supit hanya jika kedua supit itu ada (dengan catatan, bahwa ia harus mengambil pada critical section)
c.   Menggunakan  suatu  solusi  asimetrik,  yaitu  filosof  pada  nomor  ganjil  mengambil

supit  kanan  dulu  baru  supit  kiri. Sedangkan  filosof  yang  duduk  di  kursi  genap mengambil supit kanan dulu baru supit kiri.



5.6  CONTOH SINKRONISASI

5.6.1   Sinkronisasi pada Solaris 2

Pada Solaris 2, sinkronisasi diimplementasikan dengan menggunakan beberapa kunci untuk mendukung sistem multitasking, multithreading (termasuk thread real time) dan  multiprosessing.        Solaris  2  menggunakan  adaptive  mutex  untuk  efisiensi  sistem pada saat proteksi data dari kode segment yang pendek.   Selain itu juga menggunakan variabel   kondis da kunci   reade write apabil kod segme lebih   panjang memerlukan  akses ke data.   Solaris 2 juga  menggunakan turnstile untuk  mengurutkan daftar thread yang menunggu untuk memperoleh baik adaptive mutex atau kunci reader writer.

 BAB 5 SINKRONISASI PROSES                                                                                                                      19

5.6.2   Sinkronisasi pada Windows 2000

Implementasi  sinkronisasi  pada  Windows  2000  menggunakan  interrupt  mask untuk  memproteksi  akses  ke  sumber  daya  global  pada  sistem  uniprosessor  sedangkan ada  sistem  multiprosessor  menggunakan  spinlock.                                                                      Selain  itu  Windows  2000  juga menyediaka dispatcher   object   yang   berfungsi   sebaga mutua exclusion   dan semaphore.  Dispatcher object juga menyediakan event yang berfungsi sebagai variabel kondisi.


RINGKASAN: LATIHAN SOAL :

1.   Apa yang dimaksud dengan race condition?

2.   Apakah yang dimaksud dengan critical section ? Untuk menyelesaikan masalah critical section , ada tiga hal yang harus dipenuhi, sebutkan dan jelaskan !

3.   Bagaimana algoritma Bakery untuk sinkronisasi banyak proses (n proses) ?

4.   Apa yang dimaksud semaphore dan sebutkan operasi pada semaphore

5.   Bagaimana   struktur    semaphore    yang    digunakan   untuk    menyelesaikan permasalahan :

a.   bounded buffer problem.

b.   reader and writer problem. c dining philosopher problem.

Tidak ada komentar:

Posting Komentar