Anda di halaman 1dari 35

SINKRONISASI

Kongkurensi (Concurrency)
• Proses-proses disebut mengalami kongkurensi jika proses-proses (lebih
dari satu proses) berada pada saat yang sama
• Kongkurensi dapat terjadi pada single processor (melalui
multiprogramming) maupun multiple processor (melalui multiprocessing
atau distributed processing)
Kongkurensi dapat timbul pada tiga kasus berikut
• Multiple application : Terjadi pergantian sejumlah job atau aplikasi secara
dinamik
• Structured application : sebagai penerapan disain modular, beberapa
aplikasi dapat diterapkan sebagai kumpulan dari proses-proses kongkuren
• Operating-system structure: sistem operasi diterapkan sebagai kumpulan
dari proses-proses kongkuren
Proses Kongkurensi
• Pada single processor proses-
proses dieksekusi secara
interleaved untuk
mewujudkan eksekusi yang
simultan
• Sedangkan pada multiple
processor proses-proses dapat
dieksekusi selain secara
interleaved juga dapat secara
overlap
3
Prinsip-prinsip Kongkurensi
Kongkurensi meliputi
• Alokasi waktu prosesor untuk proses-proses
• Pemakaian bersama (sharing) dan persaingan (competition) untuk mendapatkan
sumber daya
• Komunikasi antar proses
• Sinkronisasi aktivitas banyak proses

Masalah akibat kongkurensi : karena kecepatan eksekusi tidak dapat


diprediksi
Masalah kongkurensi pada single processor
• Pemakaian bersama sumber daya global
• Sistem operasi sulit mengoptimalkan alokasi sumber daya
• Sulitnya mencari kesalahan program
Contoh pemakaian bersama sumber daya global
• Jika dua proses menggunakan variabel global yang sama, serta
keduanya membaca dan menulis variabel itu maka urutan terjadinya
pembacaan dan penulisan terhadap variabel itu menjadi kritis (race
condition)

Contoh sistem operasi sulit mengoptimalkan alokasi sumber


daya
• Jika proses A meminta suatu chanel I/O tertentu dan kemudian
disuspend sebelum menggunakan channel tersebut. Jika sistem operasi
mengunci channel tersebut dan mencegahnya digunakan oleh proses
lain maka tindakan ini merupakan ketidakefisienan
Kepedulian Sistem Operasi
Disain dan bentuk manajemen sistem operasi yang bagaimana yang timbul
akibat kongkurensi?
1. Sistem operasi harus mampu menyimpan jejak dari proses-proses yang aktif
(menggunakan PCB)
2. Sistem operasi harus mengalokasi dan mengdealokasi beragam sumber daya untuk
setiap proses yang aktif.
Sumber daya meliputi :
- Processor time
- Memory
- Files
- I/O devices
3. Sistem operasi harus mampu memproteksi data dan sumber daya fisik dari suatu
proses agar tidak diganggu oleh proses yang lain
4. Hasil dari proses harus independen terhadap kecepatan, kecepatan eksekusi
tergantung dari proses kongkuren yang lain
Beberapa istilah pada kongkurensi
• Mutual Exclusion
• Deadlock
• Starvation
Mutual Exclusion
• Terdapat sumber daya yang tidak dapat dipakai bersama pada saat
bersamaan, misalnya printer.
• Sumber daya yang tidak dapat dipakai bersama ini disebut sumber
daya kritis. Bagian program yang menggunakan sumber kritis ini
disebut memasuki critical section.
• Hanya satu program yang diijinkan masuk critical region. Sistem
operasi menyediakan system call untuk hal ini
Deadlock
Ilustrasi Deadlock
Misalnya
– Dua proses, P1 dan P2
– Dua sumber daya kritis, R1 dan R2
– Proses P1 dan P2 harus mengakses kedua sumber daya
– Kondisi yang terjadi R1 diberikan ke P1, sedang R2 diberikan ke P2.
Karena untuk melanjutkan eksekusi memerlukan sumber daya
sekaligus maka kedua proses akan saling menunggu sumber daya
lain selamanya. Tak ada proses yang dapat melepaskan sumber
daya yang telah dipegangnya karena menunggu sumber daya lain
yang tak pernah diperolehnya.
Kedua proses dalam keadaan deadlock, tidak dapat membuat
kemajuan apapun
8
Starvation
Misalnya
• Terdapat tiga proses P1, P2 dan P3
• P1, P2, P3 memerlukan pengaksesan sumber daya R secara periodik
Skenario berikut 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 mengkakses 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 pergantian terus menerus antara P1 dan P3, maka P2
tidak pernah memperoleh pengaksesan sumber daya R, meski tidak ada
deadlock. Pada situasi ini P2 disebut mengalami starvation

