Proses Sinkronisasi - PowerPoint PPT Presentation

About This Presentation
Title:

Proses Sinkronisasi

Description:

Proses Sinkronisasi Semaphore Operasi Down (Wait) Operasi ini menurunkan menilai semaphore Jika nilai semaphore menjadi non-positif maka proses yang ... – PowerPoint PPT presentation

Number of Views:160
Avg rating:3.0/5.0
Slides: 54
Provided by: Eriz151
Category:

less

Transcript and Presenter's Notes

Title: Proses Sinkronisasi


1
Proses Sinkronisasi
2
Pembahasan
  • Background
  • Problem Critical-Section
  • Sinkronisasi Hardware
  • Semaphore
  • Problem Klasik Sinkronisasi
  • Monitor

3
Background
  • Akses secara bersamaan pada data yang di-sharing
    mengakibatkan data menjadi inkonsistensi
  • Maintain data yang konsisten membutuhkan
    mekanisme untuk memastikan bahwa eksekusi proses
    dari cooperating proses dilakukan secara
    berurutan
  • Shared-memory solution to bounded-butter problem
    (Chapter 4) allows at most n 1 items in buffer
    at the same time. A solution, where all N
    buffers are used is not simple.
  • Solusi shared-memory pada problem bounded-buffer
    (Consumer-Producer) memungkinkan paling banyak
    n-1 item dalam buffer pada waktu yang sama.
  • Misal kita memodifikasi code producer-consumer
    dengan menambahkan variabel counter,
    diinisialisasi 0 dan di-increment setiap ada item
    baru yang ditambahkan ke dalam buffer

4
Bounded-Buffer (1)
  • Shared data
  • define BUFFER_SIZE 10
  • typedef struct
  • . . .
  • item
  • item bufferBUFFER_SIZE
  • int in 0
  • int out 0
  • int counter 0

5
Bounded-Buffer (2)
  • Producer process
  • item nextProduced
  • while (1)
  • while (counter BUFFER_SIZE)
  • / do nothing /
  • bufferin nextProduced
  • in (in 1) BUFFER_SIZE
  • counter

6
Bounded-Buffer (3)
  • Consumer process
  • item nextConsumed
  • while (1)
  • while (counter 0)
  • / do nothing /
  • nextConsumed bufferout
  • out (out 1) BUFFER_SIZE
  • counter--

7
Bounded-Buffer (4)
  • Statement countercounter--dijalankan
    secara atomic.
  • Operasi atomic adalah operasi yang menyelesaikan
    program didalamnya tanpa interupsi.

8
Bounded-Buffer (5)
  • Statement count diimplementasikan dalam
    bahasa mesin register1 counter
  • register1 register1 1counter register1
  • Statement count-- diimplementasikan dalam
    bahasa mesin
  • register2 counterregister2 register2
    1counter register2

9
Bounded-Buffer (6)
  • If both the producer and consumer attempt to
    update the buffer concurrently, the assembly
    language statements may get interleaved.
  • Interleaving depends upon how the producer and
    consumer processes are scheduled.

10
Bounded-Buffer (7)
  • Misal counter diinisialisasi 5. Interleaving
    statemen 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)
  • Nilai counter bisa 4 atau 6, dimana seharusnya
    adalah 5.

11
Race Condition (1)
  • Race condition adalah situasi dimana beberapa
    proses mengakses dan memanipulasi data bersama
    pada saat yang bersamaan. Nilai akhir dari data
    bersama tersebut tergantung pada proses yang
    terakhir selesai.
  • Untuk mencegah race condition proses-proses yang
    berjalan bersamaan harus disinkronisasi
    (synchronized).

12
Contoh Print Spooler
  • Ketika sebuah proses ingin mencetak sebuah berkas
    (file), proses tersebut memasukkan nama berkas ke
    dalam spooler direktori khusus. Proses lain,
    printer daemon, secara periodik memeriksa untuk
    mengetahui jika ada banyak berkas yang akan
    dicetak, dan jika ada berkas yang sudah dicetak
    dihilangkan nama berkasnya dari direktori.
  • Out penunjuk berkas berikutnya untuk dicetak
  • In menunjuk slot kosong di direktori

13
Race Condition (2)
14
Problem Critical-Section
  • Bagian dari program dimana shared memory diakses
    disebut critical section atau critical region
  • n proses berkompetisi untuk menggunakan shared
    data
  • Masing-masing memiliki code segment, dinamakan
    critical section dimana shared data diakses
  • Problem bagaimana memastikan satu proses
    dieksekusi dalam critical section, dan tidak ada
    proses lain yang boleh dieksekusi dalam critical
    section tersebut

