Critical Section

4.2. Critical Section

4.2.1. Pengertian

Pada sub pokok bahasan sebelumnya, kita telah mengenal race condition sebagai masalah yang dapat terjadi pada beberapa proses yang memanipulasi suatu data secara konkruen, sehingga data tersebut tidak sinkron lagi. Nilai akhirnya akan tergantung pada proses mana yang terakhir dieksekusi.

Maka bagaimana cara menghindari race condition ini serta situasi-situasi lain yang melibatkan memori bersama, berkas bersama atau sumber daya yang digunakan bersama-sama? Kuncinya adalah menemukan jalan untuk mencegah lebih dari satu proses melakukan proses tulis atau baca kepada data atau berkas pada saat yang bersamaan. Dengan kata lain, kita membutuhkan Mutual Exclusion. Mutual Exclusion adalah suatu cara yang menjamin jika ada sebuah proses yang menggunakan variabel atau berkas yang sama (digunakan juga oleh proses lain), maka proses lain akan dikeluarkan dari pekerjaan yang sama.

Sekarang kita akan membahas masalah race condition ini dari sisi teknis programming. Biasanya sebuah proses akan sibuk melakukan perhitungan internal dan hal-hal lainnya tanpa ada bahaya yang menuju ke race condition pada sebagian besar waktu. Akan tetapi, beberapa proses memiliki suatu segmen kode dimana jika segmen itu dieksekusi, maka proses-proses itu dapat saling mengubah variabel, mengupdate suatu tabel, menulis ke suatu file, dan lain sebagainya, dan hal ini dapat membawa proses tersebut ke dalam bahaya race condition. Segmen kode yang seperti inilah yang disebut Critical Section.

Solusi untuk memecahkan masalah critical section adalah dengan mendesain sebuah protokol di mana proses-proses dapat menggunakannya secara bersama-sama. Setiap proses harus ’meminta izin’ untuk memasuki critical section -nya. Bagian dari kode yang mengimplementasikan izin ini disebut entry section. Akhir dari critical section itu disebut exit section. Bagian kode selanjutnya disebut remainder section.

Struktur umum dari proses Pi yang memiliki segmen critical section adalah:

Gambar 4-4. Critical Section (1)

do { entry section

critical section

exit section remainder section } while (1);

Solusi dari masalah critical section harus memenuhi tiga syarat berikut [Silbeschatz 2004]:

1. Mutual Exclusion. Jika suatu proses sedang menjalankan critical section-nya, maka proses-proses lain tidak dapat menjalankan

critical section mereka . Dengan kata lain, tidak ada dua proses yang berada di critical section pada saat yang bersamaan.

2. Terjadi kemajuan (progress). Jika tidak ada proses yang sedang menjalankan critical section-nya dan ada proses-proses lain yang ingin

masuk ke critical section, maka hanya proses-proses yang yang sedang berada dalam entry section saja yang dapat berkompetisi untuk mengerjakan critical section.

3. Ada batas waktu tunggu (bounded waiting). Jika seandainya ada proses yang sedang menjalankan critical section, maka proses lain memiliki waktu

tunggu yang ada batasnya untuk menjalankan critical section -nya, sehingga dapat dipastikan bahwa proses tersebut dapat mengakses critical section-nya (tidak mengalami starvation: proses seolah-olah berhenti, menunggu request akses ke critical section diperbolehkan).

4.2.2. Solusi Untuk Dua Proses

Ada dua jenis solusi masalah critical section, yaitu:

1. Solusi perangkat lunak. Dengan menggunakan algoritma-alogoritma yang nilai kebenarannya tidak tergantung pada asumsi-asumsi

lain, selain bahwa setiap proses berjalan pada kecepatan yang bukan nol.

2. Solusi perangkat keras. Tergantung pada beberapa instruksi mesin tertentu, misalnya dengan me-non-aktifkan interupsi atau dengan

mengunci suatu variabel tertentu (Lihat: Bagian 4.3).