9
Masalah critical section
• Critical section adalah suatu bagian yang berisi sejumlah variabel yang akan
dipakai bersama (sharing)
• Secara umum, penyelesaian critical section harus memenuhi 3 syarat
1. Mutual exclusion. Jika suatu proses sedang mengerjakan critical section,
maka tidak boleh ada proses lain yang masuk critical section tersebut
2. Progress. Jika tidak ada suatu proses yang mengerjakan critical section dan
ada beberapa proses yang akan masuk ke critical section, maka hanya proses
yang sedang berada pada entry-section saja yang boleh berkompetisi untuk
mengerjakan critical section
3. Busy waiting. Besarnya waktu tunggu dari suatu proses yang akan
memasuki critical section sejak proses itu meminta ijin untuk mengerjakan
critical section, hingga permintaan itu dipenuhi
Interaksi proses
• Telah ditunjukkan bahwa kongkurensi terjadi karena hasil aplikasi
independen dari multiprogramming, dari aplikasi multiple-process dan dari
penggunaan stuktur multiple-process pada sistem operasinya. Maka interaksi
antar proses akan dikelompokkan berdasarkan derajat kepedulian (degree of
awareness) suatu proses terhadap proses lain. Terdapat 3 derajat kepedulian
yaitu
1. Process unaware of each other :
Proses-proses independen yang tidak berniat untuk bekerja sama. Contohnya
multiprogramming dari beberapa proses independen bisa berupa batch job
atau bagian interaktif atau campurannya.
Meski proses-proses ini tidak bekerja sama tapi sistem operasi tetap
memperhatikan kompetisi sumber daya. Misal dua aplikasi ingin
mengakases file atau printer
yang sama maka sistem operasi harus mengaturnya
2. Processes indirectly aware of each other :
Proses-proses yang sebenarnya tidak perlu peduli dengan proses
lain tapi berbagi (sharing) akses untuk beberap obyek tertentu
seperti I/O buffer
3. Processes directly aware of each other
Proses-proses yang dapat berkomunikasi dengan proses yang lain.
Proses ini menampilkan kerja sama bukan kompetisi

Kompetisi dan kerjasama dapat berupa :


