Saturday, November 7, 2015

Thread dan IPC

Thread dan IPC

Apa itu thread?
Thread adalah bagian kecil dari suatu proses.
a. Single Thread
    Proses hanya memiliki satu thread yang berjalan, biasanya digunakan sebagai pengendali proses.
b. Multi Thread
    Proses memiliki lebih dari satu thread yang berjalan, proses. menjalankan lebih dari satu tugas dalam satu waktu yang sama.
berikut adalah contoh penggunaan thread. menggunakan aplikasi VLC dan lagu [A.mp3]




Apa itu IPC?
Interprocess Communication merupakan cara atau mekanisme pertukaran data antar process.

terdapat beberapa jenis IPC

a. Pipes
    Merupakan komunikasi sequential antar process yang saling terelasi.

b. Message Queue
    proses komunikasi antar bagian sistem untuk berbagi variable yang dibutuhkan. Memiliki 2 Operasi, mengirim dan menerima pesan.

c. Shared Memory
    Berbagi memori yang dibutuhkan untuk komunikasi antar process memori sebelumnya dialokasikan terlebih dahulu.

d. Socket
    Bentuk komunikasi UDP dan TCP menggunakan abstraksi socket, menyediakan endpoint untuk komunikasi antar process.

untuk saat ini saya akan lebih membahas Shared Memory
disini ada contoh program tentang jual beli. jumlah barang dagang akan diakses menggakan shared memory.

berikut contoh programnya
Penjual.c





terdapat 6 shared memory.


Pembeli.c








Sedikit penjelasan:

shmid = shmget(key, sizeof(int), IPC_CREAT | 0666 )
sintaks : shmget(key_t key, size_t size, int shmflg)

shmget merupakan fungsi yang akan merequest share memory ID dari key,
key disini adalah sebagai kode antara server dan client, bebas tapi harus sama
size, merukan size segment share memory dalam satuan byte

int shmflg, memberikan akses ke server dengan IPC_CREAT jika ingin membuat segmen, atau bisa juga dengan 0.

0666 , digit pertama untuk tipe file, dua akses user, tiga akses group , empat akses user lainnya.

    0000     no permissions

    0111     execute

    0222     write

    0333     write & execute

    0444     read

    0555     read & execute

    0666     read & write

    0777     read, write, & execute

    w = shmat(shmid, NULL, 0);
sintaks :  *shmat(shmid, *shmaddr, shmflg)

    shmid memiliki identifier dari segment share memory
tapi bagaimana kamu bisa memberikan pointer terhadap shmid?
itulah gunanya shmat

shmid merupakan shared memory id yang didapat dari shmget
shmaddr memberi tahu shmat spesifik address untuk digunakan, tapi bisa ditulis 0 dan membiarkan OS memilih sendiri.
shmflg, bisa di set SHM_RDONLY jika hanya membaca atau bisa 0

Saturday, October 17, 2015

Deamon Process



Halo teman-teman, pada kesempatan kali ini saya akan membahas tentang daemon process dan implementasinya.
apa itu daemon process?
Daemon Process adalah sebuah process dimana ia dijalankan didalam Background komputer dikarenakan proses ini tidak memiliki terminal pengontrol. Daemon adalah sebuah proses yang didesain khusus agar tidak mendapat intrupsi dari pengguna/user. dengan kata lain, daemon process bejalan dengan otomatis sesuai dengan kondisi yang telah ditentukan.

bagaimana cara pembuatannya, ayo kita lihat bersama.

Pembuatan Daemon terdiri dari 6 langkah.
1. Fork Parent Processs dan kill Parent Process
2. Mengubah mode file menggunakan UMASK(0);
3. Membuat Unique Session ID (SID)
4. Mengubah Directory Kerja
5. Menutup File Descriptor Standar
6. Membuat Loop

1. Fork Parent Process dan kill Parent Process
melakukan forking untuk membuat process baru kemudian mematikan Parent Process. Process induk yang mati akan membuat system mengira proses telah selesai sehingga akan kembali ke terminal user.
Proses anak yang melanjutkan program setelah proses induk dimatikan.



2. Mengubah mode file menggunakan UMASK(0);
Untuk menulis beberapa file (termasuk logs) yang dibuat oleh daemon, mode
file harus diubah untuk memastikan bahwa file tersebut dapat ditulis dan
dibaca secara benar. Pengubahan mode file menggunakan implementasi
umask().

//mengubah mode file mask
umask(0); //mendapat akses penuh dari file yang dibuat daemon

3. Membuat Unique Session ID (SID)
Child Process harus memiliki unik SID dari kernel untuk dapat beroperasi.
Sebaliknya, Child process menjadi Orphan Proses pada system. Tipe pid_t yang
dideklarasikan pada bagian sebelumnya, juga digunakan untuk membuat SID
baru untuk child process. Pembuatan SID baru menggunakan implementasi
setsid(). Fungsi setsid() memiliki return tipe yang sama seperti fork().



4. Mengubah Directory Kerja
Directori kerja yang aktif harus diubah ke suatu
tempat yang telah pasti akan
selalu ada. Pengubahan tempat direktori kerja dapat dilakukan dengan
implementasi fungsi chdir (). Fungsi chdir() mengembalikan nilai -1 jika gagal.



5. Menutup File Descriptor Standar
Salah satu dari langkah terakhir dalam mengeset daemon adalah menutup file
descriptor standar (STDIN, STDOUT, STDERR). Karena daemon tidak perlu
menggunakan kendali terminal, file descriptor dapat berulang dan berpotensi
memiliki bahaya dalam hal keamanan. Untuk mengatasi hal tersebut maka
digunakan implemtasi fungsi close().

close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

6. Membuat Loop utama
Daemon bekerja dalam jangka waktu tertentu, sehingga diperlukan sebuah
looping.

Berikut adalah Program lengkapnya.