Sunday, November 9, 2014

Shared Memory (Inter Process Communication) / PROGRAMMING

Unknown
INTER PROCESS COMMUNICATION (IPC)

Hii, semua kembali lagi bersama saya Harry...Karena tuntutan untuk memajukan bangsa dan generasi muda, maka saya akan memakai Bahasa Indonesia untuk membuat postingan-postingan selanjutnya :D (Sorry for international readers, from now on I'll be using my mother Language "Bahasa Indonesia" for my future postings. Maybe you can translate this post via Google Translate!!Enjoyy :D)

Setelah kemarin kita telah membahas bagaimana cara meng-instalasi Linux via Vbox by Oracle, saatnya kita fokus pada sistem yang dijalankan pada Linux). Pada dasarnya, Linux adalah sebuah Open Software jadi kita lebih leluasa untuk mengotak-atik sistemnya, khususnya para programmer yang ingin lebih mengambangkan linux sesuai "cita rasa" yang mereka inginkan. Tidak dipungkiri, bahwa banyak sekali model-model distro Ubuntu di dunia, hal itu berkat para programmer yang terus mengeluarkan Linux versi mereka sendiri. Well, kita belum akan membuat Linux versi kita sendiri. Tapi paling tidak kita bisa mengutak-atik sedikit dan menggunakan sistem Linux yang ada untuk keperluan kita :D

Inter Process Communication --> Komunikasi antar Proses

Pada dasarnya proses adalah program yang sedang di eksekusi. Nah, tidak dipungkiri bahwa kadangkala ada 2 proses yang sedang berjalan bersamaan/bergantian dan kedua proses itu menggunakan resource yang sama. Maka dari itu kedua proses ini, butuh saling berhubungan untuk menggunakan resource itu. Bagaimana cara berhubungannya?:O

Of course, dengan menggunakan IPC tadi. IPC modelnya ada banyak, misal:

  • Shared Memory
  • Processes Semaphores
  • Mapped memory
  • Pipes
  • Sockets
Diatas adalah beberapa contoh dari IPC dan nantinya kita akan lebih mendalami tentang Shared memory...(yang lainnya cari sendiri di google yaa, banyak kok :p)

Biasanya untuk model penggunaan IPC ini, kita memakai classical problem yaitu client-server. Problem ini didasari pada proses Server yang mengupdate jumlah barang misal dan Client  yang mengambil barang. Nah, kedua proses ini harus saling berkomunikasi supaya saling tahu. 

Belajar pada bidang Computer Science sebenarnya adalah hal yang mudah. Mengapa? Karena komputer dibangun untuk memudahkan hidup manusia dengan melihat kebiasaan-kebiasaan / problem klasik yang harus diselesaikan oleh manusia. Misal pada problem Client-Server hal itu seperti ada seseorang yang pergi ke sebuah toko dan di toko sana si pelanggan ingin membeli sebuah barang. Maka pelanggan tersebut akan bertanyak kepada toko apakah barangnya ada? dan jika ada maka client akan membeli dan stok toko pun akan berkurang. 

Nah proses komunikasi itu lah yang dalam computer science kita sebut IPC atau Komunikasi antar Proses.

SHARED MEMORY

Mengapa menggunakan shared memory?
  1. Paling cepat dari semua IPC
  2. Easy to implement
Shared memory merupakan IPC yang paling cepat, karena proses-proses yang ada hanya menggunakan 1 blok memori yang sama. Jadi tidak ada proses peng-kopian atau segala macam lainnya.

Shared memory juga sangat mudah untuk diemplementasikan. Mengapa? Jika anda seorang programmer dan mengenal Bahasa C, maka shared memory ini sangat mudah untuk dibuat dalam sistem karena hanya mengandalkan pointer-pointer saja. 

Memory Model

Karena kita akan menggunakan blok/segment pada memori untuk mengaplikasikan Shared Memory ini, maka kita harus melakukan attach dan deattach pada memori. Jangan lupa, kita juga harus meminta alokasi memori/mengalokasikan memori untuk variable/fungsi yang akan digunakan bersama-sama dengan proses lain.

Mari kita mulai dalam programmingnya...
Yang anda butuhkan:
1. Library C-nya

Untuk membuat sebuah shared memory, C telah memberi kita librarynya, yaitu #include<sys/shm.h> -->shm=shared memory dan #include<sys/ipc.h> -->untuk IPCnya (karena shm merupakan IPC)

2. Fungsi-fungsi yang ada dalam #include<sys/shm.h>

int shmget(key_t key, size_t size, int shmflg);

key_t key == angka terserah sebagai identifier segment memori anda
size_t size == berapa size yang anda berikan untuk 1 segment memori (dalam kasus ini tidak terlalu besar, karena kita hanya menggunakan sebuah variable integer (4 bytes))
shmflg== IPC_CREAT dan IPC_EXCL, IPC_CREAT kita gunakan untuk membuat segment memorinya dan ('| 0666') itu adalah sebuah pipe yang menandakan bahwa segment ini boleh di read dan write (6)

void *shmat(int shmid, const void *shmaddr, int shmflg);

Nah, karena shmat sendiri adalah sebuah fungsi pointer, maka disimpannya juga harus di variable pointer juga yaaaaaaa...

shmid== apa yang anda dapat dari shmget  di atas..Namanya aja 'get' nah pasti dia mendapatkan suatu nilai integer berupa identifier dari segment tadi..
shmaddr==jika NULL maka sistem akan menggunakan unused address untuk men-attach segment tadi.

Selebihnya hanya pointer-pointer biasa yang menunjukkan memori, karena anda-anda (pembaca ini) adalah programmer, diharapkan anda mengerti sendiri mengenai apa yang saya coding dibawah :P

SERVER_TOKO.C



Untuk membuat program client-nya, anda tinggal men-copy proses pembuatan shared memorynya sama persis seperti di atas. Mengapa? Kan tadi sudah kita ketahui, bahwa memorynya dipakai bersama-sama, jadi ID memory, dkk. nya juga harus sama persis, supaya client juga tahu.

CLIENT_TOKO.C




Dari kedua program di atas, maka server akan dapat menyimpan barang-barang yang ia miliki di satu memori, sehingga nanti pada saat ada client yang mengakses, yang diakses adalah segment memori yang sama. Jadi ketika ada perubahan yang dilakukan oleh client/server pada segment memori yang dipakai bersama-sama tadi maka kedua belah pihak dapat mengetahui perubahan itu.

Perlu digaris bawahi, bahwa kedua program di atas tidak mungkin terjadi RACE CONDITION , karena kedua program di atas hanya dijalankan pada satu komputer yang sama (tidak mungkin anda mengisikan secara bersamaan pada program client dan server). Lain cerita jika anda menjalankan 2 program di atas pada 2 komputer/many computer yang berbeda. Anda harus memperhatikan Race Condition-nya...Mungkin dengan menggunakan semaphores atau lainnya..

Semoga postingan saya kali ini bermanfaat yaaaa.....Tunggu postingan selanjutnyaa...Dijamin lebih seru daripada topik yang ini..Enjooyyyy :P




Powered by Blogger.

Text

Popular Posts