Saturday, November 7, 2015

Menggunakan Shared Memory


Halo.. Welcome back!

Jadi, akhir-akhir ini, ada game baru lagi booming banget di kampus dan temen-temenku. Nama gamenya itu "Duel Otak". Itu game merupakan game 2 player dimana kedua player menjawab pertanyaan sesuai kategori (ada 6 dalam satu kali pertandingan) dan pemenang ditentukan oleh siapa yang menjawab benar paling banyak. Nah, yang bikin seru, kedua player ini bisa melihat hasilnya, sehingga keliatan mana yang lebih, ehm, "pintar" gitu.. hehehe.

Yah, karena banyak banget temen-temenku yang main, aku pun jadi ikutan juga :v. Sambil memainkan game ini, muncul di pikiranku, gimana caranya para player ini bisa melihat hasil dari lawannya, sedangkan mereka bermain di perangkat yang berbeda. Nah, karena kebetulan lagi belajar tentang IPC (Inter-Process Communication), aku jadi mikir kayaknya developer Duel Otak ini menggunakan IPC untuk melakukannya. Walaupun aku gatau pasti juga sih :v.

Okay, cukup soal game nya. Waktunya masuk "main part".

*jeng jeng*

Nah, kali ini, kita akan bekerja menggunakan shared memory, salah satu metode yang digunakan untuk melakukan IPC. Metode shared memory dikerjakan dengan salah satu program membuat porsi memori untuk diakses oleh program yang lain dengan menggunakan suatu kunci. Karena menggunakan memori, metode ini tidak bisa dijalankan menggunakan komputer yang berbeda, karena beda komputer berarti beda memori. Maka, bisa dipastikan Duel Otak tidak memakai metode ini, hehe.

Oke. Fokus lagi.

Nah, sekarang, kita akan masuk ke pengimplementasian shared memory. Kali ini kita akan bekerja dengan C. Source code untuk kali ini terbagi dua, untuk server dan untuk client. Pertama, kita akan memulai dengan code segment yang digunakan oleh kedua source code ini.

Pertama, kita akan menggunakan beberapa library, seperti yang terlihat dibawah ini:

sys/types.h digunakan untuk memunculkan tipe data key_t yang akan digunakan sebagai kunci shared memory kita. sys/ipc.h untuk memunculkan fungsi IPC_CREAT untuk membuat entry jika shared memory belum dibuat, dan sys/shm.h untuk memunculkan fungsi shmget untuk membuat segmen shared memory dan shmat untuk memasukkan segmen shared memory sebagai salah satu bagian yang akan digunakan oleh program kita. Adapun stdio.h digunakan sebagai standar I/O, dan SHMSZ sebagai ukuran segmen memory yang akan dijadikan shared memory.

Setelah selesai dengan library, waktunya masuk ke fungsi main.

Deklarasikan variabel yang akan kita pakai, dan masukkan nilai yang akan kita jadikan kunci shared memory. Nilai ini harus sama antara server dan client.





Kemudian, kita mulai membuat segmen shared memory kita. Caranya bisa dengan menggunakan sintaks dibawah ini:






Disini shmget akan menciptakan segmen berukuran sesuai SHMSZ dengan kunci sesuai key, dimana 0666 bermakna segmen itu bisa di read, write, dan execute. shmget akan mengembalikan nilai negatif ke shmid jika segmen gagal dibuat.

Lanjut, waktunya menyambungkan segmen yang telah kita buat ke program yang akan kita jalankan. Kita menggunakan shmat seperti contoh dibawah ini:






Setelah melalui rangkaian proses ini, shared memory siap untuk dijalankan. Mulai dari ini source code server dengan client akan berbeda. Disini kita akan membuat source code dimana server mengisikan alfabet ke segmen shared memory dan client akan menerima dan mencetaknya.

server.c








Disini kita menunggu client mengubah isi shm sebagai tanda sudah selesai menerima dan mencetak.


client.c





Mengubah shm menjadi * setelah selesai menerima dan mencetak.


Nah, source code sudah selesai dibuat. Waktunya compiling. Di linux, kita bisa melakukan compiling dengan menggunakan sintaks gcc [nama_source_code].c -o [nama_executable_file].o di terminal. Karena sekarang kita menggunakan dua source code yang dijalankan secara bersamaan, maka kita akan menggunakan dua terminal. Berikut contoh jalannya program di terminal setelah compiling.



server.o menunggu client.o menerima dan mencetak.

client.o mencetak alfabet ke terminal



server.o selesai menunggu client.o













 Okay, sekian dulu untuk hari ini. Semoga membantu, ya ^_^

3 comments:

  1. Keren Pembahasannya moel, :D
    tapi aku ga ngerti hehehe, mantap ah

    ReplyDelete
    Replies
    1. aduh masi kurang bagus penjelasanku berarti kalo masi gangerti tom haha.. okelah untuk selanjutnya kuperbaiki tom (y)

      Delete
  2. Sori mau nanya apa penerapan ipc dan shared memorynya segitu sja dan Code gameny udah bisa jalan gk y?
    Thx

    ReplyDelete