Mutual Exclusion dan Sinkronisasi - Komputasi
Mutual Exclusion dan Sinkronisasi - Komputasi
Mutual Exclusion dan Sinkronisasi - Komputasi
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