15
Solusi Problem Critical-Section (1)
  • 4 kondisi solusi yang baik
  • Tidak ada dua proses secara bersamaan masuk ke
    dalam critical section
  • Tidak ada asumsi mengenai kecepatan atau jumlah
    CPU
  • Tidak ada proses yang berjalan di luar critical
    section yang dapat mem-blok proses lain
  • Tidak ada proses yang menunggu selamanya untuk
    masuk critical section

16
Solusi Problem Critical-Section (2)
  • Mutual Exclusion. Jika proses Pi dieksekusi dalam
    critical section, maka tidak ada proses lain
    dapat dieksekusi dalam critical section tersebut.
  • Progress. Artinya ketika tidak ada proses yang
    menggunakan critical section dan ada
    proses-proses yang ingin menggunakan critical
    section tersebut, maka harus ada proses yang
    menggunakan critical section tersebut.
  • Bounded Waiting. Maksud dari Bounded Waiting
    adalah setiap proses yang menunggu menggunakan
    critical section, maka proses-proses yang
    menunggu tersebut dijamin suatu saat akan
    menggunakan critical section. Dijamin tidak ada
    thread yang mengalami starvation proses
    seolah-olah berhenti, menunggu request akses ke
    critical section diperbolehkan.

17
Komponen Critical Section
  • Entry section kode yang digunakan untuk masuk
    ke dalam critical section.
  • Critical section kode dimana hanya ada satu
    proses yang dapat dieksekusi dalam satu waktu.
  • Exit section akhir dari critical section,
    mengijinkan proses lain.
  • Remainder section kode istirahat setelah masuk
    ke critical section.

18
Aturan Critical-Section
  • Solusi yang diberikan harus memenuhi permintaan
    berikut
  • Mutual exclusion
  • Deadlock free
  • Starvation free

19
Critical Region
20
Pendekatan Solusi Proses Sinkronisasi
  • Solusi Software
  • Tanpa sinkronisasi
  • Dengan sinkronisasi
  • Low-level primitif semaphore
  • High-level primitif monitors
  • Solusi Hardware

21
Mutual Exclusion
  • Tiga kondisi untuk menentukan mutual exclusion
  • Tidak ada dua proses yang pada saat bersamaan
    berada dalam critical region
  • Tidak ada proses yang berjalan diluar critical
    region yang bisa menghambat proses lain
  • Tidak ada proses yang tidak bisa masuk ke
    critical region

22
Cara Pemecahan Masalah
  • Hanya dua proses , P0 and P1
  • Struktur umum dari proses adalah Pi (proses lain
    Pj)
  • do
  • entry section
  • critical section
  • exit section
  • reminder section
  • while (1)
  • Proses-proses dapat share variabel untuk
    sinkronisasi

23
Algoritma 1
  • Shared variabel
  • int turninitially turn 0
  • turn i ? Pi dapat masuk ke dalam critical
    section
  • Process Pi
  • do
  • while (turn ! i)
  • critical section
  • turn j
  • reminder section
  • while (1)
  • Memenuhi mutual exclusion, tapi tidak menuhi
    progres

24
Algoritma 2 (1)
  • Menggunakan flag untuk setiap proses dan
    memeriksa flag proses yang lain dan tidak akan
    masuk critical section bila ada proses lain yang
    sedang masuk.

25
Algoritma 2 (2)
  • Shared variabel
  • boolean flag2initially flag 0 flag 1
    false.
  • flag i true ? Pi siap untuk masuk ke dalam
    critical section
  • Process Pi
  • do
  • flagi true while (flagj)
    critical section
  • flag i false
  • remainder section
  • while (1)
  • Memenuhi mutual exclusion, tapi tidak menuhi
    progres

26
Algoritma 3 (1)
  • Flag untuk meminta ijin masuk
  • Setiap proses menge-set sebuah flag untuk meminta
    ijin masuk. Lalu setiap proses men-toggle bit
    untuk mengijinkan proses yang lain untuk yang
    pertama
  • Kombinasi shared variabel algoritma 1 2

27
Algoritma 3 (2)
  • Process Pi
  • do
  • flag i true turn j while (flag j
    and turn j)
  • critical section
  • flag i false
  • remainder section
  • while (1)
  • Memenuhi ketiga persyaratan, memecahkan masalah
    critical-section untuk kedua proses.

