Jangan Berpikir Begitu, Tapi Berpikirlah Memang Begitu

Photobucket Photobucket

Statistik Pengunjung

07.15 | Posted in


Pada tahun 1967, Djikstra mengajukan suatu konsep dimana kita memakai suatu variable integer untuk menghitung banyaknya proses yang sedang aktif atau yang sedang tidur. Jenis variabel ini disebut Semaphore. Semaphore adalah pendekatan yang diajukan oleh Djikstra, dengan prinsip bahwa dua proses atau lebih dapat bekerja sama dengan menggunakan penanda-penanda sederhana. Seperti proses dapat dipaksa berhenti pada suatu saat, sampai proses mendapatkan penanda tertentu itu. Sembarang kebutuhan koordinasi kompleks dapat dipenuhi dengan struktur penanda yang cocok untuk kebutuhan itu.
Semaphore mempunyai dua sifat, yaitu:
1. Semaphore dapat diinisialisasi dengan nilai non-negatif.
2. Terdapat dua operasi terhadap semaphore, yaitu Wait dan Signal.
Semaphore S merupakan variabel bertipe integer yang diakses dengan 2 operasi yang bersifat atomic, yaitu wait dan signal. Operasi-operasi ini diwakili dengan P (wait) dan V(signal), sebagai berikut:
wait(S) : while S < 0 do no_op;
S:= S – 1;
signal(S) : S:= S + 1;
Misalkan ada 2 proses yang sedang berjalan secara simultan, yaitu proses P1 dengan pernyataan S1 dan proses P2 dengan S2. Andaikan kita mengharapkan S2 baru akan dijalankan hanya setelah S1 selesai. Hal ini dapat dilakukan dengan menggunakan bantuan sempahore synch (dengan nilai awal = 0) yang akan di-share oleh kedua proses.
Untuk Proses P1:
S1;
signal (synch);
Untuk Proses P2:
wait(synch);
S2;
Karena nilai awal untuk variabel ‘synch’ adalah nol, maka P2 akan mengeksekusi S2 hanya setelah P1 mengerjakan instruksi ‘signal(synch)’ setelah eksekusi S1.
Salah satu kerugian dari penggunaan sempahore di atas adalah adanya busy waiting. Apabila suatu proses menempati critical section, dan ada proses lain yang ingin masuk critical section, maka akan terjadi iterasi secara terus-menerus. Hal ini akan menimbulkan masalah pada sistem yang menggunakan konsep multiprogramming.
Untuk menghindari busy waiting, dilakukan modifikasi pada operasi wait dan signal. Jika suatu proses sedang mengeksekusi operasi wait, maka nilai semaphore menjadi tidak positif. Pada saat ini, proses akan memblok dirinya sendiri dan ditempatkan pada waiting queue. Proses yang sedang diblok akan menunggu hingga sempahore S di-restart, yaitu pada saat beberapa proses yang lain mengeksekusi operasi signal. Suatu proses akan di-restart dengan operasi wakeup, yang akan mengubah proses dari keadaan waiting ke ready. Untuk mengimplementasikan hal ini, semaphore dirancang dalam bentuk record:
type sempahore = record;
value: integer;
L: list of process;
end;
Var S: sempahore;



Semaphore mempunyai 2 jenis operasi, yaitu:
1. Operasi Down
Operasi ini menurunkan nilai semaphore, jika nilai semaphore menjadi non-positif atau negatif maka proses yang dicegah untuk mengeksekusi critical section.
Type Semaphore = Integer,
Procedure Down(Var: semaphore);
Begin
s := s-1;
if s <= 0 Then
Begin
Tempatkan antrian pada antrian untuk semaphores
Proses diblocked
End;
End;

Operasi Down adalah atomic, tidak dapat diinterupsi sebelum diselesaikan. Jika dimulai, tak ada proses lain yang dapat mengakses semaphore sampai operasi selesai atau di-blocked.
2. Operasi UP
Operasi Up berfungsi untuk menaikkan nilai semaphore. Jika satu proses atau lebih di-blocked pada semaphore itu tak dapat menyelesaikan operasi down, maka salah satu dipilih oleh sistem dan menyelesaikan operasi down-nya. Urutan proses yang dipilih tidak ditentukan oleh Djikstra, dapat dipilih secara acak.
Type Semaphore = Integer,
Procedure Down(Var: semaphore);
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;
End;

Adanya semaphore mempermudah persoalan mutual exclusion. Skema penelesaian mutual exclusion mempunyai bagan sebagai berikut:
Cons N = 2;
Var S:semaphore;
Procedure enter_critical_section;
{
mengerjakan kode-kode kritis
}
Procedure enter_noncritical_section;
{
mengerjakan kode-kode tak kritis
}
ProcedureProses(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;

Sebelum masuk critical selection, proses melakukan down, bila berhasil maka proses masuk ke critical selection, bila tidak berhasil maka proses di-bolcked atas semaphore itu. Proses yang di-blocked akan dapat melanjutkan kembali bila proses yang ada di critical selection keluar dan melakukan operasi up sehingga menjadikan proses yang di-blocked ready dan melanjutkan sehingga operasi down-nya berhasil.


Category:
��

Comments

0 responses to "Pengertian Semaphore"

Buku Tamu