Jumat, 28 November 2014

Shared Memory


     Shared memory adalah memori yang dapat diakses secara bersamaan oleh beberapa program  dengan maksud untuk menyediakan komunikasi di antara mereka atau menghindari salinan yang berlebihan. Tergantung pada konteks, program dapat berjalan pada satu prosesor atau beberapa prosesor yang terpisah.     Merupakan salah satu cara komunikasi antar proses dengan cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar proses. Alamat dan besar alokasi memori yang digunakan biasanya ditentukan oleh pembuat program. Pada metode ini, sistem akan mengatur proses mana yang akan memakai memori pada waktu tertentu sehingga pekerjaan dapat dilakukan secara efektif.

     Ada 2 cara untuk menggunakan shared memory, yaitu :
  • Menggunakan mmap()
  • Menggunakan shmget() -> lebih populer

Langkah - langkah membuat shared memory :

  1. Membuat segment di memory dengan shmget() 
  2. Mendaftarkan (attach) segment ke data space dari proses dengan shmat() 
  3. Tulis/Baca dari memori 
  4. Detach segment dari data space dari proses dengan shmdt()
Penjelasan fungsi :

1. shmget();
          System call untuk membuat suatu segmen shared memory

#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg); 

          shmflg bisa diisi dengan : IPC_CREATE, IPC_EXCL, permission

2. shmat();
           System call untuk mendaftarkan segment shared memory ke dalam data space dari suatu proses

#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg); 

Parameter :
shmid → ID dari shared memory
shmaddr → Lokasi shared memory di main memory
jika NULL akan dicarikan lokasi pada memory yang ingin ditempati 

Return :
Pointer ke lokasi shared memory

3. shmdt();
            System call untuk melepaskan shared memory segment dari data space dari proses.

#include <sys/types.h>
#include <sys/shm.h>
int shmdt(const void *shmaddr); 

Parameter :
shmaddr → pointer ke lokasi shared memory 

Return :
0 → sukses
(void *) -1 → error

4. shmctl();
           System call untuk mengetahui atau merubah informasi yang berkaitan dgn suatu shared memory

#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);

Argument cmd bisa berisi : 

IPC_STAT : mengambil informasi ttg shared memory segment
IPC_SET : mengubah informasi ttg shared memory segment
IPC_RMID : menandai suatu segment untuk dibuang ketika semua process yang menggunakannya sudah melepasnya
SHM_LOCK : Lock suatu segment, membuatnya tidak bisa di-swap
SHM_UNLOCK : Unlock suatu segment

Program Tambahan untuk IPC

     Ada 2 program tambahan yang berguna untuk melihat apa yang terjadi pada IPC yang dibuat :
  1. ipcs
    Menyediakan informasi yang berkaitan dengan IPC yang sedang digunakan (message queue, shared memory, semaphore)
  2. ipcrm
    Menghapus IPC tertentu (message queue, shared memory, semaphore)

0 komentar:

Posting Komentar