Mutual Exclusion
dan
Sinkronisasi
(Pertemuan ke-9)
Pokok Bahasan
Pokok Bahasan:
Sinkronisasi dan Mutual Exclusion
Sub Pokok Bahasan:
Prinsip semaphore biner
Pengendalian urutan eksekusi proses dengan
semaphore
Kasus Producer-Consumer dengan semaphore
TIU:
Mahasiswa dapat memahami konsep sinkronisasi
dan mutual exclusion
TIK:
Mahasiswa dapat menjelaskan prinsip semaphore
biner
Mahasiswa dapat menjelaskan pengendalian urutan
eksekusi proses dengan semaphore
Mahasiswa dapat menjelaskan solusi
Sistem
Operasi/20110926 #2
kasus
Semaphore Biner
(1)
Ketentuan:
Inisialisasi variabel semaphore hanya bernilai 0
atau 1
Prosedur semWaitB:
Akan memeriksa nilai variabel semaphore
Jika nilai variabel = 1 diubah menjadi 0
Jika nilai variabel = 0 proses tersebut di-blok dan
dimasukkan ke dalam antrian
Prosedur semSignalB:
Akan memeriksa jumlah proses dalam antrian dengan
fungsi is_empty()
Jika tidak ada proses dalam antrian nilai variabel
menjadi 1
Jika ada proses dalam antrian:
Sebuah proses dipindahkan dari antrian ke
status
ready
Sistem Operasi/20100930
#3
Semaphore Biner
(2)
Definisi
semaphore
biner
Sistem Operasi/20100930
#4
(1)
Strong semaphore:
Adalah semaphore yang menentukan
urutan proses yang akan dikeluarkan
dari antrian
Dapat mencegah terjadinya
starvation
Model semaphore yang ada di OS
Weak semaphore:
Adalah semaphore yang
tidak
#5
(2)
Nilai sebelum A
dieksekusi
Sistem Operasi/20100930
#6
(3)
Sistem Operasi/20100930
#7
(4)
Keterangan:
1. Mula-mula nilai s = 1, proses A, B, D, dan C
berada dalam status ready; proses A
dieksekusi, nilai s berkurang menjadi 0
2. Proses A selesai masuk status ready;
proses B dieksekusi s menjadi -1 proses
B di-blok masuk antrian
3. Proses D dieksekusi
4. semSignal s menjadi 0 proses B
dibebaskan dari antrian; proses D selesai
masuk status ready lagi
Urutan eksekusi: A, B, D
Sistem Operasi/20100930
#8
(5)
Keterangan: (contd)
#9
Sistem Operasi/20100930
#10
Sistem Operasi/20100930
#11
Contoh Kasus 1:
Deskripsi masalah:
Terdapat satu atau lebih producer yang
menghasilkan data (record, karakter,
dsb) dan disimpan di buffer
Terdapat satu consumer yang
mengambil data dari buffer
Masalahnya adalah bagaimana caranya
supaya dalam satu saat hanya terdapat
satu produser atau satu consumer saja
yang dapat mengakses buffer?
Sistem Operasi/20100930
#12
Contoh Kasus 1:
Producer Consumer
Infinite Buffer (2)
Fungsi producer dan consumer:
producer:
while (true) {
/* produce item v */
b[in] = v;
in++;
}
consumer:
while (true) {
while (in <= out)
/*do nothing */;
w = b[out];
out++;
/* consume item w */
}
Sistem Operasi/20100930
#13
Contoh Kasus 1:
Producer Consumer
Infinite Buffer (3)
Struktur buffer dengan kapasitas tidak
terbatas (infinite)
#14
Contoh Kasus 1:
Producer
Consumer Infinite Buffer
(4)
Solusi I:
Implementasi dengan
semaphore biner
Supaya lebih
sederhana variabel in
dan out diganti
dengan n yang
menunjukkan jumlah
data yang ada di
buffer, dimana n =
in-out
semSignalB(delay)
digunakan untuk
mencegah consumer
Sistem Operasi/20100930
#15
Contoh Kasus 1:
Producer
Consumer Infinite Buffer
(5)
Urutan
eksekusi
normal
(PCPC)
OK
Sistem Operasi/20100930
#16
Contoh Kasus 1:
Producer
Consumer Infinite Buffer
(6)
Urutan
eksekusi
(PPPCCC)
OK
Sistem Operasi/20100930
#17
Contoh Kasus 1:
Producer
Consumer Infinite Buffer
(7)
Urutan eksekusi
consumer
disela oleh
producer
(PCPCCC)
not OK
Jika if(n==0)
dipindah ke
critical section
belum
menyelesaikan
masalah
masih dapat
terjadi deadlock
Sistem Operasi/20100930
#18
Contoh Kasus 1:
Producer
Consumer Infinite Buffer
(8)
Penyelesaian:
Tambahkan
variabel lokal
pada program
comsumer
Sistem Operasi/20100930
#19
Contoh Kasus 1:
Producer
Consumer
Infinite Buffer
(9)
Pembuktian
urutan
PCPCC
OK
Apakah sudah
dapat
mencegah
terjadinya
kesalahan ??
Buktikan!!
Sistem Operasi/20100930
#20
Contoh Kasus 1:
Producer
Consumer Infinite Buffer
(10)
Solusi II:
Implementasi
dengan
counting
semaphore
Lebih
sederhana,
lebih jelas
Sistem Operasi/20100930
#21
Contoh Kasus 1:
Producer
Consumer Infinite Buffer
(11)
Urutan
eksekusi
normal
(PCPCC)
OK
Sistem Operasi/20100930
#22
Contoh Kasus 1:
Producer
Consumer Infinite Buffer
(12)
Apa yang
terjadi jika
terjadi salah
ketik
program,
sehingga
urutan
semSignal
pada
producer
terbalik ???
masih OK
Sistem Operasi/20100930
#23
Contoh Kasus 1:
Producer
Consumer Infinite Buffer
(13)
Apa yang
terjadi jika
terjadi salah
ketik program,
sehingga
urutan
semWait pada
consumer
terbalik ???
deadlock
Sistem Operasi/20100930
#24
#25
Sistem Operasi/20100930
#26
consumer:
while (true) {
while (in == out)
/* do nothing */;
w = b[out];
out = (out + 1) % n;
/* consume item w */
}
#27
Solusi:
Implementas
i dengan
counting
semaphor
e
Semaphore e
digunakan
untuk
menjaga
jumlah ruang
buffer yang
Sistem Operasi/20100930
#28
Contoh Kasus 2:
Producer Consumer
Finite Buffer (5)
Urutan
eksekusi
PCPCCPPPC
OK
Sistem Operasi/20100930
#29
Implementasi testset
Sebagai Semaphore Primitif
+ Lebih baik
daripada
pendekatan
software
overhead
berkurang
-- Dapat terjadi
busy waiting,
tetapi karena
eksekusi
semaphore
semWait(s)
{
while (!testset(s.flag))
/* do nothing */;
s.count--;
if (s.count < 0)
set s.flag to 0)
s.flag = 0;
}
semSignal(s)
{
while (!testset(s.flag))
/* do nothing */;
s.count++;
if (s.count <= 0)
s.flag = 0;
}
Sistem Operasi/20100930
#30
Implementasi interrupt
Sebagai Semaphore Primitif
Digunakan pada
single processor
+ Lebih baik
daripada
pendekatan
software
overhead
berkurang
-- Dapat terjadi
busy waiting,
tetapi karena
eksekusi
semWait(s)
{
inhibit interrupts;
s.count--;
if (s.count < 0)
{
place this process in s.queue;
block this process and allow
interrupts
}
else
allow interrupts;
}
semSignal(s)
{
inhibit interrupts;
s.count++;
if (s.count <= 0)
{
remove a process P from s.queue;
place process P on ready list
}
allow interrupts;
}
Sistem Operasi/20100930
#31
Kekurangan:
#32
Pustaka
[STA09] Stallings, William. 2009. Operating
System: Internal and Design
Principles. 6th edition. Prentice Hall
Sistem Operasi/20100930
#33