28
Algoritma Bakery (1)
Critical section untu n proses
  • Sebelum masuk ke dalam critical section, proses
    menerima sebuah nomor. Pemegang nomor yang
    terkecil masuk ke critical section.
  • Jika ada dua proses atau lebih (Pi and Pj)
    menerima nomor sama, maka proses dengan indeks
    terkecil (i lt j) yang dilayani lebih dulu untuk
    masuk ke critical section. Misal Pi dilayani
    lebih dulu, baru kemudian Pj.
  • Skema penomoran selalu naik secara berurut,
    contoh 1,2,3,3,3,3,4,5...

29
Algoritma Bakery (2)
  • Shared data
  • boolean choosingn
  • int numbern
  • Struktur data masing-masing diinisialisai false
    dan 0.

30
Algoritma Bakery (3)
  • Algoritma
  • do
  • choosingi true
  • numberi max(number0, number1, , number
    n 1)1
  • choosingi false
  • for (j 0 j lt n j)
  • while (choosingj)
  • while ((numberj ! 0) (numberj,j lt
    numberi,i))
  • critical section
  • numberi 0
  • remainder section
  • while (1)

31
Sinkronisasi Hardware
  • Disabling Interrupt hanya untuk uniprosesor
    saja
  • Atomic test and set mengembalikan parameter dan
    menge-set parameter ke atomic
  • Test and modify the content of a word atomically
  • boolean TestAndSet(boolean target)
  • boolean rv target
  • tqrget true
  • return rv

32
Semaphore (1)
  • Semaphore adalah pendekatan yang diajukan oleh
    Djikstra
  • Prinsipnya dua proses atau lebih dapat
    bekerjasama dengan menggunakan penanda-penanda
    sederhana.
  • Variabel khusus untuk penanda disebut semaphore

33
Semaphore (2)
  • Sifat-sifat semaphore
  • Dapat diinisialisasi dengan nilai non-negatif
  • Terdapat dua operasi Down (Wait) dan Up
    (Signal)
  • Operasi Down dan Up adalah atomic, tak dapat
    diinterupsi sebelum diselesaikan.

34
Semaphore Operasi Down (Wait)
  • Operasi ini menurunkan menilai semaphore
  • Jika nilai semaphore menjadi non-positif maka
    proses yang mengeksekusinya di-block

35
Semaphore Operasi Up (Signal)
  • Operasi ini menaikkan menilai semaphore
  • Jika satu proses atau lebih di-block pada
    semaphore tidak dapat menyelesaikan operasi Down,
    maka salah satu dipilih oleh sistem dan
    menyelesaikan operasi Down-nya. Pemilihan proses
    dilakukan secara acak.

36
Definisi Klasik Wait Signal
  • Wait(S)
  • while S lt 0 do noop / busy wait! /
  • S S 1 / S gt 0 /
  • Signal (S)
  • S S 1

37
Implementasi Blocking pada Semaphore
  • Semaphore S memiliki nilai (S.val), dan suatu
    thread list (S.list).
  • Wait (S) / Down(S)
  • S.val S.val - 1
  • If S.val lt 0 / negative value of S.val /
  • add calling thread to S.list /
    is waiting threads /
  • block / sleep /
  • Signal (S) / Up(S)
  • S.val S.val 1
  • If S.val lt 0
  • remove a thread T from S.list
  • wakeup (T)

38
Problem Klasik pada Sinkronisasi
  • Ada tiga hal yang selalu menjadi masalah pada
    sinkronisasi
  • Problem Bounded Buffer
  • Problem Dining Philosopher
  • Problem Sleeping Barber
  • Problem Readers and Writers

39
Problem Bounded Buffer
  • Permasalahan bagaimana jika dua proses berbeda,
    yaitu produsen dan konsumen, berusaha mengakses
    buffer tersebut dalam waktu bersamaan.
  • Producer and consumer
  • are separate threads

40
Is this a valid solution?
0
n-1
Global variables char bufn int InP 0
// place to add int OutP 0 // place to
get int count
1
2

41
Solusi Menggunakan Semaphore
Global variables semaphore full_buffs 0
semaphore empty_buffs n char buffn int
InP, OutP
  • 0 thread producer
  • while(1)
  • // Produce char c...
  • down(empty_buffs)
  • bufInP c
  • InP InP 1 mod n
  • up(full_buffs)
  • 7
  • 8