• Kompetisi antar proses untuk sumber daya
• Kerja sama antar proses dengan sharing
• Kerja sama antar proses dengan komunikasi
Kompetisi antar proses untuk sumber daya
• Dua atau lebih proses perlu untuk mengakses sebuah
sumber daya yang sama.
• Masing-masing proses tidak peduli dengan keberadaan
proses yang lain dan masing-masing proses tidak saling
mempengaruhi
• Jika dua proses ingin mengakses satu sumber daya
tunggal maka sistem operasi mengalokasikan untuk
salah satu proses dan mengharuskan proses lain
menunggu. Proses yang ditolak pengaksesannya jadi
Kerja sama antar proses dengan sharing
• Banyak proses mengakses variabel atau berkas yang dipakai bersama.
Proses-proses dapat menggunakan dan memperbarui data yang
dipakai bersama tanpa peduli proses yang lain
• Proses mengetahui bahwa proses-proses lain dapat juga mengakses
data yang sama. Proses-proses harus bekerja sama untuk menjamin
integritas data yang dipakai bersama tersebut
• Karena data disimpan pada sumber daya (devices, memory), maka
timbul masalah pengendalian mutual exclusion, deadlock dan
starvation.
• Data diakses dengan dua mode yaitu :Proses pembacaan dan
penulisan. Tapi hanya penulisan yang mutual exclusion
Kerja sama antar proses dengan komunikasi
• Pada saat proses bekerja sama, masing-masing proses peduli
dengan proses yang lain
• Komunikasi menyediakan sinkronisasi atau koordinasi beragam
aktivitas
• Komunikasi dapat dicirikan sebagai keberadaan pesan-pesan dalam
suatu urutan. Cara sederhana (primitive) untuk mengirim dan
menerima pesan disediakan oleh bahasa pemrograman atau oleh
kernel sistem operasi
• Karena tidak ada yang disharing maka tidak diperlukan
pengendalian mutual exclusion tapi masalah deadlock dan
starvation tetap ada.
Perlunya Mutual Exclusion
• Kesuksesan pemanfaatan kongkurensi antar proses terjadi karena
kemampuan mendefinisikan critical section dan menjamin mutual exclusion.
Setiap fasilitas yang mendukung kedua hal ini harus memenuhi persyaratan
– Penjaminan mutual exclusion : hanya satu proses pada suatu saat yang
diperbolehkan masuk ke critical section
– Proses yang halt di noncritical section harus tetap halt tanpa menganggu proses
yang lain
– Tidak boleh ada proses yang berniat mengakses critical section menunggu dalam
waktu yang tidak tentu. Tidak boleh ada deadlock atau starvation
– Saat tidak ada proses di critical section, proses yang ingin masuk ke critical
section tidak boleh menunggu
– Tidak ada asumsi mengenai kecepatan relatif proses dan jumlah proses
– Proses berada di critical section hanya untuk waktu yang
berhingga
Penjaminan Mutual Exclusion –
Software approaches
• Pendekatan perangkat lunak dapat digunakan untuk proses
kongkuren yang dilakukan pada single-processor maupun multi-
processor dengan main memory sharing
• Pada pendekatan ini diasumsikan mutual exclusion berupa
pengaksesan memory secara bersamaan (reading/writing) pada
alamat memory yang sama tanpa dukungan perangkat keras lain
• Algoritma dengan pendekatan ini :
- Algoritma Dekker (Dekker’s Algorithm)
- Algoritma Peterson (Peterson’s Algorithm)
Algoritma Dekker
• Dekker (Ahli matematik dari Belanda) membuat algoritma untuk mutual
exclusion pada dua proses. Algoritma ini akan memperlihatkan bug yang
sering terjadi pada program kongkuren
Cara pertama
• Setiap cara pada mutual exclusion didasari pada keeksklusifan penggunaan
hardware yaitu hanya satu akses terhadap alamat memory yang dapat terjadi
pada saat tertentu
• Terdapat dua proses P0 dan P1 yang akan mengakses critical section.
• Protokolnya adalah : setiap proses akan mengecek apakah sudah waktunya
masuk atau belum yaitu dengan melihat variabel turn apakah sudah sama
dengan nomor dirinya atau belum. Jika sudah berarti boleh ke critical region
jika belum tetap menunggu (busy waiting)
• Proses yang telah selesai di critical section akan mengubah variabel turn
ini untuk proses yang lain. Variabel turn sebagai shared global variable
• Shared global variable : var turn:0..1
Program dari kedua proses ini :
PROCESS 0 (P0) PROCESS 1 (P1)
. .
. .
while turn ≠0 do {nothing}; while turn ≠0 do {nothing};
<critical section>; <critical section>;
turn:=1 turn:=0
. .
• Proses yang satu tergantung proses yang lain bila salah satu proses
gagalmaka proses yang lain tidak dapat dikerjakan (blocked)
Cara Kedua
• Masing-masing proses mempunyai variabel sendiri
(flag). Suatu proses akan mengecek variabel global
(flag) milik proses yang lain. Bila tertulis false berarti
critical section tidak ada yang gunakan. Maka proses ini
akan menulis variabel globalnya menjadi true dan pergi
ke critical section. Setelah selesai proses ini kembali
dan mengubah variabel globalnya menjadi false
• Shared global variable :
var flag:array [0 .. 1] of boolean
yang diinisialisasi false
• Program dari kedua proses
Process 0 (P0) Process 1 (P1)
. .
. .
while flag[1] do {nothing}; while flag[0] do {nothing};
flag[0] := true; flag[1] := true;
<critical section>; <critical section>;
flag[0] := false; flag[1] := false;
. .
• Jika suatu proses diluar critical section gagal makan proses lain tidak
akan blocked bahkan proses ini dapat terus mengakses critical section
karena flag dari proses yang lain selalu false
• Tetapi jika suatu proses gagal di dalam critical section atau setelah
mengeset flagnya true dan gagal sebelum masuk critical section maka
proses yang lain akan blocked
• Jika suatu proses belum sempat mengubah flagnya menjadi true dan proses yang
lain terlanjur melihat bahwa flagnya adalah false maka akan ada dua program di
critical section.

