Anda di halaman 1dari 21

S E P T I A N C A H YA D I

SINKRONISASI PROSES

L ATA R B E L A K A N G
Proses-proses yang konkuren adalah
proses-proses (lebih dari satu) berada
pada saat yang sama. Proses-proses ini
dapat sepenuhnya tak bergantung
dengan yang lainnya, tapi dapat juga
saling berinteraksi.

Proses-proses yang berinteraksi


memerlukan sinkronisasi agar
terkendali dengan baik.

M A S A L A H PA D A M O D E L S H A R E D
M E M O RY
1. Proses-proses yang melakukan akses secara
konkuren pada data yang digunakan bersamasama menyebabkan data tidak konsisten
(inconsistence)
2. Pada model shared memory untuk
penyelesaian permasalahan bounded-buffer
paling banyak menyimpan n 1 item pada
buffer pada saat yang bersamaan.

S O LU S I M A S A L A H T E R S E B U T

Modifikasi kode producer- consumer dengan


menambahkan variabel counteryang diinisialisasi 0
dan dinaikkan setiap satu item baru ditambahkan
ke buffer.

A L G O R I T M A BO U N D E D -BU F F E R

#define BUFFER_SIZE 10
typedef struct {
... } item;
item buffer[BUFFER_SIZE]; int in = 0;
int out = 0;
intcounter=0;

Proses pada producerakan menambahkan satu nilai


variabel countersebagai berikut :
item nextProduced;
while (1) {
while (counter == BUFFER_SIZE)
; /* do nothing */ buffer[in] = nextProduced; in = (in + 1)
% BUFFER_SIZE; counter++;
}

Sebaliknya juga proses pada consumerakan menurunkan satu


nilai variabel countersebagai berikut :
item nextConsumed;
while (1) {
while (counter == 0)
; /* do nothing */
nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE;
counter;
}

P E R N YATA A N C O U N T E R
Pernyataan counter++ akan diimplementasikan
dalam bahasa mesin sebagai berikut :
register1 = counter
register1 = register1 + 1
counter = register1

Sedangkan pernyataan counter-- akan


diimplementasikan dalam bahasa mesin sebagai
berikut :
register1 = counter
register1 = register1 + 1
counter = register1

Pernyataan yang dijalankan adalah :


producer: register1 = counter (register1 = 5)
producer: register1 = register1 + 1
(register1 = 6)
consumer: register2 = counter (register2 =
5)
consumer: register2 = register2 1
(register2 = 4)
producer: counter = register1 (counter = 6)
consumer: counter = register2 (counter = 4)

Situasi dimana beberapa proses


mengakses dan memanipulasi data yang
digunakan bersama-sama secara
konkuren disebut dengan racecondition.

CRITICAL SECTION PROBLEM

Suatu system terdiri dari nproses dimana


semuanya berkompetisi menggunakan data
yang digunakan bersama-sama. Masingmasing proses mempunyai sebuah kode
segmen yang disebut dengan criticalsection

Gambaran penting dari sistem adalah, ketika


sebuah proses dijalankan di dalam criticalsection,
tidak ada proses lain yang diijinkan untuk
menjalankan criticalsection-nya.
Daerah kode yang mengimplementasikan perintah
ini disebut daerah entry.
Criticalsectionbiasanya diikuti oleh daerah exit.
Kode pengingat terletak di daerah remainder.

3 S YA R AT S O L U S I C R I T I C A L
SECTION

1. Mutual Exclusion
Apabila proses Pimenjalankan criticalsection-

nya, maka tidak ada proses lain yang dapat


menjalankan criticalsection.

3 S YA R AT S O L U S I C R I T I C A L
SECTION
2. Progress
Apabila tidak ada proses yang menjalankan

criticalsection-nya dan terdapat beberapa


proses yang akan memasuki criticalsection-nya,
maka hanya proses-proses itu yang tidak
diproses di dalam daerah pengingat (remainder)
dapat ikut berpartisipasi di dalam keputusan
proses mana yang akan memasuki critical
sectionselanjutnya, dan pemilihan ini tidak
dapat ditunda tiba-tiba.

3 S YA R AT S O L U S I C R I T I C A L
SECTION

3. Bounded Waiting
Terdapat batasan jumlah waktu yang diijinkan

oleh proses lain untuk memasuki criticalsection


setelah sebuah proses membuat permintaan
untuk memasuki criticalsection-nya dan sebelum
permintaan dikabulkan.

S T R U KT U R U M U M P R O S E S P I

ALGORITMA 1

ALGORITMA 2

ALGORITMA 3

A L G O R I T M A B A K E RY