Skip to main content

Cara Kerja Semaphore Sebagai Salah Satu Teknik Sinkronisasi Task

Metode dalam sinkronisasi

Dikenal tiga alternatif dalam menyediakan sinkronisasi task, yaitu:
  • Semaphores
  • Monitors
  • Message Passing
Semaphores

Semaphore dimanfaatkan oleh Dijkstra (1965) dalam upaya menyediakan competition synchronization melalui mutually exclusive access pada shared data structures. Berikut beberapa karakteristik dari semaphore:
  • Semaphore adalah suatu struktur data yang terdiri dari sebuah counter dan antrian (queue) untuk menyimpan task descriptors
  • Task descriptor adalah suatu struktur data yang menyimpan informasi yang berkaitan dengan execution state dari suatu task
  • Semaphores dapat juga digunakan untuk mengimplementasi guards, cara untuk memungkinkan suatu guarded code yang mengakses shared data structures, dieksekusi hanya jika suatu kondisi terpenuhi
  • Semaphores hanya mempunyai dua operasi, wait dan release (asalnya disebut P and V oleh Dijkstra)
  • Semaphores dapat digunakan untuk menyediakan competition synchronization maupun cooperation synchronization
Cooperation Synchronization with Semaphores 
Berikut ini adalah contoh penggunaan semaphore untuk shared buffer pada kasus producer-consumer problem:

Buffer diimplementasi sebagai ADT (Abstract Data Type) dengan operasi DEPOSIT dan FETCH sebagai satu satunya cara untuk mengakses buffer

• Dua buah semaphores digunakan untuk cooperation, yaitu : emptyspots and fullspots

Semaphore counters digunakan untuk menyimpan informasi tentang banyaknya emptyspots dan fullspots di dalam buffer

DEPOSIT diawali oleh pengecekan emptyspots untuk mengetahui apakah ada slot kosong di dalam buffer

• Jika ada, maka nilai counter dari emptyspots dikurangi (decremented) dan penyisipan ke dalam buffer dilakukan

• Jika tidak, maka task pemanggil  (caller) ditempatkan ke dalam antrian (queue) untuk mendapatkan emptyspots

• Jika DEPOSIT selesai dijalankan, maka counter untuk fullspots harus ditambah (incremented)

FETCH diawali oleh pengecekan fullspots untuk mengetahui jika di dalam buffer terdapat value
  • Jika ada fullspot, maka counter untuk fullspots dikurangi (decremented) dan nilai yang tersimpan dalam buffer dihilangkan (removed)
  • Jika tidak ada values di dalam buffer, maka task pemanggil (caller) harus ditempatkan pada antrian (queue) untuk fullspots
  • Jika eksekusi FETCH selesai, counter untuk emptyspots harus ditambah (incremented).
  • Operasi FETCH dan DEPOSIT berjalan menggunakan semaphore yang mempunyai dua operasi yaitu wait and release
Semaphores: Wait and Release Operations
wait(aSemaphore) 
if aSemaphore’s counter > 0 then
decrement aSemaphore’s counter
else
put the caller in aSemaphore’s queue
attempt to transfer control to a ready task
-- if the task ready queue is empty,
-- deadlock occurs
end 
release(aSemaphore) 
if aSemaphore’s queue is empty then
increment aSemaphore’s counter
else
put the calling task in the task ready queue
transfer control to a task from aSemaphore’s queue
end

Producer and Consumer Tasks
semaphore fullspots, emptyspots;
fullstops.count = 0;
emptyspots.count = BUFLEN; 
task producer;
loop
-- produce VALUE –-
wait (emptyspots); {wait for space}
DEPOSIT(VALUE);
release(fullspots); {increase filled}
end loop;
end producer; 
task consumer;
loop
wait (fullspots);{wait till not empty}}
FETCH(VALUE);
release(emptyspots); {increase empty}
-- consume VALUE –-
end loop;
end consumer;

Evaluasi pada Semaphores
  • Kesalahan dalam penggunaan semaphores dapat menyebabkan gagalnya cooperation synchronization, misalnya buffer menjadi overflow jika wait dari fullspots tertinggal dalam penulisannya
  • Kesalahan dalam penggunaan semaphores dapat menyebabkan gagalnya competition synchronization, misalnya program mengalami deadlock jika release dari access tertinggal dalam penulisannya

Comments

Popular posts from this blog

Pengertian Binding dalam Bahasa Pemrograman dan Kapan Terjadinya

Binding dimaksudkan sebagai pengikatan (association) antara suatu entity dengan atributnya, misalnya binding/pengikatan antara suatu variable dengan tipe datanya atau dengan nilainya, atau dapat juga antara suatu operasi dengan simbol, misalnya simbol + dikenali sebagai operasi penjumlahan atau simbol ^ dikenali sebagai operasi pangkat, dll.  Peristiwa binding dan kapan terjadinya binding (biasanya disebut dengan binding time ) berperan penting dalam membicarakan semantics suatu bahasa pemrograman. Beberapa kemungkinan binding time adalah:

Latihan Soal Jawab Matematika Diskrit

Berikut di bawah ini adalah latihan soal jawab untuk matematika diskrit dengan topik-topik: Pernyataan Logika Circuits dan Ekspresi Boolean Argumen (valid/tidak valid) Teori Himpunan Permutasi Fungsi --o0o-- Pernyataan Logika 1. Buatlah tabel kebenaran untuk menentukan yang mana tautology dan yang mana contradiction dalam pernyataan logika (a) dan (b) di bawah ini: a. (p ∧ q) ∨ (∼p ∨ (p ∧ ∼q)) b.  (p ∧ ∼q) ∧ (∼p ∨ q)

Contoh proses normalisasi relasi dari UNF – 1NF – 2NF – dan 3NF

Dalam posting tulisan tentang: “Tujuan dan Manfaat Normalisasi dalam Perancangan Database” , kita sudah mempelajari tentang: “Apa itu normalisasi” dan “Mengapa kita perlu melakukan normalisasi”. Kedua pertanyaan itu sudah terjawab dalam tulisan tersebut.  Kemudian dalam posting tulisan tentang: “Konsep Ketergantungan Fungsional, Normalisasi, dan Identifikasi Primary Key dalam Perancangan Sistem Database” , kita sudah mempelajari suatu konsep penting yang digunakan untuk melakukan normalisasi, yaitu konsep ketergantungan fungsional yang terdiri dari ketergantungan penuh, ketergantungan parsial atau sebagian, dan ketergantungan transitif. Proses normalisasi pertama-tama dilakukan dengan mengidentifikasi adanya ketergantungan-ketergantungan tersebut dalam relasi-relasi dan kemudian menghilangkannya. Cara melakukan normalisasi, mengidentifikasi berbagai macam ketergantungan, dan menghilangkan ketergantungan pada relasi-relasi bisa dipelajari ulang dalam postingan tulisan di at