P0 executes the while statement and finds flag[1] set to false


P1 executes the while statement and finds flag[0] set to false
P0 sets flag[0] to true and enters its critical section
P1 sets flag[1] to true and enters its critical section
Cara ketiga
Untuk memperbaiki cara kedua dilakukan pertukaran 2 baris
Process 0 (P0) Process 1 (P1)
flag[0] := true; flag[1] := true;
while flag[1] do {nothing}; while flag[0] do {nothing};
<critical section>; <critical section>;
flag[0] := false; flag[1] :=false
. .
• Jika kedua proses mengubah flagnya menjadi true sebelum salah satu proses
mengeksekusi pernyataan while maka setiap proses akan mengira ada proses
yang telah masuk critical section sehingga terjadi deadlock
Solusi yang tepat (Dekker’s Algorithm)
• Pada cara ini ditambahkan kembali variabel turn yang menentukan proses
mana yang berhak masuk ke critical section.
• Saat proses P0 ingin masuk ke critical sectionnya, P0 mengubah flagnya
menjadi true dan kemudian mengecek flag di P1. Jika false maka P0 segera
ke critical section. Jika tidak P0 akan konsultasi ke juri. Jika P0 menemukan
turn=0 maka ia tahu bahwa sudah waktunya untuk bersikeras dan mengecek
secara periodik ke P1.
• P1 mencatat bahwa sudah waktunya untuk menulis false pada flagnya dan
membiarkan P0 masuk ke critical section. Setelah P0 masuk critical section
dia akan kembali dan mengubah flagnya menjadi false dan mengubah turn
Dekker’s Algorithm Procedure P1;
Begin
Var flag: array [0..1] of boolean; repeat
turn: 0..1; flag[1] := true;
Procedure P0; while flag[0] do if turn = 0 then
begin begin
repeat flag[1] := false;
flag[0] := true; while turn =0 do {nothing}
while flag[1] do if turn = 1 then flag[1] := true
begin end;
<critical section>;
flag[0] :=false;
turn := 0;
while turn=1 do {nothing}
flag[1] := false;
flag[0] :=true
<remainder>
end;
forever
<critical section>; end;
turn := 1; begin
Algoritma Peterson
• Algoritma ini dapat digunakan untuk 2 atau lebih proses
kongkuren
• Misal proses P0 mengubah flag[0] menjadi true, P1 tidak dapat
masuk ke critical section. Jika P1 telah berada di dalam critical
section maka flag[1] = true dan P0 terblock dan tidak masuk
ke critical section.
• Deadlock dicegah. Jika P0 terblock pada looping whilenya.
Yaitu saat flag[1]=true dan turn=1. P0 dapat masuk critical
section saat flag[1] = false atau turn = 0.
Hal yang tidak mungkin terjadi pada Algoritma
Peterson
• P1 tidak berminat pada critical section.
• P1 menunggu terus untuk masuk critical section.
Karena jika turn=1 P1 dapat masuk critical section
• P1 memonopoli critical section. Jika P1
diwajibkan memberi P0 kesempatan dengan
mengubah turn = 0 sebelum masuk critical section.
Algoritma Peterson untuk 2 proses procedure P1;
var flag : array [0..1] of boolean; begin
turn: 0..1; repeat
procedure P0; flag[1]:= true;
turn := 0;
begin
while flag[0] and turn = 0 do {nothing};
repeat
<critical section>;
flag[0] := true; flag[1] := false;
turn := 1; <remainder>
while flag[1] and turn = 1 do {nothing} forever
<critical section>; end;
flag[0] := false; begin
<remainder> flag[0] := false;
forever flage[1] := false;
end; turn :=1;
parbegin
Penjaminan Mutual Exclusion –
Hardware approaches
• Pada single processor, proses-proses yang kongkuren tidak dapat overlap
hanya terjadi interleave. Sebuah proses akan terus berjalan sampai
diinterrupt. Sehingga dengan mengatur interrupt mutual exclusion dapat
terjadi. Sedangkan pada multiprosesor interrupt tidak menjamin mutual
exclusion karena beberapa proses dapat dieksekusi bersamaan waktunya
• Pada sistem multiprocessor yang memakai memori bersama, pengaksesan
suatu memori yang sama pada saat yang sama dijaga pada tingkat
perangkat keras.
• Perangkat keras menyediakan instruksi mesin khusus yang tidak dapat
diinterrupt (atomic instruction). Karena hanya berada pada satu siklus
instruksi saat di fetch
Instruksi mesin khusus• Instruksi akan menguji (test) nilai
Akan dibahas dua instruksi khusus
yaitu : dari argumen I. Jika nilainya 0
• Test and Set Instruction maka akan diganti dengan 1 dan
menghasilkan true. Sedangkan
• Exchange Instruction jika tidak nilainya tidak akan
Test and Set Instruction diubah dan menghasilkan false.
Didefinisikan sebagai : • Fungsi testset berjalan otomatis
function testset (var i: integer): dan tidak dapat diinterrupt
boolean;
begin
if i = 0 then
begin
i := 1;
testset := true;
Exchange Instruction • Instruksi menukar isi dari
• Didefinisikan sebagai: sebuah register dengan
procedure exchange (var yang terdapat pada suatu
r:register; var m:memory) memori.
var temp; • Selama eksekusi instruksi,
begin akses ke lokasi memori
diblocked terhadap segala
temp:=m;
instruksi lain yang
m:= r; mengarah ke lokasi
r:= temp; tersebut.
End.
(A) TEST AND SET INSTRUCTION (B) EXCHANGE INSTRUCTION
Procedure mutual exclusion Procedure mutual exclusion
const n = …; (*number of processees*) const n = …; (*number of processees*)
var bolt: integer; var bolt: integer;
procedure P (i: integer); procedure P (i: integer);
begin var keyi : integer;
repeat begin
repeat {nothing} until testset (bolt) repeat
<critical section> keyi := 1;
bolt:= 0; repeat exchange (keyi , bolt) until keyi =0;
<remainder> <critical section>
forever exchange (keyi , bolt)
end; <remainder>
begin (* main program *) forever
bolt := 0; end;
parbegin begin (* main program *)
P(1); bolt := 0; 32
Keuntungan Pendekatan Instruksi Mesin
• Dapat diterapkan pada beberapa proses baik pada single
processor maupun multiple processor dengan pemakaian
bersama (sharing) main memory)
• Mudah diverifikasi
• Mendukung multiple critical section, setiap critical section dapat
mendefinisikan variabelnya sendiri
Kelemahan Pendekatan Instruksi Mesin
• Terjadi Busy waiting, saat proses menunggu critical section
proses terus mengkonsumsi waktu prosesor
• Mungkin terjadi starvation
• Mungkin terjadi deadlock
Semaphore
• Semaphore adalah pendekatan yang dikemukakan Dijkstra. Semaphore
merupakan pendekatan dari Sistem Operasi dan mekanisme bahasa
pemrograman. Prinsip semaphore sebagai berikut :
Dua proses atau lebih dapat bekerja sama dengan menggunakan sinyal
sederhana. Proses dapat dipaksa berhenti pada suatu tempat tertentu
sampai menerima sinyal khusus ini. Variabel khusus untuk pensinyalan
ini disebut semaphore
• Untuk mengirim sinyal dengan semaphore, sebuah proses mengeksekusi
primitive signal
Untuk menerima sinyal dengan semaphore, sebuah proses mengeksekusi
primitive wait
Jika sinyal yang bersangkutan belum ditransmisikan, proses ter-suspend
sampai transmisi terjadi
Untuk memperoleh efek yang diinginkan, kita dapat memandang sempahore
sebagai variabel yang memiliki nilai integer (S) dengan tiga kondisi berikut :
1. Sebuah semaphore diinisialisasi dengan nilai tidak negatif
2. Wait operation menurunkan nilai semaphore. Jika nilainya negatif maka
proses yang mengeksekusi wait akan terblock.
While S≤ 0 do nothing;
S:= S-1;
if S < 0 then block(P)
3. Signal operation menaikkan nilai semaphore. Jika nilainya tidak positif
maka proses yang terblock karena wait operation akan ter-unblock
S:= S+1
if S ≤ 0 then wakeup(P)

Anda mungkin juga menyukai