Mutual Exclusion Edi Sugiarto S Kom Definisi Mutual

  • Slides: 35
Download presentation
Mutual Exclusion Edi Sugiarto, S. Kom

Mutual Exclusion Edi Sugiarto, S. Kom

Definisi �Mutual exclusion adalah persoalan untuk menjamin hanya satu proses yang mengakses sumber daya

Definisi �Mutual exclusion adalah persoalan untuk menjamin hanya satu proses yang mengakses sumber daya pada suatu interval waktu tertentu. �Ilustrasi mutual exclusion dapat dilihat pada dua contoh berikut : ◦ Ilustrasi eksekusi daemon printer ◦ Ilustrasi aplikasi tabungan

�Ilustrasi Printer Daemon ◦ Daemon printer adlh proses penjadwalan & pengendalian pencetakan berkas 2

�Ilustrasi Printer Daemon ◦ Daemon printer adlh proses penjadwalan & pengendalian pencetakan berkas 2 di printer sehingga seolah 2 printer dapat digunakan secara simultan oleh proses 2. ◦ Daemon printer mempunyai ruang disk (disebut direktori spooler) utk menyimpan berkas yg akan dicetak. Spooler membagi disk mjd sejumlah slot. ◦ Terdapat variabel in menunjuk slot bebas di ruang disk yg akan dipakai menyimpan berkas.

Contoh Algoritma Program Give_File_to_spooler; Var in : Integer; berkas. A, berkas. B : File;

Contoh Algoritma Program Give_File_to_spooler; Var in : Integer; berkas. A, berkas. B : File; Procedure Store (Berkas : File, next_slot : Integer); {Untuk menyimpan berkas pada slot ke next_slot} Procedure Proses. A; Var next_free_slot : Integer; Begin next_free_slot: =in; store(Berkas. A, next_free_slot); in: =next_free_slot+1; End;

Procedure Proses. B; Var next_free_slot: Integer; Begin next_free_slot: =in; store(Berkas. B, next_free_slot); in: =next_free_slot+1;

Procedure Proses. B; Var next_free_slot: Integer; Begin next_free_slot: =in; store(Berkas. B, next_free_slot); in: =next_free_slot+1; End; Begin in: =0; Repeat Parbegin Proses. A; Proses. B; Parend Forever End.

Situasi yang membuat kacau : Proses A Proses B {in=9} Store berkas. A to

Situasi yang membuat kacau : Proses A Proses B {in=9} Store berkas. A to slot[next_free_slot] {berkas. A disimpan di slot-9, menimpa berkas. B} {in=9} Next_free_slot <- in Store berkas. B to slot[next_free_slot] {berkas B disimpan di slot 9} In <- next_free_slot + 1 {penjadwal menjadwal A berjalan} in ← next_free_slot + 1 {in=10} Berkas A menimpa berkas B, sehingga B tak pernah mendapat jatah cetakannya

Penjelasan �Proses A membaca variabel in bernilai 9. �Belum sempat A menyelesaikan proses, penjadwal

Penjelasan �Proses A membaca variabel in bernilai 9. �Belum sempat A menyelesaikan proses, penjadwal menjadwalkan proses B berjalan. �Proses B yg jg ingin mencetak, membaca variabel in yang masih bernilai 9. �Proses B menyimpan berkas. B di slot ke-9 �Proses A dijadwalkan kembali dan juga menyimpan berkas. A di sot ke-9. �Berkas B tertimpa berkas A, sehingga proses B tidak pernah memperoleh cetakan

Penjelasan �Terdapat dua proses atau lebih sdg membaca/menulis data bersama (variabel in) dg hasil

Penjelasan �Terdapat dua proses atau lebih sdg membaca/menulis data bersama (variabel in) dg hasil akhir bergantung jalannya proses 2. Hasil akhir tdk dpt diprediksi. �Kondisi ini disebut kondisi pacu (race condition) �Kunci penghilangan race condition adlh hrs dapat dicegah lebih dari satu proses membaca/menulis data bersama pada saat bersamaan.

Ilustrasi Aplikasi Tabungan �Seluruh sistem yg melibatkan byk proses mengakses satu sumber daya bersama

Ilustrasi Aplikasi Tabungan �Seluruh sistem yg melibatkan byk proses mengakses satu sumber daya bersama selalu menimbulkan mslh mutual exclusion �Contoh: ◦ Pada aplikasi tabungan, misalnya rekening A berisi Rp. 1. 000, terdaftar di kantor cabang di Jogja. ◦ Pada suatu saat program aplikasi di kantor cabang di Jakarta melayani penyetoran Rp. 3. 000 ke rekening A tsb. Program aplikasi membaca saldo akhir rekening A.

