Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Sinkronisasi Proses. Materi Latar Belakang Masalah Critical Section Problem Peterson's Solution Sinkronisasi dengan Hardware Mutex Semaphore Problem Klasik.

Presentasi serupa


Presentasi berjudul: "Sinkronisasi Proses. Materi Latar Belakang Masalah Critical Section Problem Peterson's Solution Sinkronisasi dengan Hardware Mutex Semaphore Problem Klasik."— Transcript presentasi:

1 Sinkronisasi Proses

2 Materi Latar Belakang Masalah Critical Section Problem Peterson's Solution Sinkronisasi dengan Hardware Mutex Semaphore Problem Klasik Sinkronisasi Monitor Contoh pada Sistem Operasi Solusi Alternatif

3 Latar Belakang Masalah

4 Latar Belakang Beberapa process/thread dapat bekerjasama (cooperating) dan berbagi (sharing) data Masalah : Akses yang konkuren pada shared data kemungkinan menghasilkan inkonsistensi Contoh : bounded-buffer producer consumer –Producer : memproduksi data dan dimasukkan ke buffer –Consumer : mengonsumsi/mengambil data dari buffer –Kapasitas buffer dibatasi –Ada variabel counter pencatat jumlah data sekarang. Counter bernilai awal 0 yang bertambah ketika data diproduksi dan berkurang jika data dikonsumsi

