Kamis, 01 Januari 2015

Interprocess Communication (IPC)

Interprocess Communication(atau biasa disingkat IPC) adalah alat komunikasi antar process yang berbeda. Berbeda dengan multithread dalam 1 process yang bisa berkomunikasi langsung, multithread dalam beda process harus menggunakan IPC karena sebuah process tidak dapat mengakses memory process lainnya.

IPC dapat dilakukan dengan berbagai metode diantaranya:
  • Files, adalah sebuah record yang disimpan dalam disk yang dapat diakses oelh setiap proses. Metode ini dapat dijalankan di kebanyakan OS.
  • Signal, adalah komunikasi yang menggunakan perintah untuk mengirim dari satu proses ke proses lainnya. Metode ini dapat dijalankan di kebanyakan OS.
  • Socket, Sebuah aliran data yang dikirim melalui interface jaringan, baik untuk proses yang berbeda pada komputer yang sama atau komputer lain. Metode ini dapat dijalankan di kebanyakan OS.
  • Message Queue, adalah sebuah data stream anonim yang mirip dengan metode Pipe, tetapi Message Queue menyimpan dan mengambil informasi dalam bentuk packets. Metode ini dapat dijalankan di kebanyakan OS.
  • Pipe, adalah sebuah aliran data dua arah yang dihubungkan melalui standar input (stdin) dan output (stdout) dan membaca karakter demi karakter. Metode ini dapat dijalankan di semua sistem yang mendukung POSIX (Portable Operating System Interface), Windows.
  • Named Pipe, adalah implementasi Pipe melalui sebuah file pada sistem file, bukan melalui standar input dan output. Metode ini dapat dijalankan di semua sistem yang mendukung POSIX (Portable Operating System Interface), Windows.
  • Semaphore, adalah sebuah struktur sederhana yang mensinkronisasikan thread atau proses yang bekerja pada sumber daya yang sama. Metode ini dapat dijalankan di semua sistem yang mendukung POSIX (Portable Operating System Interface), Windows.
  • Shared Memory, adalah proses yang memiliki akses ke memori yang sama, sehingga memungkinkan semua proses untuk mengubah dan membaca perubahan yang dilakukan oleh suatu proses. Metode ini dapat dijalankan di semua sistem yang mendukung POSIX (Portable Operating System Interface), Windows.
  • Message Passing, adalah proses komunikasi antar bagian sistem untuk membagi variabel yang dibutuhkan. Proses ini menyediakan dua operasi yaitu mengirim pesan dan menerima pesan. Bila dua buah sistem ingin berkomunikasi satu sama lain, maka harus dibuat sebuah link komunikasi antara kedua sistem tersebut. Setelah itu, kedua bagian itu dapat saling bertukar pesan melalui link komunikasi tersebut. Metode ini digunakan di paradigma MPI, Java RMI, CORBA, DDS, MSMQ, Mailslots, QNX.
  • Memory-mapped File, adalah sebuah file yang dipetakan ke RAM dan dapat dimodifikasi dengan mengubah alamat memori secara langsung. Metode ini dapat dijalankan di semua sistem yang mendukung POSIX (Portable Operating System Interface), Windows.
     
SOCKET
adalah interface pada jaringan yang menjadi titik komunikasi antarmesin pada Internet Protocol, dan tentunya tanpa komunikasi ini, tidak akan ada pertukaran data dan informasi jaringan. Socket terdiri dari elemen-elemen utama sebagai berikut:
(1)    Protokol.
(2)    Local IP.
(3)    Local Port.
(4)    Remote IP.
(5)    Remote Port.
Komunikasi socket jaringan memang tidak mengenal lelah, pertukaran data terjadi terus-menerus dan memegang peranan vital.Bayangkan sebuah server game online yang berkomunikasi tanpa henti, dimainkan oleh entah berapa banyak client yang tersebar. Ini merupakan salah satu contoh aplikasi dari sekian banyak aplikasi yang menggunakan socket jaringan untuk saling berkomunikasi dan bertukar data.

Potongan kode untuk membuat, membaca, menulis dan menghapus pipe:

Untuk membuat pipe, anda bisa menggunakan fungsi mkfifo(<namafifo>,< permission>);
Permission yang saya sarankan adalah 0666, yang berarti semua orang bisa membaca dan menulis didalamnya.

Menulis:
char  phrase[] = “when does the narwhal bacon”;
int main () {
char[]=”/tmp/fifo/”;
int fd1;                       
fd1 = open ( “mypipe”, O_WRONLY );

write (fd1, phrase, strlen ( phrase));  
close (fd1);                                                      
}

Membaca:
int main () {
int fd1;                                            
char buf [100];                  
fd1 = open ( “mypipe”, O_RDONLY );

read ( fd1, buf, 100 );                
printf ( “%s\n”, buf );             
close (fd1);                             
}

Untuk menghapus pipe, anda tinggal menggunakan fungsi unlink(<nama pipe>);

Tidak ada komentar:

Posting Komentar