Posted by : Pangeran1diot Jumat, 08 April 2016

Masalah – masalah pada IPC :

Race Condition :
Suatu kondisi dimana dua atau lebih proses mengakses shared memory / data pada saat yang bersamaan dan hasil akhirnya tidak sesuai dengan yang dikehendaki
Contoh rase condition :
    Print spooler
    Contoh : berupa kumpulan data-data yang akan di cetak.
    Spooler directory



    Proses A  cek slot input yang kosong (7) untuk mencetak suatu data dan stop
    Interupsi ………
    Proses B  meletakkan data yang akan di print pada slot kosong tersebut (7) dan stop (slot kosong berikutnya adalah 7+1=8)
    :  prosesor mengerjakan proses lain
    Proses A dilanjutkan  meletakkan data yang akan di print di slot (7), sehingga meng-overwrite data proses B yang diletakkan di slot (7)
    Maka proses B tidak akan dilaksanakan, dan tidak akan terdeteksi terjadi kesalahan.

Untuk menghindari race condition maka harus diatur agar 2 proses yang mempunyai critical section yang sama tidak memasuki critical section pada saat yang bersamaan.

Critical Section / seksi kritis :
Bagian dari program yang mengakses shared memory, yang dapat menyebabkan terjadinya race condition.
4 kondisi untuk mencegah race condition :
a.    Tidak ada 2 proses yang memasuki critical sectionnya secara bersamaan  / simultan
b.    Tidak ada asumsi yang dibuat yang berhubungan dengan kecepatan dan jumlah CPU
c.    Tidak ada proses yang berjalan diluar critical section-nya yang dapat memblokir proses-proses lain
d.    Tidak ada proses yang menunggu selamanya untuk masuk ke critical section-nya.

Mutual Exclusion (MuTex) With Busy Waiting :
Jika suatu proses sedang mengakses shared memory di critical sectionnya, tidak ada satu prosespun yang dapat memasuki critical section (mutual exclusion) dan menyebabkan masalah.

Jenis-jenis mutual exclusion :
1.    Disabling interrupt / mematikan interupsi
Dengan cara mematikan interupsi yang masuk pada saat proses sedang berada pada critical section-nya. Cara ini kadang cukup berguna untuk kernel tetapi tidak untuk user. Dan cara inipun tidak terlalu baik untuk CPU yang jumlahnya lebih dari satu, dimana disable interrupt hanya mengenai CPU yang sedang menjalankan proses itu dan tidak berpengaruh terhadap CPU lain

2.    Lock  variables
Setiap proses yang akan mengakses ke critical section-nya harus meng-cek lock variable. Jika 0 berarti proses dapat memasuki critical section-nya dan jika 1 maka proses harus menunggu sampai lock variable = 0. Kelemahannya adalah 2 proses masih dapat memasuki critical section-nya pada saat yang bersamaan. Sewaktu satu proses meng-cek lock variable = 0, pada saat akan men-set 1 ada interupsi untuk melaksanakan proses lain yang juga ingin memasuki critical sectionnya, maka akan terjadi race condition.

3.    Strict alternation
Dengan mengamati variable turn untuk menentukan siapa yang akan memasuki critical section-nya bukanlah ide yang baik jika proses lebih lambat dari yang lain.
Contohnya :
While (true)
{
    while (turn != 0)             /*wait*/;
    critical_section ( );
    turn = 1;
    noncritical_section ( );
}
while (true)
{
    while (turn != 1)            /*wait*/;
    critical_section ( );
    turn = 0;
noncritical_section ( );
}

4.    Peterson’s Solution
Proses tidak akan diteruskan sampai while terpenuhi, bila interested[other] = TRUE, maka proses akan menunggu sampai FALSE.
Kelemahannya : jika proses memanggil enter_region-nya secara hampir bersamaan, yang disimpan di turn adalah data yang ditulis terakhir.
Contohnya :
# include “prototype.h”
# define FALSE    0
# define TRUE    1
# define N        2        /*banyaknya proses*/