42
Problem Dining Philosophers
  • Lima filosof duduk dalam satu meja
  • Satu garpu terletak diantara masing-masing
    filosof
  • Saat makan membutuhkan 2 garpu
  • Bagaimana mencegah deadlock ?

Each philosopher is modeled with a thread
while(TRUE) Think() Grab first fork
Grab second fork Eat() Put down first
fork Put down second fork
43
Is this a valid solution?
define N 5 Philosopher() while(TRUE)
Think() take_fork(i) take_fork((i1)
N) Eat() put_fork(i)
put_fork((i1) N)
44
Procedure Mengambil Garpu
// only called with mutex set! test(int i) if
(statei HUNGRY stateLEFT ! EATING
stateRIGHT ! EATING) statei
EATING signal(semi)
int stateN semaphore mutex 1 semaphore semi
take_forks(int i) wait(mutex) state i
HUNGRY test(i) signal(mutex)
wait(semi)
45
Procedure Meletakkan Garpu
// only called with mutex set! test(int i) if
(statei HUNGRY stateLEFT ! EATING
stateRIGHT ! EATING) statei
EATING signal(semi)
int stateN semaphore mutex 1 semaphore semi
put_forks(int i) wait(mutex) state i
THINKING test(LEFT) test(RIGHT)
signal(mutex)
46
Problem Sleeping Barber (1)
47
Problem Sleeping Barber (2)
  • Barber
  • Ketika ada orang yang menunggu untuk potong
    rambut, letakkan satu orang ke kursi, dan
    memotong rambut
  • Jika sudah selesai, pindah ke pelanggan
    berikutnya
  • Jika tidak ada pelanggan maka tidur, sampai ada
    pelanggan yang datang
  • Customer
  • Jika tukang potong rambut tidur, bangunkan barber
  • Jika ada orang yang sedang potong rambut, tunggu
    barber dengan duduk di kursi tunggu
  • Jika kursi tunggu penuh, tinggalkan toko

48
Design Solusi
  • Bagaimana kita memodelkan barber dan customer ?
  • What state variables do we need?
  • Variabel keadaan seperti apa yang kita butuhkan ?
  • .. dan yang mana di-share ?
  • . dan bagaimana kita akan memproteksinya ?
  • Bagaimana membuat barber tidur ?
  • Bagaimana membuat barber bangun ?
  • Bagaimana membuat customer menunggu ?
  • What problems do we need to look out for?

49
Is this a good solution?
const CHAIRS 5 var customers Semaphore
barbers Semaphore lock Mutex
numWaiting int 0
Customer Thread Lock(lock) if numWaiting lt
CHAIRS numWaiting numWaiting1
Signal(customers) Unlock(lock)
Wait(barbers) GetHaircut() else -- give up
go home Unlock(lock) endIf
Barber Thread while true Wait(customers)
Lock(lock) numWaiting numWaiting-1
Signal(barbers) Unlock(lock) CutHair()
endWhile
50
Problem Readers and Writers
  • Banyak reader dan writer ingin mengakses suatu
    database yang sama (masing-masing satu thread)
  • Banyak reader dapat diproses secara bersamaan
  • Writer harus di-sinkronisasi dengan reader dan
    writer yang lain
  • Hanya satu writer pada satu waktu !
  • Ketika seseorang ingin menulis, harus tidak ada
    reader !
  • Tujuan
  • Memaksimumkan concurrency.
  • Mencegah starvation.

51
Design Solusi
  • Bagaimana membuat model readers dan writers ?
  • Bagaimana variabel keadaan yang kita perlukan ?
  • .. dan yang mana di-share ?
  • . dan bagaimana kita akan memproteksinya ?
  • Bagaimana membuat writers menunggu ?
  • Bagaimana membuat writer bangun ?
  • Bagaimana membuat readers menunggu ?
  • Bagaimana membuat readers bangun ?

52
Is this a valid solution to readers writers?
Reader Thread while true Lock(mut) rc
rc 1 if rc 1 Wait(db) endIf
Unlock(mut) ... Read shared data...
Lock(mut) rc rc - 1 if rc 0
Signal(db) endIf Unlock(mut) ...
Remainder Section... endWhile
var mut Mutex unlocked db Semaphore 1
rc int 0
Writer Thread while true ...Remainder
Section... Wait(db) ...Write shared
data... Signal(db) endWhile
53
SEKIAN ...
Write a Comment
User Comments (0)
About PowerShow.com