Mutual Exclusion Edi Sugiarto, S.Kom
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 berkas2 di printer sehingga seolah2 printer dapat digunakan secara simultan oleh proses2. 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. 3
Contoh Algoritma Program Program Give_File_to_spooler; Var in : Integer; berkasA, berkasB : File; Procedure Store (Berkas : File, next_slot : Integer); {Untuk menyimpan berkas pada slot ke next_slot} Procedure ProsesA; next_free_slot : Integer; Begin next_free_slot:=in; store(BerkasA, next_free_slot); in:=next_free_slot+1; End; 4
next_free_slot:Integer; Begin next_free_slot:=in; Procedure ProsesB; Var next_free_slot:Integer; Begin next_free_slot:=in; store(BerkasB, next_free_slot); in:=next_free_slot+1; End; in:=0; Repeat Parbegin ProsesA; ProsesB; Parend Forever End. 5
Situasi yang membuat kacau : Proses A {in=9} Store berkasA to slot[next_free_slot] {berkasA disimpan di slot-9, menimpa berkasB} in ← next_free_slot + 1 {in=10} Proses B Next_free_slot <- in Store berkasB to slot[next_free_slot] {berkas B disimpan di slot 9} In <- next_free_slot + 1 {penjadwal menjadwal A berjalan} Berkas A menimpa berkas B, sehingga B tak pernah mendapat jatah cetakannya 6
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 berkasB di slot ke-9 Proses A dijadwalkan kembali dan juga menyimpan berkasA di sot ke-9. Berkas B tertimpa berkas A, sehingga proses B tidak pernah memperoleh cetakan 7
Penjelasan Terdapat dua proses atau lebih sdg membaca/menulis data bersama (variabel in) dg hasil akhir bergantung jalannya proses2. 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. 8
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.000, terdaftar di kantor cabang di Jogja. Pada suatu saat program aplikasi di kantor cabang di Jakarta melayani penyetoran Rp. 3.000.000 ke rekening A tsb. Program aplikasi membaca saldo akhir rekening A. 9
Pada waktu hampir bersamaan, di kantor cabang di Jogja juga terjadi transaksi yaitu penyetoran Rp. 5.000.000 ke rekening A. Program aplikasi di Jogja membaca saldo masih Rp. 1.000.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.000. Setelah itu program aplikasi di kantor cabang Jakarta menimpa hasil tsb dg Rp. 4.000.000. Hasil akhir yg diperoleh adlh Rp. 4.000.000 yg seharusnya Rp. 10.000.000. Program aplikasi di Jakarta dilakukan scr cepat menulis ke rek A sehingga dihasilkan Rp. 4.000.000, Setelah itu program aplikasi di ka. Cab. Jogja menimpa hasil tsb dg Rp. 6.000.000. Hasil lebih baik dibanding skenario pertama, tetapi masih di bawah yg seharusnya yaitu Rp. 10.000.000. 10
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 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 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 memperoleh gambaran mekanisme penjaminan mutual exclusion lebih jelas Metode variabel lock sederhana
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 kode kritis} Procedure ProsesA; Begin While lock<>0 do begin end; Lock:=1; enter_critical_section; Lock:=0; End;
Procedure ProsesB; Begin While lock<>0 do begin end; Lock:=1; enter_critical_section; Lock:=0; End; Repeat parbegin prosesA prosesB Parend Forever End
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 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; Procedure proses0; Begin repeat while turn<>0 do begin end; enter_critical_section; turn:=1; enter_non_critical_section forever End;
Procedure proses1; Begin repeat while turn<>1 do begin end; enter_critical_section; turn:=0; enter_non_critical_section forever End; parbegin proses0; proses1; end;
Skenario yang terjadi adalah : 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 {turn=0} While turn<>0 do begin end; Enter_critical_section; Turn:=1; Enter_non_critical_section Proses B {turn=1} While turn<>1 do begin end; Turn:=0;
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 Waiting sbb : Metode secara Perangkat Lunak 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 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..N-1] of Boolean procedure enter_critical_section; { } procedure enter_noncritical_section; procedure proses0 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; end; enter_critical_section; turn:=1; enter_noncritical_section; forever
interested[0] := false; interested[1] := false; turn := 1; parbegin procedure proses1 begin repeat intersted[1] := true; turn:=1; while interested[0] do if turn = 0 then interested[1] := false; while turn = 0 do begin end; end; enter_critical_section; turn:=0; enter_noncritical_section; forever begin interested[0] := false; interested[1] := false; turn := 1; parbegin proses0; proses1; parend; end.
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..N-1] of Boolean; procedure enter_critical_section; { } procedure enter_noncritical_section; procedure proses0; 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 proses1; 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;
begin interested[0] := false; interested[1] := false; turn := 1; parbegin prosses0; prosses1; parend; end.
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 dukungan Perangkat Keras Metode pematian interupsi Mekanisme dalam metode ini suatu proses mematikan interupsi ke pemroses dan segera memasuki critical section. Proses kembali mengaktifkan interupsi segera setelah meninggalkan critical section. Cara pematian interupsi mengakibatkan : Pemroses tidak dapat beralih ke proses lain karena interupsi clock dimatikan sehingga penjadwal pun tidak dieksekusi Proses dapat memakai memori bersama tanpa takut intervensi oleh proses lain, karena memang tidak ada proses yang dieksekusi saat itu.
Kelemahan utama Bila pross yang mematikan interupsi mengalami gangguan (crash) maka proses tidak akan pernah dapat menghidupkan interupsi kembali, kejadian ini mengakibatkan kematian seluruh sistem. Beragam intruksi disediakan pemroses guna membantu implementasi mutual exclusion : Tsl (test and set lock) Tas atau ts (test and set) : IBM S/360 Cs (compare and set) : IBM 370 Series Xchg (exchange), digunakan Intel x86
Metode dengan instruksi Test and Set Lock Instruksi tsl membaca isi memori ke register dan menyimpan nilai bukan nol ke alamat memori tsb. Tidak ada proses yang mengakses memori hingga instruksi berakhir Pemroses yang mengeksekusi tsl mengunci bus memori, mencegah proses lain mengakses memori Dengan intruksi tsl maka dapat menggunakan flag untuk koordinasi pemakaian memori bersama.
Metode dengan instruksi Exchange Instruksi xchg disediakan mesin. Intel menyediakan intruksi ini, Instruksi ini menukarkan dua isi memori. Dalam pascal intruksi dapat ditulis sbb Procedure xchg(var A, B : data_type) Var t: data_type; Begin t:=A; A:=B; B:=t; End;
Keunggulan pendekatan dengan instruksi mesin : Sederhana dan mudah diverifikasi Dapat diterapkan ke sembarang jumlah pemroses baik di pemroses tunggal maupun banyak pemroses yang memakai memori bersama. Dapat digunakan untuk mendukung banyak critical region, masing-masing critical region didefinisikan dengan suatu variabel.
Kelemahan Merupakan metode dengan busy waiting, sangat tidak efisien. Selagi proses menunggu memasuki critical region, proses berlanjut mengkonsumsi waktu pemroses. Adanya busy waiting memungkinkan deadlock dan startvation.
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 non- negatif Terdapat dua operasi yakni Down dan Up.
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 //tempatkan proses pada antrian untuk semaphore s //proses di blocked end;
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 //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; { } 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.