18.07.2013 Views

Mutual Exclusion dan Sinkronisasi - Komputasi

Mutual Exclusion dan Sinkronisasi - Komputasi

Mutual Exclusion dan Sinkronisasi - Komputasi

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Sistem Operasi 2009<br />

Pertemuan 5<br />

Concurrency: <strong>Mutual</strong><br />

<strong>Exclusion</strong> &<br />

Synchronization<br />

H u s n i<br />

Lab. Sistem Komputer & Jaringan<br />

Teknik Informatika Univ. Trunojoyo


Ikhtisar<br />

• Prinsip Mendasar dari Concurrency<br />

– <strong>Mutual</strong> <strong>Exclusion</strong>: Dukungan Hardware<br />

– Semaphore<br />

– Monitor<br />

– Message Passing<br />

– Masalah Readers/Writers<br />

2


Banyak Proses<br />

• Sentral bagi perancangan SO modern<br />

adalah pengelolaan banyak proses<br />

– Multiprogramming<br />

– Multiprocessing<br />

– Distributed Processing<br />

• Isu besarnya adalah Concurrency<br />

– Mengelola interaksi dari semua proses<br />

3


Concurrency<br />

Concurrency hadir pada:<br />

• Banyak aplikasi<br />

– Waktu sharing<br />

• Aplikasi terstruktur<br />

– Ekstensi dari rancangan modular<br />

• Struktur sistem operasi<br />

– SO sendiri diimplementasikan sebagai<br />

sekumpulan proses atau thread<br />

4


Istilah Penting<br />

5


Proses Interleaving & Overlapping<br />

• Telah diketahui bahwa proses dapat<br />

diinterleave pada uniprocessor<br />

6


Proses Interleaving & Overlapping<br />

• Pada multi-processor, juga dapat<br />

overlapping<br />

7


Kesulitan Concurrency<br />

• Sharing sumber daya global<br />

– Penulisan suatu shared variable: urutan<br />

penulisan sangat penting<br />

– Masalah besar adalah penulisan tidak<br />

lengkap<br />

• Pengelolaan alokasi resource secara<br />

optimal<br />

• Sulit menemukan error pemrograman<br />

karena hasilnya bersifat tidak deterministic<br />

and reproducible.<br />

8


Contoh Sederhana<br />

void echo()<br />

{<br />

chin = getchar();<br />

chout = chin;<br />

putchar(chout);<br />

}<br />

9


Contoh pada Multiprocessor<br />

Proses P1 Proses P2<br />

. .<br />

chin = getchar(); .<br />

. chin = getchar();<br />

chout = chin; chout = chin;<br />

putchar(chout); .<br />

. putchar(chout);<br />

. .<br />

10


Menerapkan Akses Tunggal<br />

• Jika diterapkan suatu aturan yang hanya<br />

satu proses dapat memasuki fungsi<br />

tersebut pada suatu waktu, maka:<br />

• P1 & P2 berjalan pada processor berbeda<br />

• P1 memasukkan echo lebih dahulu,<br />

– P2 mencoba masuk tetapi diblok – P2 suspend<br />

• P1 melengkapi eksekusi<br />

– P2 me-resume & mengeksekusi echo<br />

11


Kondisi Race<br />

• Race condition terjadi ketika<br />

– Banyak proses atau thread membaca &<br />

menulis item data<br />

– Hasil akhir dari aktifitas baca & tulis tersebut<br />

tergantung pada urutan eksekusi dari prosesyang<br />

terlibat.<br />

• Output tergantung pada siapa yang<br />

terakhir menyelesaikan race.<br />

12


Fokus SO<br />

• Isu desain <strong>dan</strong> manajemen yang muncul<br />

karena a<strong>dan</strong>ya concurrency?<br />

• SO harus<br />

– Menjaga track dari berbagai proses<br />

– Meng-alokasi-kan <strong>dan</strong> men-dealokasi-kan<br />

sumber daya<br />

– Melindungi data & resource dari gangguan<br />

proses lain<br />

– Memastikan bahwa proses & output terbebas<br />

dari kecepatan pemrosesan<br />

13


