Producer/Consumer Message Passing Solution
Message passing adalah suatu cara untuk mengkomunikasikan
operasi dari 1 proses ke proses lainnya dengan operasi send dan receive.
Receiver bisa menspesifikasikan apapun, memilih untuk mem-blok ataupun tidak.
Metode message passing ini bisa diterapkan dalam single-processing system,
multi-processing system, dan distributed system. Metode ini tidak memerlukan
shared address spaces.
Operasi send() dapat bersifat synchronous ataupun
asynchronous. Synchronous send akan me-return setelah data dikirm dan memblok
jika buffernya penuh, sedangkan asynchronous send akan me-return segera setelah
I/O dimulai dan akan memblok jika buffer dianggap penuh.
Operasi receive() juga dapat bersifat synchronous ataupun
asynchronous. Synchronous receive akan me-return jika ada pesan dan akan
memblok jika tidak ada pesan, sedangkan asynchronous receive akan mereturn
pesan pertama jika ada 1 pesan dan meretun indikasi jika tidak ada pesan.
Message passing juga bisa dilakukan secara indirect dengan
menggunakan mailbox. Jadi, sebuah pesan akan dikirim ke suatu area tertentu
yang diberi nama (mailbox). Proses-proses akan membaca pesan dari mailbox, jadi
mailbox ini harus dibuat dan dikelola. Sender akan memblok jika mailboxnya
sudah penuh. Keuntungan dari penggunaan mailbox adalah metode ini memungkinkan
komunikasi many-to-many.
Dalam message passing, jika sebuah pesan dikirim balik ke
sender berarti pesan aslinya sudah diterima dengan tepat. Pesan ini juga bisa
dikirm secara piggy-back ke pesan lain baik secara implisit maupun eksplisit.
Message passing juga bisa synchronous ataupun asynchronous dan positif ataupun
negative.
Klik di sini unuk versi DOC.
Berikut adalah penggunaan message passing.
#define MAX
100
void producer(void) {
int item;
message mesg;
while (TRUE){
item = produce_item( );
receive(consumer, &mesg);
create_message(&mesg, item);
send(consumer, &mesg);
}
}
void producer(void) {
int item;
message mesg;
while (TRUE){
item = produce_item( );
receive(consumer, &mesg);
create_message(&mesg, item);
send(consumer, &mesg);
}
}
void
consumer(void) {
int item, i;
message mesg;
for (i = 0; i < MAX; i++)
send(producer, &mesg);
while (TRUE) {
receive(producer, &mesg);
item = extract_item(&mesg);
send(producer, &mesg);
consume_item(item);
}
}
int item, i;
message mesg;
for (i = 0; i < MAX; i++)
send(producer, &mesg);
while (TRUE) {
receive(producer, &mesg);
item = extract_item(&mesg);
send(producer, &mesg);
consume_item(item);
}
}
Referensi
http://fendychandra.blog.binusian.org/2014/10/19/pertemuan-4-operating-system/
http://is.its.ac.id
http://sesindo.org
http://isico.info
http://is.its.ac.id
http://sesindo.org
http://isico.info
0 comments:
Post a Comment