Selanjutnya akan dibahas sebuah algoritma sebagai solusi masalah dari critical section yang memenuhi tiga syarat seperti yang telah disebutkan di atas. Solusi ini tidak tergantung pada asumsi mengenai instruksi-instruksi perangkat keras atau jumlah prosesor yang dapat didukung oleh perangkat keras. Namun, kita mengasumsikan bahwa insruksi bahasa mesin yang dasar (instruksi-instruksi primitif seperti load, store, dan test ) dieksekusi secara atomik. Artinya, jika dua instruksi tersebut dieksekusi secara konkuren, hasilnya ekuivalen dengan eksekusi instruksi tersebut secara sekuensial dalam urutan tertentu. Jadi, jika load dan store dieksekusi secara konkuren, load akan mendapatkan salah satu dari nilai yang lama atau nilai yang baru, tetapi tidak kombinasi dari keduanya.

Untuk mengilustrasikan proses-proses yang akan masuk ke critical section, kita mengimplementasikan thread dengan menggunakan class Pengguna. Class Algoritma123 akan digunakan untuk menjalankan ketiga algoritma tersebut.

Gambar 4-5. Critical Section (2)

/** * Program implementasi CriticalSectionAlgoritma * dengan menggunakan elemen flag dan elemen kunci * Author: V A Pragantha( [email protected]) * **/

public class CriticalSectionAlgoritma {

public static void main(String args[]) {

int kunci=0; Pengguna user1;

Pengguna user2 ; user1 = new Pengguna(kunci,0);

user2 = new Pengguna(kunci,1); user1.setUser(user2);

user2.setUser(user1); user1.start();

user2.start(); } }