Interaksi Proses<br />

14


Kompetisi Antar Proses (Resources)<br />

Ada tiga masalah kendali utama:<br />

• Kebutuhan <strong>Mutual</strong> <strong>Exclusion</strong><br />

– Critical section (bagian kritis dari proses)<br />

• Deadlock<br />

• Starvation<br />

15


Syarat <strong>Mutual</strong> <strong>Exclusion</strong> (2)<br />

• Hanya satu proses pada satu waktu yang<br />

dibolehkan ada dalam critical section bagi<br />

suatu resource<br />

• Proses yang berhenti pada noncritical<br />

section-nya harus melakukan demikian<br />

tanpa gangguan dengan proses lain<br />

• Tidak ada deadlock atau starvation<br />

16


Syarat <strong>Mutual</strong> <strong>Exclusion</strong> (2)<br />

• Proses harus tidak didelay akses ke suatu<br />

critical section saat tidak ada proses lain<br />

yang menggunakannya<br />

• Tidak ada asumsi mengenai kecepatan<br />

proses relatif atau jumlah proses<br />

• Proses tetap di dalam critical section-nya<br />

hanya selama waktu terbatas tertentu<br />

(finite)<br />

17


<strong>Mutual</strong> <strong>Exclusion</strong><br />

(Disabling Interrupts)<br />

• Uniprocessor hanya membolehkan<br />

interleaving<br />

• Interrupt Disabling<br />

– Proses berjalan sampai ia meng-invoke suatu<br />

layanan SO atau sampai ia diinterupsi<br />

– Disabling interrupts menjamin terwujudnya<br />

mutual exclusion<br />

– Tidak akan bekerja pada arsitektur<br />

multiprocessor<br />

18


Pseudo-Code<br />

while (true) {<br />

/* disable interrupts */;<br />

/* critical section */;<br />

/* enable interrupts */;<br />

/* remainder */;<br />

}<br />

19


Instruksi Mesin Khusus<br />

• Instruksi Compare & Swap<br />

– Juga disebut “compare and exchange<br />

instruction”<br />

• Intruksi exchange<br />

20


Instruksi Compare&Swap<br />

int compare_and_swap (int *word, int testval, int newval)<br />

{<br />

int oldval;<br />

oldval = *word;<br />

if (oldval == testval) *word = newval;<br />

return oldval;<br />

}<br />

21


<strong>Mutual</strong> <strong>Exclusion</strong> (gambar 5.2)<br />

22


Instruksi Exchange<br />

void exchange (int register, int memory)<br />

{<br />

int temp;<br />

temp = memory;<br />

memory = register;<br />

register = temp;<br />

}<br />

23


Instruksi Exchange (gambar 5.2)<br />

24


Keuntungan <strong>Mutual</strong><br />

<strong>Exclusion</strong> Hardware<br />

• Dapat diterapkan terhadap banyak proses<br />

pada processor tunggal atau multi<br />

processor yang berbagi (sharing) main<br />

memory<br />

• Simple, karena itu mudah diwujudkan<br />

• Dapat digunakan untuk mendukung<br />

banyak critical section<br />

25


Kerugian <strong>Mutual</strong><br />

<strong>Exclusion</strong> Hardware<br />

• Busy-waiting mengkonsumsi waktu<br />

processor<br />

• Starvation mungkin ketika suatu proses<br />

meninggalkan critical section <strong>dan</strong> lebih<br />

dari satu proses menunggu (waiting).<br />

– Beberapa proses dapat ditolak aksenya<br />

dalam waktu tak terbatas.<br />

• Deadlock juga mungkin<br />

26


Semaphore<br />

• Semaphore:<br />

– Suatu nilai integer (bilangan bulat) yang<br />

digunakan untuk pensinyalan (signalling)<br />

antar proses.<br />

• Hanya tiga operasi dapat dikerjakan pada<br />

suatu semaphore, semuanya bersifat<br />

atomik:<br />

– initialize<br />

– Decrement (semWait)<br />

– increment (semSignal)<br />

27


Primitif Semaphore<br />

28


Primitif Semaphore Biner<br />

29