5 Producer Consumer Producer(P) while (true) { // Jika yg diproduksi = batas, do nothing while (counter == BUFFER_SIZE); // Produksi data dan masukkan buffer buffer [in] = nextProduced; in = (in + 1) % BUFFER_SIZE; // Tambah counter dengan 1 counter++; } Consumer(C) while (true) { // Jika yang dikonsumsi = 0, do nothing while (counter == 0); // Konsumsi data nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; // Kurangi counter dengan 1 counter--; } Q : Jika counter = 5, berapa nilai counter setelah satu kali iterasi secara concurrent ? Shared Data counter : variabel pencatat jumlah data sekarang buffer[] : penampung data BUFFER_SIZE : jumlah maksimal buffer

6 Nilai Counter counter++ dapat diimplementasikan dalam bahasa mesin sbb : –register1 = counter –register1 = register1 + 1 –counter = register1 counter-- dapat diimplementasikan dalam bahasa mesin sbb : –register2 = counter –register2 = register2 - 1 –count = register2 Jika “ counter = 5 ” dan producer-consumer dieksekusi secara concurrent maka urutan eksekusinya bisa jadi : 1.Producer eksekusi : register1 = counter {register1 = 5} 2.Producer eksekusi : register1 = register1 + 1 {register1 = 6} 3.Consumer eksekusi : register2 = counter {register2 = 5} 4.Consumer eksekusi : register2 = register2 - 1 {register2 = 4} 5.Producer eksekusi : counter = register1 {counter = 6 } 6.Consumer eksekusi : counter = register2 {counter = 4} Nilai counter dapat bernilai 4 atau 6. Padahal seharusnya 5 Problem : race condition

7 Problem : Race Condition Race condition: Situasi dimana beberapa proses mengakses dan memanipulasi shared data secara bersamaan. Nilai akhir dari shared data tergantung proses yang diselesaikan paling akhir. Untuk mencegah race condition, proses konkuren harus di- sinkronisasi

8 Critical Section Problem

9 Sebagai gambaran, sebuah sistem mempunyai n process yang saling berbagi shared data Setiap proses punya segmen kode yang disebut critical section, dimana shared data diakses. –Contoh : ketika producer/consumer mengakses variabel counter Masalah : ketika satu process menjalankan critical section-nya, di saat bersamaan process lain tidak boleh mengakses critical-section-nya

10 Solusi Critical Section Problem Mutual Exclusion. Jika proses P i mengekseskusi critical section nya, maka tidak ada proses lain yang dapat mengeksekusi critical section nya. Progress. Jika tidak ada proses yang mengeksekusi critical section nya dan terdapat beberapa proses yang akan memasuki critical section, maka pemilihan proses yang akan memasuki critical section berikutnya tidak dapat ditunda tanpa batas Bounded Waiting. Ada batasan waktu tunggu ketika proses diizinkan untuk memasuki critical section setelah proses membuat permintaan untuk memasuki critical section dan sebelum permintaan yang diberikan. –Diasumsikan setiap proses dieksekusi dengan kecepatan lebih dari 0 –Tidak ada asumsi mengenai kecepatan relatif proses n

11 Peterson's Solution

12 Solusi sederhana sinkronisasi dua process –Contoh : Process P i dan P j Asumsi : instruksi LOAD dan STORE bersifat atomik (tidak bisa diinterupsi) Dua process berbagi variabel : –int turn –Array boolean flag[2] Variabel turn menunjukkan process mana yang masuk critical section Array flag menunjukkan bahwa sebuah process siap mengeksekusi critical section. –flag[i] = true menunjukkan process P i siap

13 Peterson's Solution untuk Process P i Memenuhi 3 syarat : –Mutual exclusion –Progress –Bounded waiting do { // Process P i siap eksekusi, ganti giliran eksekusi ke P j flag[i] = TRUE; turn = j; // Jika giliran P j eksekusi critical section, P i Do Nothing while (flag[j] && turn == j); critical section P i flag[i] = FALSE; remainder section P j } while (TRUE);

14 Sinkronisasi dengan Hardware

15 Banyak sistem menyediakan dukungan hardware untuk menangani critical section code Melakukan locking : memproteksi critical section dengan lock. Pada single-processor –Disable interrupt –Code yang sedang dieksekusi tidak akan mengalami preemption –TIDAK efisien untuk multiprocessor : pesan akan disebar ke semua processor Modern-computer –Menyediakan instruksi hardware khusus yang atomik (tidak bisa diiterupsi) –Dua pendekatan : Test and set Swap content of two memory words

16 Solusi Critical Section dengan Locking do { acquire lock critical section release lock remainder section } while (TRUE);

17 Solusi Critical Section dengan TestAndSet Shared boolean variable lock, initialized to FALSE „ Solution: do { // Do nothing jika lock = true while ( TestAndSet (&lock )); critical section lock = FALSE; // reset lock to false remainder section } while (TRUE); boolean TestAndSet (boolean *lock) { boolean rv = *lock; // set lock = TRUE, lock the execution *lock = TRUE; // return previous lock status return rv: }

18 Instruksi TestAndSet Definisi: boolean TestAndSet (boolean *lock) { boolean rv = *lock; // set lock = TRUE, means lock the execution *lock = TRUE; // return previous lock status return rv: } Misal ada process P i dan P j P i panggil TestAndSet saat parameter lock = False –Return value = False, process P i bisa akses critical section-nya –P j tidak bisa akses critical sectionnya karena lock=True oleh P i P i panggil TestAndSet saat parameter lock = True –Return value = True, process P i tidak bisa akses critical section-nya (Do Nothing) –P i tidak bisa akses critical sectionnya karena sebelumnya lock=True oleh P j

19 Solusi Critical Section dengan Swap Shared Boolean variable lock initialized to FALSE; Setiap process punya local variable key „ Solution: do { key = TRUE; while ( key == TRUE) Swap (&lock, &key ); // critical section lock = FALSE; // remainder section } while (TRUE); void Swap (boolean *lock, boolean *key) { boolean temp = *lock; // Swap content *lock = *key; *key = temp; }

20 Instruksi Swap Definisi: void Swap (boolean *lock, boolean *key) { boolean temp = *lock; // Swap content *lock = *key; *key = temp; } Misal ada process P i dan P j P i panggil Swap saat parameter lock = False, key=True –key = False, process P i bisa akses critical section-nya –P j tidak bisa akses critical sectionnya karena lock=True oleh P i P i panggil Swap saat parameter lock = True, key=True, –key = True, process P i tidak bisa akses critical section-nya (Do Nothing) –P i tidak bisa akses critical sectionnya karena sebelumnya lock=True oleh P j

21 Bounded-waiting Mutual Exclusion with TestandSet() do { waiting[i] = true; key = true; while (waiting[i] && key) key = test and set(&lock); waiting[i] = false; /* critical section */ j = (i + 1) % n; while ((j != i) && !waiting[j]) j = (j + 1) % n; if (j == i) lock = false; else waiting[j] = false; /* remainder section */ } while (true);

22 Mutex Locks

23 Mutex Lock Sinkronisasi dengan hardware terlalu kompleks bagi programmer Desainer OS menyediakan software tool untuk critical-section problem Tools paling sederhana adalah mutex (mutually exclusion) Mutex lock biasanya diimplementasi dengan salah satu mekanisme sinkronisasi dengan hardware Mutex menyediakan 2 fungsi dasar : –acquire lock : mengunci critical section –release lock : melepas kunci

24 Acquire dan release menggunakan shared variable available Acquire lock acquire() { while (!available); /* busy wait */ available = false; } Release lock release() { available = true; } Solusi dengan mutex do { acquire lock critical section release lock remainder section } while (true);

25 Question Apa kelemahan mutex dan sinkronisasi dengan hardware?

26 Answer Apa kelemahan mutex dan sinkronisasi dengan hardware? –Pada saat suatu critical section di lock oleh satu process, maka proses lain melakukan busy waiting. –Busy waiting : menunggu dengan cara looping terus menerus sampai lock-nya dilepas. Disebut juga dengan spinlock karena proses lain melakukan "berputar" ketika menunggu –Busy waiting menghabiskan siklus pemrosesan CPU yang seharusnya bisa dimanfaatkan secara produktif oleh proses lain.

27 Semaphore

28 Perangkat sinkronisasi yang tidak memerlukan busy waiting. Semaphore S – shared integer variable S hanya bisa diakses dengan 2 operasi atomik : wait dan signal wait : cek S dan mengurangi S dengan 1 wait (S) { while S <= 0; // no-op S--; } signal : menambah S dengan 1 signal (S) { S++; }

29 Dua Jenis Semaphore Counting semaphore – nilai integer S dapat berkisar melalui domain tak terbatas. –Biasanya nilai S diinisiasi sebanyak resource yang dibagi –Jika S=0, maka semua resource sedang dipakai Binary semaphore – nilai integer S dapat mempunyai jangkauan 0 atau 1 –Lebih sederhana untuk diimplementasikan

30 Critical Section dengan Semaphore Shared data: semaphore S; //diinisialisasi S = 1 Process P i : do { wait(S); critical section signal(S); remainder section } while (1);

31 Implementasi Semaphore Untuk menghindari busy waiting, process yang menunggu akses critical-section harus dihentikan sementara. Ada dua operasi sederhana yang terlibat : –block : menghentikan sementara (suspend) proses yang memanggil –wakeup(P) : melanjutkan (resume) eksekusi dari proses P yang di-blok Semaphore tanpa busy waiting butuh struktur data untuk menyimpan process yang sedang suspend. typedef struct { int value; struct process *Q; } semaphore;

32 Implementasi Semaphore Operasi Semaphore didefinisikan wait(S){ if (S.value <= 0) { Tambah proses ke queue S.Q; block(); } else{ S.value--; } signal(S){ if (S.value <= 0) { Hapus proses P dari queue S.Q; wakeup(P); } S.value++; } do { wait(S); critical section signal(S); remainder section } while (1);

33 Masalah : Deadlock dan Starvation Deadlock – dua atau lebih proses menunggu tanpa kepastian suatu event yang dapat disebabkan oleh satu proses yang sedang menunggu. Misalnya S dan Q adalah 2 semaphores yang diinisialisasi 1 Starvation : blocking terus menerus Sebuah proses mungkin tidak pernah dihapus dari antrian semaphore yang dihentikan sementara (suspend)

34 Permasalahan Klasik pada Sinkronisasi

35 Ada beberapa permasalahan klasik dalam sinkronisasi –Permasalahan Bounded-Buffer –Permasalahan Readers and Writers –Permasalahan Dining-Philosophers

36 Permasalahan Bounded-Buffer N buffers, each can hold one item Shared data semaphore full, empty, mutex; Inisialisasi: full = 0, empty = n, mutex = 1

37 Bounded Buffer untuk Producer do {... memproduksi item nextp... wait(empty); wait(mutex);... tambahkan nextp ke buffer... signal(mutex); signal(full); } while (1);

38 Bounded Buffer untuk Consumer do {... wait(empty); wait(mutex);... mengambil item dari buffer ke nextc... signal(mutex); signal(full);... mengkonsumsi item pada nextc... } while (1);

39 Permasalahan Readers-Writers Sebuah dataset di-share untuk beberapa proses yang konkuren –Readers : hanya membaca dataset –Writers : membaca Masalah –Ijinkan banyak reader untuk membaca dalam waktu bersamaan –Ijinkan hanya satu writer mengakses dalam satu waktu Shared data –Data set –Semaphore mutex initialized to 1 –Semaphore wrt initialized to 1 –Integer readcount initialized to 0

40 Proses Writers do { wait (wrt) ; //writing is performed signal (wrt) ; } while (TRUE);

41 Proses Readers do { wait (mutex) ; readcount ++ ; if (readcount == 1) wait (wrt) ; signal (mutex)... // reading is performed... wait (mutex) ; readcount - - ; if (readcount == 0) signal (wrt) ; signal (mutex) ; } while (TRUE);

42 Permasalahan Dining-Philosophers Filosofer menghabiskan hidupnya hanya untuk makan dan berpikir Tidak ada interaksi dengan sebelahnya Setiap filosofer mencoba mengambil 2 chopstick untuk makan nasi dari mangkok –Butuh 2 chopstick untuk makan Shared data –Bowl of rice (data set) –Semaphore chopstick [5] initialized to 1

43 Filosofer i do { wait ( chopstick[i] ); wait ( chopStick[ (i + 1) % 5] ); // Makan signal ( chopstick[i] ); signal (chopstick[ (i + 1) % 5] ); // Berpikir } while (TRUE);

44 Monitor

45 Baca textbook section 5.8 chapter 5

46 Sinkronisasi pada Beberapa OS

47 Sinkronisasi pada Linux Linux: –Prior to kernel Version 2.6, disables interrupts to implement short critical sections –Version 2.6 and later, fully preemptive Linux provides: –semaphores –spinlocks –reader-writer versions of both On single-cpu system, spinlocks replaced by enabling and disabling kernel preemption

48 Sinkronisasi pada Solaris Mengimplementasikan beberapa lock kunci untuk mendukung multitasking, multithreading (termasuk thread real-time), dan multiprocessing. Menggunakan adaptive mutexes untuk efisiensi ketika melindungi data dari segmen kode pendek Menggunakan condition variables dan readers-writers locks ketika segmen kode panjang memerlukan akses ke data. Menggunakan turnstiles untuk memesan daftar thread menunggu untuk memperoleh adaptive mutexes atau readers-writers locks

49 Sinkronisasi Windows 2000 Menggunakan interrupt mask untuk melindungi akses ke sumber daya global pada sistem prosesor tunggal. Menggunakan spinlocks pada sistem multiprosessor Juga menyediakan dispatcher object yang dapat bertindak sebagai mutex dan semaphore. Dispatcher object juga dapat menyediakan event. Event bertindak seperti sebuah variabel kondisi.

50 Pendekatan Alternatif

51 Baca textbook section 5.10 chapter 5


Download ppt "Sinkronisasi Proses. Materi Latar Belakang Masalah Critical Section Problem Peterson's Solution Sinkronisasi dengan Hardware Mutex Semaphore Problem Klasik."

Presentasi serupa


Iklan oleh Google