18.07.2013 Views

Mutual Exclusion dan Sinkronisasi - Komputasi

Mutual Exclusion dan Sinkronisasi - Komputasi

Mutual Exclusion dan Sinkronisasi - Komputasi

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!