Kode MK
: IT-012336
Proses Sinkronisasi
Sinkronisasi
Latar Belakang
Masalah Critical Section
Sinkronisasi Hardware
Semaphores
Monitors
Bab 7. Sinkronisasi
Overview (1)
Concurrent Process
Overview (2)
Proteksi OS:
Cooperating Process
Latar Belakang
Consumer process
repeat
while counter = 0 do no-op;
nextc := buffer [out];
out := out + 1 mod n;
counter := counter 1;
until false;
repeat
Bab 7. Sinkronisasi
Bab 7. Sinkronisasi
Implementasi buffer:
Bab 7. Sinkronisasi
10
Sinkronisasi:
Race Condition:
Bab 7. Sinkronisasi
Sinkronisasi
Concurrent C & P
Race Condition
decrement counter
11
counter := counter + 1;
counter := counter - 1;
12
1.
2.
13
14
Solusi (cont.)
3.
Ide :
Hanya 2 proses
Struktur umum dari program code Pi dan Pj:
Bab 7. Sinkronisasi
15
16
Algoritma 1
Algoritma 2
Shared variables:
int turn;
initially turn = 0
turn - i Pi dapat masuk ke criticalsection
Process Pi
do {
while (turn != i) ;
critical section
turn = j;
reminder section
} while (1);
Mutual exclusion terpenuhi, tetapi menentang progress
Bab 7. Sinkronisasi
17
Algoritma 3
Process Pi
18
Algoritma Bakery
do {
flag [i]:= true;
turn = j;
while (flag [j] and turn = j) ;
critical section
flag [i] = false;
remainder section
} while (1);
boolean flag[2];
initially flag [0] = flag [1] = false.
flag [i] = true Pi siap dimasukkan ke dalam critical
section
do {
flag[i] := true;
while (flag[j]) ;
critical section
flag [i] = false;
remainder section
} while (1);
Shared variables
19
20
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);
Shared data
var choosing: array [0..n 1] of boolean
number: array [0..n 1] of integer,
21
Sinkronisasi Hardware
22
Bab 7. Sinkronisasi
Process Pi:
do {
while (TestAndSet(lock)) ;
critical section
lock = false;
remainder section
}
Bab 7. Sinkronisasi
23
Bab 7. Sinkronisasi
24
Semaphore
Contoh : n proses
Process Pi
do {
wait(mutex);
critical section
signal(mutex);
remainder section
} while (1);
Bab 7. Sinkronisasi
25
Implementasi Semaphore
Shared variables
Bab 7. Sinkronisasi
26
27
S.value++;
if (S.value <= 0) {
remove a process P from S.L;
wakeup(P);
}
Bab 7. Sinkronisasi
28
Bounded-Buffer Problem
Bounded-Buffer Problem
Shared data
semaphore full, empty, mutex;
Initially:
full = 0, empty = n, mutex = 1
Dining-Philosophers Problem
Bab 7. Sinkronisasi
29
Bounded-Buffer Problem :
Producer-Consumer
Bab 7. Sinkronisasi
30
Readers-Writers Problem
Shared data
semaphore mutex, wrt;
Initially
mutex = 1, wrt = 1, readcount = 0
Bab 7. Sinkronisasi
31
Bab 7. Sinkronisasi
32
Writters Process
wait(wrt);
writing is performed
signal(wrt);
Dining-Philosophers Problem
Readers Process
wait(mutex);
readcount++;
if (readcount == 1)
wait(rt);
signal(mutex);
reading is performed
wait(mutex);
readcount--;
if (readcount == 0)
signal(wrt);
signal(mutex):
Bab 7. Sinkronisasi
Shared data
semaphore chopstick[5];
Semua inisialisasi bernilai 1
33
Dining-Philosophers Problem
34
Philosopher i:
do {
wait(chopstick[i])
wait(chopstick[(i+1) % 5])
eat
signal(chopstick[i]);
signal(chopstick[(i+1) % 5]);
think
} while (1);
Bab 7. Sinkronisasi
Bab 7. Sinkronisasi
Motif:
Misalnya:
35
36
Monitor
suatu saat hanya satu yang aktif dalam monitor dan yang
lain menunggu
Monitor (2)
37
Monitor (3)
38
Monitor (4)
Bab 7. Sinkronisasi
Bab 7. Sinkronisasi
39
40
Skema Monitor
Bab 7. Sinkronisasi
41