5 SO05 Mutual Exclusion
5 SO05 Mutual Exclusion
MUTUAL EXCLUSION
-Race Condition &
Semaphore-
1
Sumber daya Kritis dan Daerah Kritis
Mutual Exclusion dan Kondisi Pacu (Race Condition)
Contoh Race Condition
Definisi Mutual Exclusion
Kriteria Penyelesaian Mutual Exclusion
Metoda Penyelesaian
1. Metode Naif
2. Metode Situasi Tertentu
3. Metode Busy Waiting
Metoda Perangkat Lunak
A. Algoritma Dekker
B. Algoritma Peterson
Metode dukungan Perangkat Keras
C. Pematian interupsi
D. Test & Set Lock
E. Exchange
4. Metoda dengan Semaphore
2
Sumber daya kritis adalah sumber daya yang
digunakan oleh beberapa proses secara
bersamaan.
3
Hanya satu program pada saat yang sama diijinkan masuk
critical region. Oleh karena itu diperlukan mutual exclusion,
yaitu suatu tata cara yang menjamin hanya 1 proses yang
masuk ke daerah kritis.
Bila mutual exclusion tidak tercapai, maka tercipta Race
Condition atau Kondisi Pacu yaitu suatu Kondisi yang tidak
dapat diprediksi hasilnya, bergantung pada proses-proses
berjalan yang sedang bersaing. Nilai akhir dari data tersebut
tergantung dari proses mana yang terakhir mengubah data
4
Proses 1 Proses 2
1. Proses Perhitungan 1. Proses Perhitungan
2. Read File X 2. Read File X
3. Proses Perhitungan A 3. Proses Perhitungan B
4. Write file X 4. Write file X
File X
1. File X merupakan sumber daya kritis dan Baris 2,3, dan 4 (kuning)
merupakan daerah kritis yaitu bagian program yang menggunakan
sumber daya kritis.
2. Proses 1 dan Proses 2 berpacu sehingga nilai X menjadi tidak pasti.
Kondisi ini disebut race condition. 5
Sistem operasi hanya menyediakan layanan
(berupa system call) untuk mencegah proses
masuk critical section yang sedang dimasuki
proses lain.
6
Bila mutual exclusion tidak tercapai, maka tercipta Race
Condition atau Kondisi Pacu
Ilustrasi Aplikasi tabungan
Pada aplikasi tabungan, misalnya rekening A berisi Rp. 1.000.000,
terdaftar di kantor cabang di Jogja.
Pada suatu saat program aplikasi di kantor cabang di Jakarta melayani
penyetoran Rp. 3.000.000 ke rekening A tsb. Program aplikasi membaca
saldo akhir rekening A sebesar Rp 1.000.000
Pada waktu hampir bersamaan, di kantor cabang di Jogja juga terjadi
transaksi yaitu penyetoran Rp. 5.000.000 ke rekening A. Program
aplikasi di Jogja membaca saldo masih Rp. 1.000.000
Sumber Daya kritis pada kasus ini adalah saldo rekening A.
Daerah kritis nya adalah bagian program yang baca dan write saldo
rekening.
7
Bila Mutual exclusion tidak dijamin ada 3 kemungkinan.
Kemungkinan ke-1: saldo akhir Rp 9.000.000
Saldo 1.000.000, setor 3.000.000, maka saldo 4.000.000, kemudian terima transfer
5.000.000, sehingga saldo akhir 9.000.000. Ini adalah yang diinginkan yaitu saldo
akhir 9.000.000.
Kemungkinan ke-2 : saldo akhir rp 4.000.000
Program aplikasi transfer di Jogja dilakukan secara cepat menulis ke rekening A
sehingga dihasilkan Rp. 6.000.000. (1 juta+5 juta). Pada saat yang sama program
aplikasi setor di kantor cabang Jakarta membaca saldo masih 1.000.000, sehingga pada
saat menulis saldo, menimpa hasil tsb dg Rp. 4.000.000.(1jt+3jt) sehinga saldo akhir
4.000.000.
Kemungkinan ke-3 : saldo akhir rp 6.000.000
Program aplikasi setor di Jakarta dilakukan scr cepat menulis ke rek A sehingga
dihasilkan Rp. 4.000.000 .(1jt+3jt) , Pada saat yang sama program aplikasi transfer di
ka. Cab. Jogja membaca saldo masih 1.000.000, sehingga pada saat menulis, menimpa
hasil tsb dg Rp. 6.000.000. (1 juta+5 juta), sehingga saldo akhir Rp 6.000.000.
Bila tidak ada mutex , maka ada kemungkinan saldo tabungan tidak valid,
dimana yang seharusnya Rp 9.000.0.00,- dapat berakibat saldo bernilai Rp
4.000.0000 atau Rp 6.000.000.
Bila tidak mutex maka terjadi race condition dimana kemungkinan hasil tidak
pasti bila 2 proses membaca sumber daya kritis(saldo) secara bersamaan.
8
Mutual Exclusion adalah suatu cara yang
menjamin hanya satu proses yang masuk ke
daerah kritis, sehingga bila telah ada proses yang
berada di daerah kritis, maka proses lain yang
ingin masuk harus menunggu.
Gambar 1
3. Harus dijamin proses yang ingin masuk critical section tidak menunggu
lama hingga waktu tak terhingga, agar tidak terjadi deadlock atau
starvation. (menjamin proses berprioritas rendah yang berada di dalam
daerah kritis dapat keluar dari daerah kritis. Bila tidak dapat keluar, akan
berakibat deadlock).
4. Tidak ada asumsi mengenai kecepatan relative proses atau jumlah proses
yang ada atau jumlah prosesor. Misal solusi harus dapat untuk komputer yg
10
memiliki lebih dari 1 prosesor.
1. Mutex :Hanya 1 Proses yang berada di daerah kritis
Non Critical Section
Critical Section
P2
P1 (akses) (wait)
Gambar 1
P1 (ingin
Critical Section
masuk)
P2 (lock
daerah 11
Gambar 2 kritis)
Pemaksaan adanya mutual exclusion dapat
menyebabkan terjadi deadlock dan starvation
13
Ketika proses hendak masuk critical section, proses lebih dulu
memeriksa variable lock dengan ketentuan :
16
Kelemahan Metode ini dapat digambarkan dengan kasus sbb:
Suatu saat P(0) selesai dari daerah kritis maka di set turn=1 (artinya
P(1) boleh masuk).
18
Metode Busy Waiting ada yang menggunakan perangkat lunak dan
ada yang menggunakan perangkat keras sbb:
Metoda Perangkat Lunak
a. Algoritma Dekker
b. Algoritma Peterson
Metode dukungan Perangkat Keras
c. Pematian interupsi
d. Test & Set Lock
e. Exchange
19
3. Metode Busy Waiting
3.a Algoritma Dekker mempunyai property berikut :
• Menggunakan 2 variable interest dan turn agar
1. dapat menjamin mutex (kriteria 1)
2. proses di daerah non kritis tidak dapat mencegah proses yang
mau masuk ke daerah kritis. (kriteria 2).
• Tidak memerlukan instruksi-instruksi perangkat keras khusus.
• Proses yang ingin masuk critical section akan segera masuk bila
dimungkinkan
20
1. Menggunakan 2 varibel : interest() dan turn
1. Variabel interest (n )= false berfungsi memastikan bahwa tidak
ada proses (n) di non critical section yang dapat menggangu
proses ini masuk ke critical section.
2. Variabel turn berfungsi untuk menjamin hanya 1 proses yang
berada di daerah kritis.
3. Bila turn=1, maka giliran proses 1 masuk critical section, dan
proses 0 menunggu untuk masuk.
4. Bila turn=0, maka giliran proses 0 masuk ke critical section,
dan proses 1 menunggu untuk masuk
5. Proses yang ingin masuk ke cs,akan segera masuk bila
memungkinkan.
1. Bila interest(1) false, proses 0 dapat masuk ke critical
section.
2. Bila interest(1) true, proses 0 menunggu sampai turn
berubah menjadi 0. Setelah turn=0, proses 0 dapat masuk
ke critical section.
2. Tidak memerlukan instruksi-instruksi perangkat keras khusus.
3. Program Dekker terlalu panjang, penyempurnaannya dilakukan
oleh Peterson. 21
Dekker’s Algorithm Procedure P1;
Var interest: array [0..1] of boolean; Begin
turn: 0..1; repeat
interest[1] := true; {P1 ingin masuk}
Procedure P0;
while interest[0] do if turn = 0 then
begin begin
repeat interest[1] := false;
interest[0] := true; {P0 ingin masuk} while turn =0 do {nothing}
while interest[1] do if turn = 1 then interest[1] := true
begin end;
<critical section>;
interest[0] :=false;
turn := 0;
while turn=1 do {nothing}
interest[1] := false;
{P0 menunggu P1 yang sedang <non critical section>
didalam sampai turn=0 artinya P1
forever
sudah selesai}
interest[0] :=true end;
end;
begin
<critical section>; interest[0]:=false; interest[1]:=false;
turn := 1; turn := 1;
interest[0] := false; parbegin
<non critical section> P0; P1
forever parend
end;
end. 22
3. Metode Busy Waiting
3.b. Metode Penyelesaian Peterson
• Merupakan penyempurnaan dari metode dekker.
• Menggunakan 2 variable interest dan turn seperti halnya metode
dekker, hanya metode Peterson memiliki algoritma yang lebih
ringkas/simple.
• Perbedaan dengan Dekker adalah pada pengecekan variable
interest dan turn, pada Peterson rutin pengecekan dijadikan
dalam satu perintah “while interest and turn do nothing”
sementara pada metode dekker terdiri dari beberapa baris
perintah.
• Dengan algoritma Peterson, proses-proses dapat masuk
critical section dengan aman tanpa terganggu proses lain.
Penyelesaian Peterson dapat di generalisasi untuk banyak
proses konkuren secara mudah, tidak Cuma untuk dua 23
proses
Algoritma Peterson untuk 2 proses procedure P1;
begin
var interest : array [0..1] of boolean;
repeat
turn: 0..1; interest[1]:= true;
procedure P0; turn := 0;
begin while interest[0] and turn = 0
do {nothing};
repeat
<critical section>;
interest[0] := true;
interest[1] := false;
turn := 1; <non critical section>
while interest[1] and turn = 1 do forever
{nothing} end;
{P0 menunggu sampai turn=0 (sampai P1 begin
selesai} interest[0] := false;
<critical section>; intereste[1] := false;
interest[0] := false; turn :=1;
<non critical section> parbegin
P0; P1
forever
parend
end; end.
24
3. Metode Busy Waiting
3.c. Metode Pematian Interupsi
Proses mematikan interupsi ke pemroses dan segera masuk ke critical
section. Proses kembali mengaktifkan interupsi segera setelah
meninggalkan critical section.
25
Kelemahan Metode Pematian Interuksi
1. Bila proses yang mematikan interupsi mengalami gangguan maka proses tidak
akan pernah menghidupkan interupsi kembali. Kejadian ini mengakibatkan
kematian seluruh system.
2. Jika terdapat dua pemroses atau lebih, mematikan interupsi hanya
berpengaruh pada pemroses yang sedang mengeksekusi intruksi itu. Proses
lain masih dapat memasuki critical section.
Process(i)
asm cli = mematikan interupsi
Enter_Critical Section
asm sti -> menghidupkan
Enter_Non_Critical Section P2 masih bisa masuk
P2 (menunggu) End
Tidak Dapat
CPU1 CPU2 Berfungsi,
CPU
Karena
cli Ada 2 CPU,
cli Proses masih
Critical dapat lewat
P1 Critical
Dapat
P1 Section CPU yang
Section
Berfungsi, satu
Karena
Hanya 1 CPU sti
sti 26
Metode ini membaca isi memori ke register dan kemudian
menyimpan nilai bukan 0 ke alamat memori. Pemroses yang
mengeksekusi instruksi tsl mengunci bus memori, mencegah
pemroses lain mengkases memori.
Yang di lock adalah bus memori sehingga dapat digunakan untuk
komputer multiprocessor
Procedure Tsl_enter_Critical Section
repeat
Copy flag to r dan Set Flag=1
Until r=0 Program TSL
End Var Flag,r: integer
Begin CPU1 CPU2
Flag=0 P2(tidak bisa masuk,
Procedure Tsl_Leave_Critical Section
Process(0) Karena bus memori
Set Flag=0
Process(1) dilock)
End
dst Bus Memori
Process(i) End
Flag=1 , Flag=1
Tsl_enter_Critical Section bus memori di lock
Enter_Critical Section
Tsl_Leave_Critical Section Critical
Enter_Non_Critical Section Section
End P1
Flag=0
Bila Flag=1, maka proses yang akan masuk,
harus menunggu sampai flag=0. 27
pro pro
Detik Rutin subrutin
ses r flag ses subrutin r flag
Test and set lock
1 Main proses flag=0 0 0
copy flag to r &
2 1 Tsl enter critical section flag=1 0 1 0 1
Tsl enter critical copy flag to r &
3 Tsl enter critical section loop until r=0 0 1 2 section flag=1 1 1
Tsl enter critical
4 1 enter critical section 1 1 section loop until r=0 1 1
5 1 Tsl leave critical section flag=0 1 0
6 1 leave critical section
copy flag to r &
7 2 Tsl enter critical section flag=1 0 1 0 1
Tsl enter critical copy flag to r &
8 2 Tsl enter critical section loop until r=0 0 1 3 section flag=1 1 1
Tsl enter critical
9 2 enter critical section 1 1 section loop until r=0 1 1
10 2 Tsl leave critical section flag=0 1 0
11 2 leave critical section 1 0
28
Metode ini menggunakan instruksi exchange (xchg) dan mirup dng
TSL yaitu dengan mengunci bus memori. Instruksi xchg
menukarkan dua isi memori
Procedure exch_enter_Critical Section
repeat Program Exchange
temp=flag Var Flag,r: integer
flag=r Begin
r=temp Flag=0, r=1
Until r=0 Process(1)
End Process(2)
dst
Procedure exch_Leave_Critical Section End
temp=flag
flag=r CPU1 CPU2
r=temp P2(tidak bisa masuk,
End Karena bus memori
dilock)
Process(i) Bus Memori
exch_enter_Critical Section
Enter_Critical Section Flag=1 , Flag=1, r=0
Exch_Leave_Critical Section bus memori di lock
Enter_Non_Critical Section
End Critical
Section
P1
Bila Flag=1, maka proses yang akan masuk, Flag=0, r=1
29
harus menunggu sampai flag=0.
Keunggulan metode instruksi mesin dibandingkan
dengan dukungan perangkat lunak
(djikstra/Peterson) :
Sederhana dan mudah diverifikasi
Dapat diterapkan ke sembarang jumlah proses
Dapat digunakan untuk mendukung banyak critical region
30
Kelebihan Metode Busy Waiting:
1. Dapat menjamin mutex (daerah kritis hanya di akses oleh 1 proses
pada saat bersamaan) . Untuk jumlah prosesor hanya 1 dapat
menggunakan metode CLI, bila lebih dari 1 prosesor dapat
muenggunakan TSL atau Exchange
2. Dapat menjamin proses di luar daerah kritis tidak dapat
menghambat proses yang akan masuk ke daerah kritis
32
4. Metode Penyelesaian Level Tinggi (Metode Semapore)
Pada metode ini semaphore, rutin semaphore dapat meminta sistem Operasi untuk
merubah status suatu proses menjadi blocked/waiting atau menjadi ready, sehingga
proses-proses yang menunggu berstatus blocked/waiting , bukan running. Dampaknya
CPU dapat dihemat dan hanya digunakan oleh proses yang benar-benar running
(bukan sedang menunggu). Permasalahan busy waiting yang memboroskan CPU
dapat diatasi.
Dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda
sederhana. Proses berhenti sampai proses memperoleh penanda tertentu. Variabel
khusus untuk penandaan ini disebut semaphore. Semaphore mempunyai dua property :
Semaphore dapat diinisialisasi dengan nilai bukan negative.
Ada dua operasi terhadap semaphore yaitu Operasi Up dan Operasi Down.
33
a. Operasi Down
Operasi ini menurunkan nilai semaphore. Operasi down ditriger bila ada proses yang ingin
masuk ke daerah kritis. Jika nilai semaphore menjadi bukan positif maka proses yang
mengeksekusinya diblok (waiting) atau menunggu masuk ke daerah kritis.Status proses
berubah dari running menjadi ‘blocked/waiting) Operasi Down adalah atomic (atomic
action), tidak dapat diinterupsi sebelum selesai. Menurunkan nilai, memeriksa nilai,
menempatkan proses pada antrian dan memblok sebagai instruksi tunggal. Tidak ada
proses lain yang dapat diakses sampai proses selesai.
b. Operasi Up
Operasi ini menaikkan nilai semaphore. Operasi Up menaikan nilai semaphore,
memindahkan satu proses dari antrian waiting (daerah kritis) ke antrian/senarai ready
(Ready Queue). Operasi UP ditriger bila ada proses yang keluar dari daerah kritis.
*Bila nilai s =1* , berarti daerah kritis kosong, sehingga dapat masuk ke daerah kritis
*Bila nilai s =0*, berarti ada 1 proses yang sudah masuk ke daerah kritis .
*Bila nilai s= -1*, berarti ada 2 proses yang menunggu dan 1 proses diantaranya akan pindah ke daerah
kritis atau sudah berada di daerah kritis.
*Bila nilai s= -2*, berarti ada 3 proses yang menunggu dan 1 proses diantaranya akan pindah ke daerah
kritis atau sudah berada di daerah kritis.
*Bila suatu proses keluar dari daerah kritis, maka nilai S dinaikkan 1 atau S=S+1.*
*Salah satu Proses yang waiting akan diubah statusnya menjadi ready* oleh Penjadwal dan masuk ke
antrian ready semaphore, kemudian proses akan running (untuk eksekusi di daerah kritis).
*Proses yang telah masuk ke antrian ready semaphore* , dapat langsung eksekusi daerah kritis. 35
Pematian Interupsi (Untuk 1 CPU)
Sistem operasi mematikan interupsi selagi memeriksa semaphore,
memperbarui, dan menjadikan proses diblok. Karena semua aksi hanya
memerlukan beberapa instruksi, pematian interupsi tidak merugikan.
Instruksi tsl (Untuk > 1 CPU)
Pada banyak pemroses, tiap semaphore dilindungi variable lock dan
instruksi tsl agar menjamin hanya satu pemroses yang saat itu
memanipulasi semaphore.
Dengan pematian interupsi Dengan set lock
Procedure Down Procedure Down
Asm cli tsl_enter_Critical Section
If s>0 then s=s-1 If s>0 then s=s-1
Else masukkan proses ke antrian dengan Else masukkan proses ke antrian dengan
status block status block
Asm sti tsl_leave_Critical SectionEnd
End
Procedure Up
Procedure Up tsl_enter_Critical Section
Asm cli s=s+1
s=s+1 pindahkan 1 proses ke antrian ready
pindahkan 1 proses ke antrian ready tsl_leave_Critical SectionEnd
Asm sti End
End
Dengan adanya tambahan metode busy waiting dukungan perangkat keras, maka *nilai variable ‘S’ dapat
dipastikan tidak mengalami race condition, karena di lock pada saat pengecekan*.
Oleh karena itu *kombinasi antara metode semaphore dan metode busy waiting dukungan perangkat keras
36
pada procedure down dan up, merupakan solusi yang ideal* mengatasi problem terkait mutual exclusion.
Int sem_init(sem_t* s, int shared, unsigned int value);
int sem_wait(sem_t *s);
Sem_wait()
By executing a semaphore lock action upon the semaphore that is specified by “s,” the
sem_wait() method holds that semaphore.
Sem_post()
When sem post is called, the value is increased, and then one of the previously backed up
or awaiting operations starts running, i.e., unlocks the already locked semaphore.
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
sem_t s; Bila ada proses di daerah kritis, maka
void* T(void * arg) { Proses menuggu sampai daerah kritis kosong
sem_wait(&s);
printf("Welcome! \n"); Daerah kritis
sleep(4);
printf("Bye!\n"); Proses meninggalkan daerah kritis
sem_post(&s);
} 1 proses yang antri di antrian block dipindahkan ke
antrian ready dan siap untuk masuk ke daerah kritis
37