Anda di halaman 1dari 37

MODUL SISTEM OPERASI

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.

Critical region/section atau Daerah kritis


adalah bagian program yang menggunakan
sumber daya kritis.

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

Bagian program yang menggunakan


DAERAH KRITIS sumber daya kritis disebut critical
region/section atau daerah kritis.

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.

Non Critical Section


Critical Section
P2
P1 (akses) (wait)

Gambar 1

Hanya P1 yang berada di daerah kritis, P2 harus menunggu 9


Kemampuan menjamin mutual exclusion harus memenuhi kriteria-
kriteria berikut:
1. Mutual Exclusion harus dijamin. Tidak boleh lebih dari 1 proses pada saat
yang sama berada di daerah kritis.

2. Proses yang berada di noncritical section, dilarang memblok proses-proses


yang ingin masuk critical section.

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

2. Proses di non critical Section tidak boleh menghambat proses


yang ingin masuk ke daerah kritis . Kondisi di gambar 2 dimana P2
berada di non critical section tapi melock daerah kritis (P1 tidak
bisa masuk) harus dihindari
Non Critical Section

P1 (ingin
Critical Section
masuk)

P2 (lock
daerah 11
Gambar 2 kritis)
Pemaksaan adanya mutual exclusion dapat
menyebabkan terjadi deadlock dan starvation

Deadlock adalah suatu kondisi dimana dua


proses atau lebih saling menunggu proses yang
lain untuk melepaskan resource yang sedang
dipakai. Karena beberapa proses itu saling
menunggu, maka tidak terjadi kemajuan dalam
kerja proses-proses tersebut.

Starvation : Kondisi dimana terdapat proses


yang tidak akan pernah mendapat resource yang
dibutuhkan
12
1. Metode Naif
Suatu metode yang menggunakan variable LOCK
dengan nilai 0 atau 1, dimana bila bernilai 0 berarti
daerah kritis kosong dan bila bernilai 1, berarti daerah
kritis sedang digunakan oleh proses lain.
Sebenarnya metode ini tidak menyelesaikan mutual
exclusion, karena masih terdapat scenario proses yang
membuat situasi kacau. Metode ini sering disebut
metode variable lock sederhana.

13
Ketika proses hendak masuk critical section, proses lebih dulu
memeriksa variable lock dengan ketentuan :

Jika variable lock bernilai 0 (berarti daerah kritis kosong), proses


mengeset variable lock menjadi 1 (agar proses lain tidak bisa
masuk) dan segera masuk critical section.

Jika variable lock bernilai 1, proses menunggu sampai nilai


variabel lock menjadi 0.

Kelemahan metode ini adalah ada kemungkinan kedua proses


mengecek variable lock secara bersamaan dan nilainya 0,
sehingga kedua proses masuk ke daerah kritis secara sama2. 14
Bila proses A & B,
Dijalankan sama2
Ada kemungkinan
proses A & B,
Masuk ke daerah kritis
secara
Bersama-sama karena
Nilai lock belum
berubah ke 1.
Kriteria 1 terlanggar , metode ini sama sekali
tidak bisa digunakan. 15
2. Metode untuk situasi tertentu
Metode ini sering disebut metode bergantian secara ketat
yang mengasumsikan proses-proses yang hendak masuk
critical section secara bergantian terus menerus.
metode ini menggunakan variable TURN dimana bila
bernilai 0 berarti proses 0 boleh masuk atau sedang
berada di daerah kritis. Bila variable turn bernilai 1
berarti proses 1 boleh masuk atau sedang berada daerah
kritis.

16
Kelemahan Metode ini dapat digambarkan dengan kasus sbb:

P(0) akan masuk ke daerah kritis bila nilai turn=0

P(1) akan masuk ke daerah kritis bila nilai turn=1

Suatu saat P(0) selesai dari daerah kritis maka di set turn=1 (artinya
P(1) boleh masuk).

Kebetulan P(0) ingin masuk Kembali ke daerah kritis, tetapi tidak


bisa karena turn sudah terlanjur di set = 1, dan P(1) kebetulan tidak
ingin masuk ke daerah kritis, sehingga tidak bisa merubah turn
menjadi nol.

Ini kasus pelanggaran ke2, dimana P1 di daerah non kritis