Semaphore Kuat & Lemah<br />

• Antrian (queue) digunakan untuk<br />

menangani proses yang menunggu<br />

(waiting) pada semaphore<br />

– Dalam urutan bagaimana proses dihapus dari<br />

antrian?<br />

• Semaphore Kuat menggunakan FIFO<br />

• Semaphore Lemah tidak menentukan<br />

urutan penghapusan dari antrian<br />

30


Contoh Mekanisme Semaphore Kuat<br />

31


Contoh Mekanisme Semaphore<br />

32


MutEx Menggunakan Semaphore<br />

33


Proses Menggunakan Semaphore<br />

34


Masalah Producer-Consumer<br />

• Situasi Umum:<br />

– Satu atau lebih producer membangkitkan data &<br />

menempatkannya dalam suatu buffer<br />

– Consumer tunggal mengambil item keluar buffer satu<br />

pada satu waktu<br />

– Hanya satu producer atau consumer yang boleh<br />

mengakses buffer pada satu waktu<br />

• Masalahnya:<br />

– Pastikan bahwa Producer tidak dapat menambahkan<br />

data ke dalam buffer yang penuh & comsumer tidak<br />

dapat menghapus data dari buffer kosong<br />

Producer/Consumer Animation<br />

35


Fungsi<br />

• Anggap suatu buffer tak terbatas b dengan<br />

suatu array linier elemen<br />

Producer Consumer<br />

while (true) {<br />

/* produce item v */<br />

b[in] = v;<br />

in++;<br />

}<br />

