Cari Blog Ini

Masih Linux || Thread dan IPC

Sabtu, 07 November 2015


Setelah dalam postingan sebelumnya saya menjelaskan tentang proses,kali ini saya akan menjelaskan thread dan IPC.Sudah paham kan apa yang dimaksud proses?? Bila belum coba lihat postingan saya sebelumnya. Hehehe.
Jadi dalam sebuah proses terdapat bagian kecil atau proses ringan(lightweight) yang biasa disebut thread. Dalam sebuah proses ada yang menggunakan satu thread saja dan ada yang menggunakan lebih dari satu thread.Proses yang melibatkan hanya satu thread tersebut disebut single threading.Biasanya fungsi dari thread ini sebagai pengendali jalannya sebuah proses.ada juga dalam sebuah proses yang terdiri dari beberapa thread atau biasa disebut multi-threading.Jad thread dalam proses tersebut dapat berjalan beriringan menjalankan tugas masing-masing sehingga proses menjadi lebih cepat.Berikut ini adalah library yang digunakan untuk membuat thread  :

Selanjutnya yang akan saya bahas yaitu IPC.IPC adalah singkatan dari Interprocess communication .Sesuai dengan namanya jadi setiap proses yang ada dalam komputer bisa saling berkomunikasi layaknya kita sebagai manusia yang bisa saling berkomunikasi dengan sesama(asakan saling mengetahui bahasanya ya!!).Kalau tidak saling tahu bahasa nya minimal bisa menggunakan bahasa isyarat lah untuk saling bertukar informasi.Dalam tukar informasi pada komputer sendiri ada beberapa algoritma , antara lain yang populer yaitu :

a. Pipes
Pipe merupakan komunikasi sequensial antar proses yang saling terelasi.
b. Message Queue
Sistem berkirim pesan adalah proses komunikasi antar bagian sistem untuk
membagi variabel yang dibutuhkan.
c. Shared Memory
Sistem Berbagi Memori merupakan salah satu cara komunikasi antar proses dengan cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar proses. Pada metode ini, sistem akan mengatur proses mana yang akanmemakai memori pada waktu tertentu sehingga pekerjaan dapat dilakukan secara efektif.
d. Socket
Bentuk dari komunikasi yaitu UDP dan TCP menggunakan abstraksi socket yang menyediakan endpoint untuk komunikasi antar proses. Socket bisa dijalankan di berbagai platform(BSD UNIIX, UNIX, Linux, Windows, & Machintos OS).

Salah satu algoritma IPC yang saya jelaskan kali ini yaitu shared memory.Langsung saja kita buat contoh program yang melibatkan algoritma shared memory.Di sini kita buat program ibaratnya transaksi jual beli.Jadi kita buat satu source code dalam c sebagai penjualnya dan kita buat lagi satu untuk pembelinya.Nantinya dari kedua source code tadi kita jalankan melalui 2 terminal.Adapun langkah-langkahnya sebagai berikut :
1.Buat file source code untuk penjual :
Berikut source code nya :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>

#define SHSIZE 144
#define JMLBRG 6

typedef struct oink{
            char nama[15];
            int stok;
} jual;