int turn;
int interested [N];            /*nilai awal di-set = 0 (false)*/
void enter_region(int process)        /*proses = 1 atau 0*/

{
int other;                /*jumlah proses lainnya*/
other = 1 – process;            /*proses lainnya*/
interested[process] = TRUE;        /*menunjukkan tertarik*/
turn = process;                /*set flag*/
while (turn==process && interested[other] == TRUE)
}

void leave_region(int process)        /*proses yang selesai*/
{
interested[process] = FALSE;     /*meninggalkan critical region*/
}

5.    Test and Set Lock Instruction / Instruksi TSL
Dengan bantuan hardware, menentukan siapa yang berhak memasuki critical_region (section)
Contoh :
Enter_region :
Tsl reg,flag                | copy flag ke reg dan set flag = 1
Cmp reg,#0            | apakah flag = 0
Jnz enter_region            |jika <> 0 loop lagi
    Ret                |return ke caller, masuk critical region
   
Leave_region :
    Mov flag, #0            |simpan 0 ke flag
    Ret                |return ke caller
Proses harus memanggil ini pada saat yang tepat.
Kelemahan utama dengan busy waiting adalah menyita banyak waktu CPU dan problem inversi prioritas.

6.    Sleep and Wake Up
Mekanismenya : proses akan di blok / tidur (sleep) apabila tidak bisa memasuki critical_section-nya dan akan dibangunkan (wake up) / ready apabila resource yang diperlukan telah tersedia.
SLEEP : sistem call membuat proses yang memanggil di blok (blocked)
WAKE UP : sistem call yang membuat proses yang memanggil menjasi ready
Contoh :
Procedure-Consumer Problem (bounded buffer)
Beberapa proses share buffer dengan ukuran tetap
    Jika buffer penuh producer sleep
    Jika buffer kosong consumer sleep
    Jika buffer mulai kosong producer wake up
    Jika buffer terisi consumer wake up
Masih ada kemungkinan terjadi race condition

7.    Semaphore (Dijkstra, 1965)
Meng-cek, mengubah dan sleep        1 instruksi yang
Mengubah dan wake up            tdk dpt dipisahkan
Instruksi tersebut sangat berguna untuk sinkronisasi.
Dapat diimplementasikan untuk memecahkan producer-consumer problem.
Mekanisme-nya menggunakan :
-    variabel integer untuk menghitung jumlah wake up yang disimpan / tertunda
-    bernilai 0 bila tidak ada wake up yang disimpan, bernilai positif bila ada wake up yang tertunda

Dua macam operasi terhadap semaphore :
1.    DOWN(S) :
If S >= 0 then
            S := S-1;
            Else sleep (S)
End;

2.    UP(S) :
S := S + 1;
If S <= 0 then wakeup(S)
End;

Operasi DOWN dan UP merupakan operasi yang bersifat Atomic (Atomic Action).

8.    Event Counters (Reed and Kanodia, 1979)
Tiga operasi terhadap event counter (E) :
1.    Read (E) : return current value of E
2.    Advance (E) : Atomically increment E by 1
3.    Wait until E has a value of v or more

9.    Monitor
-    Higher level synchronization primitive.
-    Kumpulan prosedur, variabel dan struktur data yang dipaket menjadi satu modul atau paket.
-    Proses bisa memanggil prosedur dalam monitor, tetapi tidak dapat mengakses langsung struktur data internal dari monitor.

10.    Message Passing

Menggunakan 2 primitive :
1.    send (destination, &message)
2.    receive (source, &message)
Beberapa isu pada message passing system : message lost; acknowledgement; domains; authentication; performance

Leave a Reply

Subscribe to Posts | Subscribe to Comments

Jam

Diberdayakan oleh Blogger.

Sosial Media

Pet

Bantu saya dalam pemeliharan Hamster
- Beri makan dengan cara mengklik layar disekitar pet
- Klik lingkaran kuning

- Copyright © 2016 -STMIK Profesional Makassar- Tugas :   - Edited by :Ilham Surianto (05134171) -