Rabu, 22 Oktober 2014

Mengenal Daemon dan IPC pada Linux




Dalam Sistem Operasi Linux kita akan mengenal yang namanya "Proses" dan "Daemon". Apa itu  "Proses" dan "Daemon" ??



Proses adalah program yang sedang dieksekusi. Setiap kali menggunakan utilitas sistem atau program aplikasi dari shell, satu atau lebih proses ”child” akan dibuat oleh shell sesuai perintah yang diberikan.

Tahapan pembuatan proses:

<> Membuat suatu program

<> Jalankan program tersebut

<> Program yang tadi dijalankan merupakan proses

<>Untuk mengecek apakah proses tersebut berjalan, dapat diketahui dengan mengetik di terminal ps aux | grep namaprogram

Contoh : membuat program dengan output kalimat “Halo semua...!!” setiap 10 detik


Source Code :

#include

#include

int main()

{
while(1)         
{

printf("Halo semua...!!\n");
sleep (10);

}

return 0;

}

Daemon adalah proses yang berjalan di balik layar (background) dan tidak berinteraksi langsung dengan user melalui standard input/output


Tahap membuat daemon :

<> Melakukan Fork Parent Processs dan penghentian 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.
Mengubah mode file menggunakan UMASK(0). Mode file harus diubah untuk memastikan bahwa file tersebut dapat ditulis dan dibaca secara benar. Pengubahan mode file menggunakan implementasi umask().


<> 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().


<> 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.


<> Menutup File Descrptor Standar. 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().

<> Membuat Loop utama (inti kerja dari daemon) karena daemon bekerja pada jangka waktu tertentu 


Contoh :

Source Code :

#include

#include

#include

#include

#include

#include

#include int 

int main(void)

{

pid_t pid, sid; pid=fork();

if (pid < 0)

{

exit (EXIT_FAILURE);

}

if (pid > 0)

{

exit (EXIT_SUCCES);

}

umask(0);

sid=setsid(); if (sid < 0)

{

exit (EXIT_FAILURE);

}

if ((chdir(“/”)) < 0)

{

exit (EXIT_FAILURE);

}

close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); while(1)

{

sleep (10);

}

exit (EXIT_SUCCES);

}




Nah..
Dalam melakukan Proses Daemon, tentunya kita akan bersinggungan dengan PID,PPID, Parent Process, Child Process, Zombie Process, dan Orphan Process ? 




Lalu apa pengertian serta kegunaan dari istilah-istilah tersebut  ??

<> PID atau proses identity, yaitu berupa angka-angka yang dipakai dalam beberapa sistem operasi untuk mengidentifikasi sebuah proses. Untuk mengetahui PID dari sebuah proses dengan membuka terminal pada linux. Dan ketikkan command ps -el.




<> PPID atau Private proses Id, merupakan PID yang bersifat private, atau PID yang tidak langsung ditampilkan. Cara mengetahui PPID dapat dilihat dari terminal menggunakan command ps -o ppid=-p $


<> merupakan proses yang telah menciptakan beberapa proses anak. Proses ini terjadi ketika mengeksekusi fungsi fork(), kemudian hasiln dari pemanggilan fork tersebut akan menciptakan beberapa child proses. Cara untuk melihat parent proses dari suatu proses adalah melalui terminal dengan command ps -l [PID proses yang ingin di cari]. Msialnya : ps -l 5057. atau dengan menggunakan command ps -el untuk melihat PID dan PPID dari semua proses. Untuk mematikan parent proses adalah dengan menggunakan commanf “kill -9” (tanpa tanda petik). Misalnya kill 5057.


<> Child proses merupakan proses yang diciptakan dari proses parent. Child proses mewarisi atribut-atribut dari parent proses seperti membuka file dari parent proses. Sebuah child proses sebenarnya dibuat menggunakan fungsi fork() sebagai salinan parent prosesnya. Untuk melihat child proses dapat di gunakan command ps -el. (tertera dalam PID dan PPIDnya) untuk mematikan child proses menggunakan command “kill -9 (PID yang ingin di matikan).