while (true) {<br />

while (in


Buffer<br />

37


Solusi SALAH<br />

38


Scenario yang Mungkin<br />

39


Solusi BENAR<br />

40


Semaphore<br />

41


Buffer Terbatas<br />

42


Semaphore<br />

43


Fungsi dalam Bounded Buffer<br />

Producer Consumer<br />

while (true) {<br />

/* produce item v */<br />

while ((in + 1) % n == out)<br />

/* do nothing */;<br />

b[in] = v;<br />

in = (in + 1) % n<br />

}<br />

while (true) {<br />

while (in == out)<br />

/* do nothing<br />

*/;<br />

w = b[out];<br />

out = (out + 1) % n;<br />

/* consume item w */<br />

}<br />

44


Demo Animasi<br />

• Producer/Consumer<br />

– Ilustrasi operasi buffer producer-consumer.<br />

• Bounded-Buffer Problem Using Semaphores<br />

– Demontrasi masalah consumer/producer buffer<br />

terbatas menggunakan semaphore.<br />

45


Monitor<br />

• Monitor merupakan suatu konsepsi<br />

bahasa pemrograman yang menyediakan<br />

fungsi sama dengan semaphore & lebih<br />

mudah dikontrol.<br />

• Diimplementasikan dalam sejumlah<br />

bahasa pemrograman, termasuk<br />

– Concurrent Pascal, Pascal-Plus,<br />

– Modula-2, Modula-3, <strong>dan</strong> Java.<br />

46


Karakteristik Utama<br />

• Variabel data lokal hanya dapat diakses<br />

oleh monitor<br />

• Proses memasuki monitor dengan<br />

menjalankan salah satu prosedurnya<br />

• Hanya satu proses yang boleh berjalan<br />

(executing) dalam monitor pada satu<br />

waktu<br />

47


<strong>Sinkronisasi</strong><br />

• Synchronisation dicapai dengan variabel<br />

kondisi dalam suatu monitor<br />

– Hanya dapat diakses oleh monitor.<br />

• Fungsi monitor:<br />

–Cwait(c): Men-suspend eksekusi dari<br />

proses yang memanggil pada kondisi c<br />

–Csignal(c) Me-resume eksekusi dari<br />

beberapa proses yang diblok setelah cwait<br />

pada kondisi yang sama<br />

48


Struktur Monitor<br />

49


Solusi Buffer Terbatas<br />

Menggunakan Monitor<br />

50


Solusi Menggunakan Monitor<br />

51


Monitor Buffer Terbatas<br />

52


Interaksi Proses<br />

• Ketika proses berinteraksi satu dengan<br />

lainnya, dua syarat fundamental harus<br />

terpenuhi:<br />

– <strong>Sinkronisasi</strong>, <strong>dan</strong><br />

– komunikasi.<br />

• Message Passing adalah (satu) solusi<br />

untuk syarat kedua<br />

– Bonus: bekerja dengan shared memory &<br />

dengan sistem terdistribusi.<br />

53


Message Passing<br />

• Fungsi aktual dari message passing<br />

normalnya disediakan dalam bentuk<br />

pasangan primitif:<br />

– send (destination, message)<br />

– receive (source, message)<br />

54


Synchronization<br />

• Komunikasi memerlukan sinkronisasi<br />

– Sender (pengirim) harus mengirim sebelum<br />

receiver (penerima) dapat menerima<br />

• Apa yang terjadi terhadap proses setelah<br />

ia menjalankan primitif send atau receive?<br />

– Sender & receiver mungkin (bisa pula tidak)<br />

menjadi blocking (waiting for message)<br />

55


Blocking send, Blocking receive<br />

• Sender & receiver diblok sampai message<br />

tersampaikan (delivered)<br />

• Dikenal sebagai rendezvous<br />

• Menmungkinkan sinkronisasi ketat (tight)<br />

antar proses.<br />

56


Non-blocking Send<br />

• Lebih alami bagi banyak tugas<br />

pemrograman concurrent.<br />

• Nonblocking send, blocking receive<br />

– Sender terus jalan<br />

– Receiver diblok sampai message yang<br />

diminta tiba<br />

• Nonblocking send, nonblocking receive<br />

– Tidak ada pihak yang harus menunggu<br />

57


Pengalamatan<br />

• Proses pengiriman perlu mampu<br />

menentukan proses mana yang sebaiknya<br />

menerima message<br />

– Direct addressing (langsung)<br />

– Indirect Addressing (tidak langsung)<br />

58


Pengalamatan Langsung<br />

• Primitif send menyertakan suatu pengenal<br />

(identifier) khusus dari proses tujuan<br />

• Primitif receive segera dapat mengetahui<br />

proses mana yang menjadi tujuan<br />

message<br />

• Primitif receive dapat memanfaatkan<br />

parameter source untuk mengembalikan<br />

suatu nilai ketika operasi receive selesai<br />

dikerjakan.<br />

59


Pengalamatan Tak Langsung<br />

• Message dikirim ke suatu struktur shared<br />

data yang mengandung antrian (queues)<br />

• Queues disebut pula mailboxes<br />

• Satu proses mengirimkan suatu message<br />

ke mailbox & proses lain mengambil<br />

message dari mailbox tersebut<br />

60


Komunikasi Proses Tak Langsung<br />

61


Format Message Umum<br />

62


MutEx Menggunakan Message<br />

63


Message Producer-Consumer<br />

64


Masalah Readers-Writers<br />

• Suatu area data dishare antar banyak<br />

proses<br />

– Beberapa proses hanya membaca area data,<br />

beberapa hanya menulis ke area tersebut.<br />

• Kondisi untuk dicapai:<br />

1.Banyak readers boleh membaca file at once.<br />

2.Hanya satu writer pada satu waktu yang<br />

dapat menulis<br />

3.Jika suatu writer se<strong>dan</strong>g menulis ke file, maka<br />

tidak ada reader yang dapat membacanya<br />

interaction of readers and writers.<br />

65


Readers Dengan Prioritas<br />

66


Writers dengan Priority<br />

67


Writers Dengan Prioritas<br />

68


Message Passing<br />

69


Message Passing<br />

70


Tugas Pertemuan 5<br />

• Kerjakan problem 5.1 & 5.2!<br />

• Jelaskan definisi dari Proses, Thread,<br />

<strong>Mutual</strong> Exclution, Race Condition,<br />

<strong>Sinkronisasi</strong>, Deadlock, Starvation,<br />

Monitor, <strong>dan</strong> Semaphore!<br />

• Uraikan implementasi sinkronisasi &<br />

mutual exclusion di Windows & Linux!<br />

71

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!