◦ Pada waktu hampir bersamaan, di kantor cabang di Jogja juga terjadi transaksi yaitu

◦ Pada waktu hampir bersamaan, di kantor cabang di Jogja juga terjadi transaksi yaitu penyetoran Rp. 5. 000 ke rekening A. Program aplikasi di Jogja membaca saldo masih Rp. 1. 000 �Beberapa skenario dpt terjadi bila mutual exclusion tidak terjamin, yaitu: ◦ Program aplikasi di Jogja dilakukan secara cepat menulis ke rekening A sehingga dihasilkan Rp. 6. 000. Setelah itu program aplikasi di kantor cabang Jakarta menimpa hasil tsb dg Rp. 4. 000. Hasil akhir yg diperoleh adlh Rp. 4. 000 yg seharusnya Rp. 10. 000. ◦ Program aplikasi di Jakarta dilakukan scr cepat menulis ke rek A sehingga dihasilkan Rp. 4. 000, Setelah itu program aplikasi di ka. Cab. Jogja menimpa hasil tsb dg Rp. 6. 000. Hasil lebih baik dibanding skenario pertama, tetapi masih di bawah yg seharusnya yaitu Rp. 10. 000.

Kriteria Penyelesaian Mutual Exclusion �Kemampuan menjamin mutual exclusion harus memenuhi kriteria berikut : [TAN

Kriteria Penyelesaian Mutual Exclusion �Kemampuan menjamin mutual exclusion harus memenuhi kriteria berikut : [TAN 92, STA-95] ◦ Mutual Exclusion harus dijamin. ◦ Hanya satu proses pada satu saat yang diizinkan masuk critical section. ◦ Proses yang berada pada non-critical section, dilarang mem-block proses lain yang ingin masuk critical section.

◦ Harus dijamin proses yang ingin masuk critical section tidak menunggu selama waktu yang

◦ Harus dijamin proses yang ingin masuk critical section tidak menunggu selama waktu yang lama, atau tak boleh mendapat deadlock atau startvation. ◦ Ketika tidak ada proses critical section maka proses yang ingin masuk critical section harus diizinkan segera masuk tanpa waktu tunda. ◦ Tidak ada asumsi mengenai kecepatan relatif proses atau jumlah proses yang ada.

Metode Penjaminan Mutual Exclusion �Banyak metode yang diusulkan untuk menjamin mutual exclusion, antaralain :

Metode Penjaminan Mutual Exclusion �Banyak metode yang diusulkan untuk menjamin mutual exclusion, antaralain : ◦ Metode naif �Metode variabel lock sederhana ◦ Metode untuk situasi tertentu �Metode bergantian secara ketat ◦ Metode menggunakan busy waiting �Metode penyelesaian Dekker �Metode penyelesaian Peterson

Metode Naif �Metode Naif ini tidak menyelesaikan masalah mutual exclusion, metode ini dipelajari untuk

Metode Naif �Metode Naif ini tidak menyelesaikan masalah mutual exclusion, metode ini dipelajari untuk memperoleh gambaran mekanisme penjaminan mutual exclusion lebih jelas ◦ Metode variabel lock sederhana

Metode variabel lock sederhana �Mekanisme pada metode ini sbb ; ◦ Jika variabel lock

Metode variabel lock sederhana �Mekanisme pada metode ini sbb ; ◦ Jika variabel lock bernilai 0, proses menge-set variabel lock menjadi 1 dan segera masuk critical section ◦ Jika variabel lock bernilai 1, proses menunggu sampai variabel lock bernilai 0 kembali. (situas yang seperti ini berarti terdapat proses lain yang berada pada critical section.

Contoh algoritma pada metode variabel lock sederhana Var Lock : integer; Procedure enter_critical_section; {mengerjakan

Contoh algoritma pada metode variabel lock sederhana Var Lock : integer; Procedure enter_critical_section; {mengerjakan kode kritis} Procedure Proses. A; Begin While lock<>0 do begin end; Lock: =1; enter_critical_section; Lock: =0; End;

Procedure Proses. B; Begin While lock<>0 do begin end; Lock: =1; enter_critical_section; Lock: =0;

Procedure Proses. B; Begin While lock<>0 do begin end; Lock: =1; enter_critical_section; Lock: =0; End; Begin Lock: =0; Repeat parbegin proses. A proses. B Parend Forever End

Skenario yang membuat situasi kacau �Saat proses A telah membaca variabel lock dan sebelum

Skenario yang membuat situasi kacau �Saat proses A telah membaca variabel lock dan sebelum menset variabel lock menjadi 1, penjadwal dapat menjadwalkan proses B. �Proses B pun membaca variabel lock yang masih bernilai 0 dan masuk critical section. �Karena proses A telah membaca variabel lock bernilai 0 maka proses A masuk ke critical section �Sehingga terdapat dua proses dalam critical section, dan hal ini yang tidak boleh terjadi.

Metode untuk situasi tertentu �Metode bergantian secara ketat ◦ Metode ini mengasumsikan dapat menggilir

Metode untuk situasi tertentu �Metode bergantian secara ketat ◦ Metode ini mengasumsikan dapat menggilir proses-proses yang hendak masuk critical section secara bergantian secara terus menerus

Contoh Algorithma Program mutex_with_strict_alternation var Turn : Integer; Procedure enter_critical_section; { } Procedure enter_non_critical_section;

Contoh Algorithma Program mutex_with_strict_alternation var Turn : Integer; Procedure enter_critical_section; { } Procedure enter_non_critical_section; { } Procedure proses 0; Begin repeat while turn<>0 do begin end; enter_critical_section; turn: =1; enter_non_critical_section forever End;

Procedure proses 1; Begin repeat while turn<>1 do begin end; enter_critical_section; turn: =0; enter_non_critical_section

Procedure proses 1; Begin repeat while turn<>1 do begin end; enter_critical_section; turn: =0; enter_non_critical_section forever End; Begin turn: =0; parbegin proses 0; proses 1; end; End;

� Variabel turn mencatat nomor proses yang sedang masuk critical section, variabel turn diinisialisasi

� Variabel turn mencatat nomor proses yang sedang masuk critical section, variabel turn diinisialisasi 0 � Skenario yang terjadi adalah : ◦ Proses 0, memeriksa variabel turn, bernilai 0 dan segera memasuki critical section. ◦ Proses 1, menemukan variabel turn bernilai 0, melakukan loop memeriksa variabel turn terus-menerus, memeriksa apakan turn telah bernilai 1. � Kondisi memeriksa variabel terus-menerus, menunggu hingga suatu nilai muncul disebut busy waiting. � Jika busy waiting terlalu lama maka cara ini harus dihindari karena dapat menyiakan waktu pemroses.

Skenario terlanggarnya mutex pada metode ini Proses A Proses B {turn=0} While turn<>0 do

Skenario terlanggarnya mutex pada metode ini Proses A Proses B {turn=0} While turn<>0 do begin end; Enter_critical_section; Turn: =1; {turn=1} While turn<>1 do begin end; Enter_critical_section; Turn: =0; Enter_non_critical_section

�Skenario terlanggarnya adalah : ◦ Proses 0 meninggalkan critical section dan men-set turn=1, proses

�Skenario terlanggarnya adalah : ◦ Proses 0 meninggalkan critical section dan men-set turn=1, proses 1 diijinkan masuk critical section ◦ Proses 1 mengakhiri critical section dan men-set variabel turn=0, sehingga keduanya berada pada non critical section ◦ Ketika proses 1 hendak masuk ke critical section, tetapi variabel turn masih 0, sehingga proses 1 tidak dapat masuk ke critical section.

Metode dengan Busy Waiting � Terdapat beberapa metode Busy ◦ Metode secara Perangkat Lunak

Metode dengan Busy Waiting � Terdapat beberapa metode Busy ◦ Metode secara Perangkat Lunak Waiting sbb : �Metode penyelesaian dengan Dekker �Metode penyelesaian Peterson ◦ Metode dengan Dukungan Perangkat Keras �Metode pematian Interupsi �Metode dengan intruski Test and Set Lock �Metode dengan intruksi Exchange Metode secara Perangkat Lunak � Metode penyelesaian Dekker ◦ Metode mutual exclusion secara perangkat lunak yang sukses pertama kali diberikan dekker, matematikawan belanda.

Contoh Algorithma const N = 2; var turn : integer; interested : Array[0. .

Contoh Algorithma const N = 2; var turn : integer; interested : Array[0. . N-1] of Boolean procedure enter_critical_section; { } procedure enter_noncritical_section; { } procedure proses 0 begin repeat intersted[0] : = true; turn: =1; while interested[1] do if turn = 1 then begin interested[0] : = false; while turn = 1 do begin end; interested[0] : = false; end; enter_critical_section; turn: =1; interested[0] : = false; enter_noncritical_section; forever end;

procedure proses 1 begin repeat intersted[1] : = true; turn: =1; while interested[0] do

procedure proses 1 begin repeat intersted[1] : = true; turn: =1; while interested[0] do if turn = 0 then begin interested[1] : = false; while turn = 0 do begin end; interested[1] : = false; begin interested[0] : = false; interested[1] : = false; turn : = 1; parbegin proses 0; proses 1; parend; end. enter_critical_section; turn: =0; interested[1] : = false; enter_noncritical_section; forever end;

�Algoritma dekker merupakan algoritma rumit untuk menyelesaikan mutual exclusion. �Memiliki properti-properti berikut : ◦

�Algoritma dekker merupakan algoritma rumit untuk menyelesaikan mutual exclusion. �Memiliki properti-properti berikut : ◦ Tidak memerlukan instruksi perangkat keras khusus ◦ Proses yang beroperasi di luar critical section tidak dapat mencegah proses lain memasuki critical section. ◦ Proses yang ingin masuk critical section akan segera masuk bila dimungkinkan.

�Metode Penyelesaian Peterson const N = 2; var turn : integer; interested : Array[0.

�Metode Penyelesaian Peterson const N = 2; var turn : integer; interested : Array[0. . N-1] of Boolean; procedure enter_critical_section; { } procedure enter_noncritical_section; { } procedure proses 0; begin repeat interested[0] : = true; turn : = 1; while interested[1] and turn=1 do begin end; enter_critical_section; interested[0] : = false; enter_noncritical_section; forever; end; procedure proses 1; begin repeat interested[1] : = true; turn : = 0; while interested[0] and turn=0 do begin end; enter_critical_section; interested[1] : = false; enter_noncritical_section; forever; end;

begin interested[0] : = false; interested[1] : = false; turn : = 1; parbegin

begin interested[0] : = false; interested[1] : = false; turn : = 1; parbegin prosses 0; prosses 1; parend; end.

�Mekanisme kerja peterson sbb : ◦ Sebelum masuk critical section proses memanggil enter_critical_section. ◦

�Mekanisme kerja peterson sbb : ◦ Sebelum masuk critical section proses memanggil enter_critical_section. ◦ Sebelum memanggil enter_critical_section proses memeriksa hingga kondisi aman untuk enter_critical_section. Terjadi busy waiting ◦ Setelah selesai di critical section proses menandai pekerjaan telah selesai dan mengizinkan proses lain masuk

Metode dengan semaphore �Karena terdapat kelemahan yang tidak dapat diterima dari metode dengan busy

Metode dengan semaphore �Karena terdapat kelemahan yang tidak dapat diterima dari metode dengan busy waiting maka perlu dicari metode-metode lain. �Deskripsi Semaphore ◦ Dikemukakan oleh Djikstra ◦ Prinsipnya dua proses atau lebih dapat bekerja sama dengan menggunakan penanda sederhana. ◦ Proses dipaksa berhenti hingga proses memperoleh penanda tertentu. �Semaphore meiliki dua property : ◦ Semaphore dapat diinisialisasi dengan nilai nonnegatif ◦ Terdapat dua operasi yakni Down dan Up.

�Operasi Down ◦ Operasi ini menurunkan nilai semaphore ◦ Jika nilai semaphore menjadi bukan

�Operasi Down ◦ Operasi ini menurunkan nilai semaphore ◦ Jika nilai semaphore menjadi bukan positif maka proses yang mengeksekusinya di-block type semaphore = integer; procedure Down(var s: semapore); begin s : = s - 1; if s<=0 then begin //tempatkan proses pada antrian untuk semaphore s //proses di blocked end;

�Operasi Up ◦ Operasi ini menaikkan nilai semaphore ◦ Memindahkan dari antrian dan menempatkan

�Operasi Up ◦ Operasi ini menaikkan nilai semaphore ◦ Memindahkan dari antrian dan menempatkan satu proses ke senara Ready tidak dapat dinterupsi. type semaphore = integer; procedure Up(var s: semapore); begin s : = s + 1; if s<=0 then begin //pindahkan satu proses P dari antrian untuk semaphore s //tempatkan proses p di senarai ready end;

Mutual exclusion dengan semaphore const N = 2; var s = semaphore; procedure enter_critical_section;

Mutual exclusion dengan semaphore const N = 2; var s = semaphore; procedure enter_critical_section; { } procedure enter_noncritical_section; { } procedure Proses(i : integer); begin repeat Down(s); enter_critical_section; Up (s); enter_noncritical_section; forever; end; begin s : = 1; parbegin Proses (0); Proses (1); parend; end.