Saturday, November 7, 2015

Thread and IPC

Thread and IPC

Beberapa minggu lalu, kita sudah ber-eksperimen dengan menggunakan proses dan daemon pada sistem operasi Linux, sekarang kita mencoba menyelesaikan suatu permasalahan yang menggunakan Interprocess Communication (IPC), dimana permasalahan kali ini mengenai tentang permainan Benteng Takeshi yang aturannya sebagai berikut:  
1. Masing-masing pemain (Raja Takeshi dan si Penantang) memiliki 16 buah lubang yang nantinya bisa diisi ranjau. 
2. Kedua pemain tersebut masing-masing memiliki 16 buah ranjau yang bisa dipakai dan poin awalnya yakni 0. 
3. Selama pertandingan, kedua pemain akan saling bergantian mengisi lubang-lubang tersebut dengan ranjau sedangkan salah satunya memberikan tebakan lubang mana yang aman dari ranjau. 
4. Setiap gilirannya, pemain bisa memasang 0 sampai 4 ranjau di lubang yang berbeda dan lawannya menebang 4 lubang. 
5. Pemain yang mendapatkan poin hanya pemain yang memasang ranjau saja, dimana pemain yang memasang ranjau mendapat poin dari jumlah ranjau yang memakan korban.      

Sebelum menyelesaikan permasalahannya, alangkah baiknya anda mengetahui pengetahuan dan penggunaan dari Interprocess Communication (IPC).  Interprocess Communication (IPC) merupakan salah satu cara pertukaran data antar satu proses dgn proses yg lainnya, baik proses yg berada di dalam komputer yang sama, ataupun komputer jarak jauh yang terhubung melalui jaringan.
Berikut jenis-jenis dari Interprocess Communication (IPC) : 
1. Pipes
Pipe merupakan komunikasi sequensial antar proses yang saling terelasi, namun pipe memiliki kelemahan yaitu hanya bisa digunakan untuk komunikasi antar proses yang saling berhubungan, dan komunikasinya yang dilakukan adalah secara sequensial. 
2. Shared Memory 
Sistem Berbagi Memori merupakan salah satu cara komunikasi antar proses dengan cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antarproses. 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. 
3. Message Queue 
Sistem berkirim pesan adalah proses komunikasi antar bagian sistem untuk membagi variabel yang dibutuhkan. Proses ini menyediakan dua operasi yaitu mengirim pesan dan menerima pesan. 
4. Socket   
Bentuk dari komunikasi yaitu UDP dan TCP menggunakan abstraksi socket yang menyediakan endpoint untuk komunikasi antar proses. Socket bisa dijalankan diberbagai platform(BSD UNIIX, UNIX, Linux, Windows, & Machintos OS).

Setelah mengetahui jenis-jenis dari IPC, maka skrg saatnya mengetahui beberapa penggunaan IPC, berikut beberapa contoh penggunaan dari IPC: 
1. Deklarasi Variabel  

2. Membuat file pipe 


3. Membuka file pipe 

4. Menuliskan isi file pipe

5. Menutup file pipe

6. Menghapus file pipe 


Nah, setelah mengetahui beberapa cara penggunaan dari IPC, langsung aja kita menyelesaikan permasalahan tentang permainan Benteng Takeshi. Untuk permasalahan ini, anda harus membuat 2 kodingan, berikut kodingannya :







Nah, setelah itu apa hasil jika anda compile kedua kodingan diatas?
Sebelumnya cara compile yakni sebagai berikut:

gcc -o [output] input.c -lpthread 

Dan sekarang coba compile dan jalankan file diatas, bagaimana hasilnya?
Berikut hasilnya :



Keterangan : 
pemain1.c (terminal sebelah kiri) pertama kali akan memberikan jebakan ranjau di lubangnya sendiri, sementara pemain2.c (terminal sebelah kanan) yang akan menebak pertama kalinya, 
pemain1 memberikan ranjau di lubang 1, 2, 3, dan 4.
sementara pemain2 menebak di lubang 1, 2, 4 dan 6.
karena pemain2 menebak di lubang yang ada ranjau sebanyak 3 lubang (lubang 1, 2 dan 4) maka si pemain1 mendapatkan 3 poin.



Keterangan : 
setelah pemain1 sudah memasukkan ranjau di lubang nya, maka lubangnya akan menjadi kosong (0), setelah itu giliran pemain2 untuk memberikan jebakan ranjau di lubangnya, sementara pemain1 yang akan menebak untuk pertama kalinya. 
pemain2 memberikan ranjau di lubang 11, 12, 13, dan 14.
sementara pemain1 menebak di lubang 4, 7, 9 dan 11.
karena pemain1 menebak di lubang yang ada ranjau sebanyak 1 lubang (lubang 11) maka si pemain2 mendapatkan 1 poin saja.
dan berikut seterusnya...
Jadi selamat mencoba !