<> Zombie proses merupakan proses yang terjadi karena adanya child proses yang di “kill”, namun parent prosesnya tidak tahu bahwa childnya telah di kill. Untuk melihat zombie proses dapat digunakan command ps aux pada terminal. Zombie proses di tandai dengan huruf z pada kolom stat. Cara mematikan zombie proses dengan cara menunggu beberapa parent proses meninggalkan zombie proses. Kedua dengan menggunakan command “kill -s SIGHLD ”. Dan yang terakhir dengan mematikan juga proses parent nya


<> Orphan proses merupakan proses yang prosesnya sudah selessai atau sudah di hentikan. Untuk dapat melihat orphan proses dapat menggunakan command “ps -elf | head -1; ps -elf | awk ‘{if ($5 == 1 && $3 != “root”) {print $0}}’ | head” .

Untuk mematikan orphan proses dapat menggunakan comaand sama dengan mematikan proses biasa denn kill (PID nya)



Sekarang kita beralih ke IPC.



IPC adalah IPC (Inter Process Communication) atau komunikasi antar proses adalah suatu mekanisme pertukaran data antar satu proses dengan proses lainnya, baik itu yang terjadi didalam satu komputer yang sama maupun yang terjadi antara komputer yang terhubung dengan jaringan.

IPC dan Proses mmpunyai keterkaitan karena IPC merupakan jembatan yang menghubungkan antar proses untuk berkomunikasi. Dalam menggunakan proses IPC kita akan mengenal beberapa istilah, seperti : Shared Memory, Pipes, Message Queue, dan Semaphore.

<> Shared memory merupakan memory yang dapat di akses oleh beberapa buah program dengan tujuan untuk menyediakan komunikasi agar menghindari adanya salinan yang berlebihan. Merupakan salah satu cara komunikasi antar proses dengan mengalokasikan suatu alamat memory yang digunakan untuk berkomunikasi antar proses, biasanya alamat dan besarnya memory ditentukan oleh pembuat program.


<> pipes merupakan serangkaian proses yang berantai yang terjadi oelh aliran standar, sehingga tiap-tiap proses outputnya (stdout feed) secara langsung akan menjadi input (stdin) keproses yang berikutnya. Masing-masing sambungan ini diimplementasikan oleh sebuah pipa (anonim). Dan program filter sering juga dipakai dalam konfigurasi ini.



<> Queue atau antrian, sesuai dengan namanya, yangmana message queue merupakan proses sebuah metode yang di mana suatu proses dapat bertukan data melalui sebuah interface yang dikelola oleh message queue. Sebuah pesanantrian dapat dibuat oleh sebuah proses dan dapat digunakan oleh banyak proses yang membaca atau menulis pesan ke antrian.

<> Semaphore merupakan sebuah variabel yang dilindungi atau tipe data abstrak yang merupakan sebuah metode yang digunakan untuk membatasi akses ke sumber daya bersama, seperti dengan shared memory dalam sebuah lingkungan pemrograman paralel. Semaphore digunakan agar tidak terjadi race condition. 


Lalu apa itu Sharing Data ??

Sharing Data adalah proses membuat data dapat digunakan oleh proses lain.

Contoh: Satu proses akan membuat area di memory utama/RAM yang kemudian dapat diakses oleh proses lainnya.


Mutex (Mutual Exclusion) adalah kemampuan beberapa proses untuk membagi (sharing data maupun resource yang penting. Sehingga hanya satu proses yang dapat digunakan dalam satu waktu.


Contoh: Beberapa proses membutuhkan resource ke printer, Karena resource printer tidak dapat dibagi, maka digunakan mutex untuk menjalankan proses satu demi satu.


Sinkronisasi adalah Komunikasi antara proses yang membutuhkan place by calls untuk mengirim dan menerima data primitive. Terdapat rancangan yang berbeda-beda dalam implementasi setiap primitive. Pengiriman pesan mungkin dapat diblok (blocking) atau tidak dapat dibloking (nonblocking)






By : adeilhamfajri.blogspot.com

Reaksi:

0 komentar:

Posting Komentar

Foto saya
Status : Mahasiswa Teknik Informatika