Anda di halaman 1dari 50

SISTEM OPERASI

MATERI 4:
Konkurensi

08/10/2020 1
Tujuan
• Definisi konkurensi
• Race Condition
• Semaphore
• Mutual Exclusion

08/10/2020 2
Pendahuluan
• Proses-proses dikatakan konkuren jika lebih dari satu proses ada pada
saat yang sama.
• Proses yang konkuren dapat sepenuhnya tak bergantung dengan proses
lain namun dapat juga saling berinteraksi.
• Proses yang berinteraksi memerlukan sinkronisasi agar terkendali
dengan baik.
• Menjadi penting ketika seluruh sistem adalah multiprogramming atau
multithreading serta menuju pemrosesan tersebar.
KONKURENSI

08/10/2020 4
Konkurensi
• Dari textbook:

08/10/2020 5
Concurrency
Arises in Three Different Contexts:
Multiple
Applications Structured
Applications
Operating
Sistem System Structure
multiprogramming Perluasan prinsip
memungkinkan perancangan
banyak modular dan
aplikasi/proses pemrograman
dijalankan di satu terstruktur yakni
pemroses OS themselves
suatu aplikasi dapat implemented as a
secara efektif set of processes or
diimplementasikan threads
sebagai sekumpulan
proses.
Table 5.1

Some Key
Terms Related
to
Concurrency
Masalah pada proses konkuren
• Mutual exclusion
• persoalan untuk menjamin hanya satu proses yang
mengakses sumber daya pada suatu interval waktu tertentu.
• Deadlock
• Proses yang menunggu suatu kejadian yang tidak akan
pernah terjadi.
• Startvation
• keadaan dimana pemberian akses bergantian terus-
menerus,dan ada suatu proses yang tidak mendapatkan
gilirannya
• Sinkronisasi
• proses pengaturan jalannya beberapa proses pada saat yang
bersamaan
Implementasi Konkurensi
1. Hardware
- Interrupt disabling
- Atomic instruction

2. Software
- Semaphore
- Monitor
- Message Passing

08/10/2020 9
Interrupt Disable
• Setting di CPU,
• Uniprocessing sistem,
• Cenderung mudah diimplementasikan.

08/10/2020 10
Atomic Instruction
Memiliki 2 cara:
1. Compare and swap instruction, dan
2. Exchange Instruction.

08/10/2020 11
Figure 5.2
Hardware Support for Mutual Exclusion

/ * pr ogr am mutualexclusion */ / * pr ogr am mutualexclusion */


c ons t i nt n = /* number of processes */; i nt c ons t n = /* number of processes*/;
i nt bolt; i nt bolt;
v oi d P(i nt i) voi d P(i nt i)
{ {
whi l e (true) { whi l e ( true) {
whi l e (compare_and_swap(&bolt, 0, 1) == 1) i nt keyi = 1;
/* do nothing */; do exchange (&keyi, &bolt)
/* critical section */; whi l e (keyi != 0);
bolt = 0; /* critical section */;
/* remainder */; bolt = 0;
} /* remainder */;
} }
v oi d mai n( ) }
{ voi d mai n( )
bolt = 0; {
par be g i n ( P(1), P(2), . . . ,P(n)); bolt = 0;
par be g i n ( P(1), P(2), . . ., P(n));
} }

(a) Compare and swap instruction (b) Exchange instruction


Kesulitan Konkurensi
• Pemakaian bersama sumber daya global
• Memungkinkan keadaan kritis saat pembacaan dan penulisan variabel atau
data bersama.
• Pengelolaan alokasi sumber daya agar optimal
• Ketika suatu proses menggunakan sumber daya kemudian di tunda, dan jika
SO memiliki kebijakan mengunci sumber daya untuk proses lain, dlm hal ini
menghasilkan inefisiensi sistem komputer.
• Pencarian kesalahan pemrograman
• Pencarian kesalahan program kongkuren lebih sulit dari program sequent.
Race Condition

08/10/2020 14
Non-determinism
• Konkuren program biasanya bersifat non-determinism (yaitu: hanya
dengan melihat kode saja, hasilnya tidak bisa ditentukan; hasil
program ditentukan oleh urutan eksekusi)

08/10/2020 15
Contoh
• Apa hasil akhir dari program ini?
• Karena 2 thread berjalan secara konkuren, urutan eksekusi tergantung
dari penjadwalan OS

08/10/2020 16
Race Condition

08/10/2020 17
Shared variable
• Pada thread, umumnya terdapat shared variable
• Pada C disebut global variabel