menghambat masuknya P0 ke daerah kritis. Oleh karena itu metode
ini tidak dapat digunakan.
17
3. Metode Busy Waiting
Yang dimaksud Metode Busy Waiting adalah proses-proses yang
menunggu, melakukan looping (busy waiting) sampai diperbolehkan
masuk ke daerah kritis , karena sudah tidak ada proses yang berada
di daerah kritis.

status proses P2 dan P3 adalah running


P2

P2, P3 sedang Daerah kritis


menunggu
P1
P3

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

Metode busy waiting baik dng menggunakan perangkat lunak maupun


perangkat keras , menyelesaikan masalah metode sebelumnya
1. Dapat menjamin mutex (daerah kritis hanya di akses oleh 1 proses) {
mengatasi kelemahan metode naif}
2. Dapat menjamin proses di luar daerah kritis tidak dapat menghambat
proses yang akan masuk ke daerah kritis (mengatasi kelemahan metode
naif untuk situasi tertentu)

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.

Metode ini mengakibatkan :


1.Pemroses tidak dapat beralih ke proses lain karena interupsi clock
dimatikan sehingga penjadual pun tidak dieksekusi. Karena penjadual
tidak beroperasi maka tidak terjadi alih proses.
2.Proses yang berada di daerah kritis dapat memakai memori bersama
tanpa takut terinvensi proses lain karena memang tidak ada proses lain
yang dieksekusi saat itu.

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

Kelemahan metode busy waiting:


1. tidak efisien karena selama loop atau menunggu, selalu melakukan
pengecekan, dan ini menggunakan waktu CPU (status CPU adalah
running). Kecuali metode pematian interupsi , karena metode itu
melock pengalihan proses,tetapi melanggar kritiria 4 yaitu tidak bisa
digunakan untuk lebih dari 1 prosesor.
2. Adanya busy waiting memungkinkan terjadi deadlock dan starvation.
Oleh Karena itu kelima metoda (djikstra,Peterson,pematian interupsi,
tsl, xchg) dipandang belum sempurna sebagai solusi terhadap masalah 31
mutex
Adanya busy waiting memungkinkan terjadi deadlock dan starvation bila
menggunakan penjadwalan berprioritas.
Berikut kasus dead lock/starvation pada metode busy waiting
Proses 1 dng prioritas Low masuk ke critical section (flag di set 1)
P1 belum sempat keluar dari critical section, jatah waktu proses P1
habis sehingga tetap flag=1, dan masuk P2 dengan prioritas H.
P2 mengecek status flag=1, sehingga tidak bisa masuk ke critical section
dan P1 tidak dapat jatah CPU sehingga tidak bisa keluar dari critical
section.
Deadlock : P1 dan P2 tidak bisa lanjut
P1 tidak bisaa keluar karena tidak
mendapat jatah CPU

P2 menunggu terus, Daerah kritis


Karena P1 tidak
P2 Bisa keluar dari P1
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.

Untuk menyempurnakan solusi, pada semaphore ditambahkan metode pematian


interupsi atau test and set lock, agar variable S lebih terjaga. Dengan kombinasi solusi
tersebut metode semaphore adalah yang paling sempurna mengatasi mutex.

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.

Proses untuk masuk ke daerah kritis.


Sebelum masuk critical section, proses melakukan down. Bila berhasil (nilai semaphore >
0 sebelum operasi down) maka proses masuk critical section. Bila tidak berhasil maka
proses diblok pada semaphore (masuk ke antrian waiting daerah kritis). Proses yang diblok
dapat melanjutkan jika proses yang berada di critical section keluar dan melakukan operasi
up dan menjadikan proses yang diblok menjadi ready dan berlanjut hingga operasi
downnya berhasil
34
Procedure Down Program Semaphore
If s>0 then s=s-1 Var s: integer
Else masukkan proses ke antrian dengan Begin
status block s=1
Process(0)
Down
End
Process(1) If s>0 then S=S-1
Procedure Up dst
End S<=0
s=s+1 Critical
pindahkan 1 proses ke antrian ready Proses diubah statusnya Section
End Menjadi ‘block’
Process(i)
Down
Enter_Critical Section S=S+1
Up
UP
Enter_Non_Critical Section
End Pindahkan 1 proses ke
Antrian ready , selanjutnya masuk ke 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

Anda mungkin juga menyukai