int main(int argc, char *argv[])
{
            int i,jumlah,opt;
            char nama[15];
            jual *barang;
           
            jual *shm,*temp;
            int shmid;
            key_t key;
            long unsigned int jualsize;
           
            jualsize = sizeof(jual);
            key=9876;
           
            shmid=shmget(key,SHSIZE,IPC_CREAT|0666);
            if(shmid<0)
            {
                        perror("shmget");
                        exit(1);
            }         
           
            shm=shmat(shmid,NULL,0);
            if(shm==(jual *) -1)
            {
                        perror("shmat");
                        exit(1);
            }
           
            temp=shm;
            barang=(jual*)malloc(jualsize);
            barang->stok=0;
            for(i=0;i<JMLBRG;i++){
                        if(i==0) strcpy(barang->nama,"RAM");        
                        else if(i==1) strcpy(barang->nama,"Harddisk");
                        else if(i==2) strcpy(barang->nama,"Motherboard");
                        else if(i==3) strcpy(barang->nama,"PSU");
                        else if(i==4) strcpy(barang->nama,"VGA");
                        else if(i==5) strcpy(barang->nama,"Processor");
                        memcpy(temp,barang,jualsize);
                        temp+=jualsize;                      
            }
           
           
            system("clear");
            while(1){
                        printf("=================================\n\n");
                        printf("1) Lihat stok\n");
                        printf("2) Tambah stok\n");
                        printf("Masukkan pilihan : ");
                        scanf("%d",&opt);
                        system("clear");
                        if(opt==1){
                                    temp=shm;
                                    for(i=0;i<JMLBRG;i++){
                                                printf("%s : %d buah\n",temp->nama,temp->stok);
                                                temp+=jualsize;
                                    }
                        }
                        else if(opt==2){
                                    printf("Tambah stok barang\n");
                                    printf("Masukkan nama : ");
                                    scanf("%s",nama);
                                    temp=shm;
                                    for(i=0;i<JMLBRG && strcmp(temp->nama,nama);i++){
                                                temp+=jualsize;
                                    }
                                    if(i==JMLBRG) printf("%s tidak tersedia\n",nama);            
//                                  printf("%d %s\n",temp->stok,temp->nama);
                                    else {
                                                printf("Masukkan jumlah : ");
                                                scanf("%d",&jumlah);
                                                (temp->stok)+=jumlah;
                                                printf("Selamat, %d %s berhasil ditambahkan. Stok %s adalah %d buah.\n",jumlah,nama,nama,temp->stok);
                                    }
                        }
                        else if(opt==3){
                                    exit(1);
                        }
                        else printf("Masukan salah");
                        printf("\n");
            }

            return 0;
}

2. Buat file source code untuk pembeli :
Berikut source code nya :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>

#define SHSIZE 144
#define JMLBRG 6

typedef struct oink{
            char nama[15];
            int stok;
} jual;

int main(int argc, char *argv[])
{
            int i,jumlah,opt,cek;
            char nama[15];
           
            jual *shm,*temp;
            int shmid;
            key_t key;
            long unsigned int jualsize;
           
            jualsize = sizeof(jual);
            key=9876;

            shmid=shmget(key,SHSIZE,0666);
            if(shmid<0)
            {
                        perror("shmget");
                        exit(1);
            }         
           
            shm=shmat(shmid,NULL,0);
            if(shm==(jual *) -1)
            {
                        perror("shmat");
                        exit(1);
            }
           
            system("clear");
            while(1){
                        printf("=================================\n\n");
                        printf("1) Lihat barang\n");
                        printf("2) Beli barang\n");
                        printf("Masukkan pilihan : ");
                        scanf("%d",&opt);
                        system("clear");
                        if(opt==1){
                                    cek=0;
                                    temp=shm;
                                    for(i=0;i<JMLBRG;i++){
                                                if(temp->stok>0){
                                                            printf("%d %s\n",temp->stok,temp->nama);
                                                            cek=1;
                                                }
                                                temp+=jualsize;
                                    }
                                    if(cek==0) printf("Stok kosong\n");
                        }
                        else if(opt==2){
                                    printf("Masukkan nama : ");
                                    scanf("%s",nama);
                                    temp=shm;
                                    for(i=0;i<JMLBRG && strcmp(temp->nama,nama);i++){
                                                temp+=jualsize;
                                    }
                                    if(i==JMLBRG) printf("%s tidak tersedia\n",nama);
                                    else if(temp->stok==0) printf("Stok %s kosong\n",nama);
                                    else {
                                                printf("Masukkan jumlah : ");
                                                scanf("%d",&jumlah);
                                                if(temp->stok<jumlah) printf("Jumlah pembelian terlalu banyak. Stok %s %d, pembelian %d.",nama,temp->stok,jumlah);
                                                else{
                                                            (temp->stok)-=jumlah;
                                                            printf("Selamat, %d %s berhasil dibeli\n",jumlah,nama);
                                                }
                                    }
                        }
                        else if(opt==3){
                                    exit(1);
                        }
                        else printf("Masukan salah");
                        printf("\n");
            }
                       
            return 0;
}

3. Jalankan kedua program :

Selesai. Cukup sekian.SEMoga bermanfaat.Tetap SEMangat .Sampai jumpa di postingan menarik yang akan datang. Bye!! :)

0 komentar:

Posting Komentar