08/10/2020 18
Contoh
• Apa hasil dari program ini?

08/10/2020 19
Permasalah
• Adakah masalah pada program ini? Count adalah shared variable
• Jika sudah dinaikkan oleh A maka B harus melanjutkannya bukan
mulai dari awal lagi

08/10/2020 20
Detail
• Urutan seperti apa yang menyebabkan hasilnya salah?

08/10/2020 21
Semaphore

08/10/2020 22
Semaphore
• Diciptakan oleh Dijkstra
• Hanya terdapat 3 operasi: inisiasi(), wait() dan signal()

08/10/2020 23
Cara Kerja
1. Semaphore diinisialisasi dengan nonnegatif integer.
2. Operasi semWait() akan decrement nilai semaphore. Jika nilai
semaphore negatif, proses yang mengeksekusi semWait() akan
block. Jika tidak, lanjutkan eksekusi biasa.
3. Operasi semSignal() akan increment nilai semaphore. Jika nilai
semaphore kurang atau sama dengan nol maka proses yang diblock
oleh semWait() akan diunblock.

08/10/2020 24
08/10/2020 25
Critical Section
• Critical section = bagian instruksi yang tidak boleh disela karena
sedang mengakses shared resource.
• Tidak boleh disela karena jika disela maka output program akan salah

08/10/2020 26
Mutual exclusion
• Event A dan B tidak boleh terjadi secara bersamaan
• Mutual exclusion = hanya ada satu proses yang berjalan dan tidak
boleh disela karena sedang mengakses shared resource

08/10/2020 27
Tanpa Mutex
A1 statement B1 statement
A2 wolski.balance = B2 wolski.balance =
wolski balance - 200 wolski balance - 200
A3 statement B3 statement

balance = 1000

08/10/2020 28
Tanpa Mutex
A1 statement B1 statement
A2 wolski.balance = B2 wolski.balance =
wolski balance - 200 wolski balance - 200
A3 statement B3 statement

balance = 1000

08/10/2020 29
Tanpa Mutex
A1 statement B1 statement
A2 wolski.balance = B2 wolski.balance =
wolski balance - 200 wolski balance - 200
A3 statement B3 statement

balance = 1000

08/10/2020 30
Tanpa Mutex
A1 statement B1 statement
A2 wolski.balance = B2 wolski.balance =
wolski balance - 200 wolski balance - 200
A3 statement B3 statement

balance = 800

08/10/2020 31
Tanpa Mutex
A1 statement B1 statement
A2 wolski.balance = B2 wolski.balance =
wolski balance - 200 wolski balance - 200
A3 statement B3 statement

balance = 800

08/10/2020 32
Mutex
• Semaphore diinisasi dengan 1
• Bagian critical section diapit antara wait() dan signal()

08/10/2020 33
Contoh Mutual Exclusion

Thread A Thread B
• wait() • wait()
# critical section # critical section
count = count + 1 count = count + 1
# critical section # critical section
• signal() • signal()

08/10/2020 34
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 1000
mutex = 1
08/10/2020 35
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 1000
mutex = 1
08/10/2020 36
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 1000
mutex = 0
08/10/2020 37
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 800
mutex = 0
08/10/2020 38
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 800
mutex = 0
08/10/2020 39
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 800
mutex = -1
08/10/2020 40
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 800
mutex = -1
08/10/2020 41
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 800
mutex = 0
08/10/2020 42
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 800
mutex = 0
08/10/2020 43
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 800
mutex = 0
08/10/2020 44
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 600
mutex = 0
08/10/2020 45
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 600
mutex = 1
08/10/2020 46
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 600
mutex = 1
08/10/2020 47
Mutex
A1 statement B1 statement
A2 mutex.wait() B2 mutex.wait()
A3 wolski.balance = B3 wolski.balance =
wolski balance - 200 wolski balance - 200
A4 mutex.signal() B4 mutex.signal()
A5 statement B5 statement

balance = 600
Success!!
08/10/2020 48
Figure 5.6
Mutual Exclusion Using Semaphores
Queue for Value of
semaphore lock semaphore lock A B C
Critical
1 region

Normal
semWait(lock)
execution
0
Blocked on
semWait(lock)
semaphore
B –1 lock

semWait(lock)

C B –2
semSignal(lock)

C –1

semSignal(lock)

semSignal(lock)

1
Note that normal
execution can
proceed in parallel
but that critical
regions are serialized.

Figure 5.7 Processes Accessing Shared Data


Protected by a Semaphore

Anda mungkin juga menyukai