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.
Penjelasan fungsi :
1. shmget();
System call untuk membuat suatu segmen shared memory
#include
#include
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
#include
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
#include
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
#include
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)
Contoh codingan meghubungkan 2
buah program :
-----------------------------------------------------------------------------------------------------------------
Aya adalah seorang programmer
handal sekaligus pemilik toko yang menjual 6 buah peralatan komputer yaitu RAM,
Harddisk, Motherprocessor, VGA, PSU, Processor. Ia ingin membuat sebuah program
untuk tokonya. Program yang ingin ia buat harus terhubung antara client dan
server. Client dapat membeli dan melihat jumlah stok yang tersisa sedangkan
server dapat menambah stok barang dan melihat sisa akhir barang. Awalnya Aya
membuat program menggunakan teori PIPE dan ternyata kedua program tidak
terhubung. Karna 3 asisten praktikumnya juga menyerah dengan program Aya maka
Aya mendemokan program erorr yang pada akhirnya diminta revisi oleh asisten
demo menggunakan SHARED MEMORY. Berbeda dengan PIPE yang Aya kerjakan berhari
hari, SHARED MEMORY hanya dikerjakan dalam waktu beberapa jam. Berikut codingan
yang ia kerjakan :
CLIENT PROGRAM :
SERVER PROGRAM :
Langkah - langkah :
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()
Sebenarnya sangat mudah
menggunakan shared memory karena hanya menggunakan sedikit template yang sudah
saya jelaskan diatas. Untuk run program ini pada terminal pun standard seperti
biasanya tidak harus special seperti menggunakan thread. Titik pentingnya adalah
bagaimana kamu memodifikasi template pada int main agar memenuhi output yang
kamu inginkan.
Semoga bermanfaat terimakasih!