class Pengguna extends Thread {

public Pengguna(int elemenKunci,int noStatus) {

noPengguna = noStatus; kunci = elemenKunci;

} public void setBagianKritis(int t) {

int others = 1-t; kunci = others;

if(t==noPengguna)

{ butuh = true;

System.out.println("\nuser "+noPengguna + " mempersilahkan user lain memakai"+ " dan memberikan kunci");

while( (lain.getFlag() == true) && (lain.getKunci()== others) ) { System.out.println("\nuser lain"+ " mengambil alih kendali"); Thread.yield(); } System.out.println("\ntampaknya user lain"+

" tidak membutuhkan\n"); } else {

lain.setFlag(true); while( (butuh == true) && (kunci == others)

lain.yield(); } }

public void keluarBagianKritis(int t) {

if( t == noPengguna ) {

butuh = false; } else {

lain.setFlag(false); } }

public void run() {

while(true) {

try {

setBagianKritis(noPengguna); System.out.println(" user "+

noPengguna+" sedang menggunakan"+ ", kunci dipegang oleh user "+ kunci);

keluarBagianKritis(noPengguna); System.out.println("user "+ noPengguna+

" selesai memakai"); Thread.sleep(10); } catch(Exception e) {

System.out.println(e); System.exit(0);

public boolean getFlag() {

return butuh; }

public int getKunci() {

return kunci; }

public void setFlag( boolean flag) {

butuh = flag; }

public void setUser( Pengguna p1) {

lain = p1; }

private boolean butuh; private int kunci; private int noPengguna; private Pengguna lain;

Pada algoritma di atas, thread-thread digambarkan sebagai pengguna atau user dan kami membatasi sebanyak 2 pengguna saja. Kedua pengguna ini pada awalnya belum memiliki kunci tetapi hanya nomor pengguna yang berbeda. Ketika salah satu user ingin memasuki critical section , maka ia akan memberikan kuncinya kepada pengguna lain terlebih dahulu sedangkan pengguna lain akan medapatkan giliran dari nomor statusnya beserta kuncinya. Oleh karena itu ia akan diizinkan untuk memasuki critical section-nya. Pada program di atas, yang akan mengatur masuknya suatu thread ke dalam critical section- nya adalah method setBagianKritis . Jika salah satu pengguna selesai menjalankan critical section-nya, ia tidak akan lagi membutuhkan kuncinya, sehingga butuh akan diset menjadi false . Pada program di atas, bagian yang mengatur keluarnya suatu thread dari critical sectionnya adalah keluarBagianKritis .

4.2.3. Solusi Untuk Proses Jamak: Algoritma Tukang Roti

Algoritma ini didasarkan pada algoritma penjadualan yang biasanya digunakan oleh tukang roti, di mana urutan pelayanan ditentukan dalam situasi yang sangat sibuk.

Algoritma ini dapat digunakan untuk memecahkan masalah critical section untuk n buah proses, yang diilustrasikan dengan n buah pelanggan. Ketika memasuki toko, setiap pelanggan menerima sebuah nomor. Sayangnya, algoritma tukang roti ini tidak dapat menjamin bahwa dua proses (dua pelanggan) tidak akan menerima nomor yang sama. Dalam kasus di mana dua proses menerima nomor yang sama, maka proses dengan nomor ID terkecil yang akan dilayani dahulu. Jadi, jika Pi dan Pj menerima nomor yang sama dan i < j, maka

Pi dilayani dahulu. Karena setiap nama proses adalah unik dan berurut, maka algoritma ini dapat digunakan untuk memecahkan masalah critical section untuk n buah proses.

Struktur data umum algoritma ini adalah boolean choosing[n];

int number [n];

Awalnya, struktur data ini diinisialisasi masing-masing ke false dan 0, dan menggunakan notasi berikut: - (a, b) < (c, d) jika a < c atau jika a= c dan b < d - max(a0, ..., an-1) adalah sebuah bilangan k, sedemikian sehingga k >= ai untuk setiap i= 0, ..., n - 1

Gambar 4-6. Algoritma Tukang Roti

do { choosing[i] = true; number[i] = max(number[0], number [1], ..., number [n+1])+1; choosing[i] = false; for (j=0; j < n; j++) {

while (choosing[j]); while ((number[j]!=0) && ((number[j],j) < number[i],i)));

} <foreignphrase>critical section</foreignphrase> number[i] = 0; <foreignphrase>remainder section</foreignphrase> } while (1);

Dokumen yang terkait

ANALISIS EFISIENSI PEMASARAN DAN PENDAPATAN USAHATANI ANGGUR (Studi Kasus di Kecamatan Wonoasih Kotamadya Probolinggo)

52 472 17

Studi Kualitas Air Sungai Konto Kabupaten Malang Berdasarkan Keanekaragaman Makroinvertebrata Sebagai Sumber Belajar Biologi

23 176 28

ANALISIS KOMPARATIF PENDAPATAN DAN EFISIENSI ANTARA BERAS POLES MEDIUM DENGAN BERAS POLES SUPER DI UD. PUTRA TEMU REJEKI (Studi Kasus di Desa Belung Kecamatan Poncokusumo Kabupaten Malang)

23 307 16

PENILAIAN MASYARAKAT TENTANG FILM LASKAR PELANGI Studi Pada Penonton Film Laskar Pelangi Di Studio 21 Malang Town Squere

17 165 2

Analisis Sistem Pengendalian Mutu dan Perencanaan Penugasan Audit pada Kantor Akuntan Publik. (Suatu Studi Kasus pada Kantor Akuntan Publik Jamaludin, Aria, Sukimto dan Rekan)

136 695 18

DOMESTIFIKASI PEREMPUAN DALAM IKLAN Studi Semiotika pada Iklan "Mama Suka", "Mama Lemon", dan "BuKrim"

133 700 21

PEMAKNAAN MAHASISWA TENTANG DAKWAH USTADZ FELIX SIAUW MELALUI TWITTER ( Studi Resepsi Pada Mahasiswa Jurusan Tarbiyah Universitas Muhammadiyah Malang Angkatan 2011)

59 326 21

STRATEGI KOMUNIKASI POLITIK PARTAI POLITIK PADA PEMILIHAN KEPALA DAERAH TAHUN 2012 DI KOTA BATU (Studi Kasus Tim Pemenangan Pemilu Eddy Rumpoko-Punjul Santoso)

119 459 25

STRATEGI PUBLIC RELATIONS DALAM MENANGANI KELUHAN PELANGGAN SPEEDY ( Studi Pada Public Relations PT Telkom Madiun)

32 284 52

FAKTOR-FAKTOR PENYEBAB ORANG TUA MENIKAHKAN ANAK PEREMPUANYA PADA USIA DINI ( Studi Deskriptif di Desa Tempurejo, Kecamatan Tempurejo, Kabupaten Jember)

12 105 72