Sabtu, 28 November 2015

FUSE (Filesystem in Userspace

Filesystem in Userspace (FUSE) merupakan mekanisme sistem operasi untuk sistem operasi Unix-like yang memungkinkan pengguna tidak ber-hak istimewa menciptakan file system mereka sendiri tanpa mengubah kode kernel. Hal ini dicapai dengan menjalankan kode file system di userspace, sedangkan modul FUSE hanya menyediakan "jembatan" untuk antarmuka kernel yang sebenarnya.

Diagram cara kerja fuse
Module kernel FUSE dan FUSE library berhubungan melalui sebuah special file descriptor yang didapatkan dengan membuka /dev/fuse. FUSE kernal module meneruskan request ke aplikasi fuse anda. aplikasi anda memerintahkan fuse cara menjawab request. FUSE kernal module dan FUSE library berkomunikasi lewat file deskriptor spesial yang diperoleh dengan membuka /dev/fuse. file ini dapat terbuka berkali-kali dan file deskriptor yang diperoleh diteruskan ke mount syscall, untuk menyesuaikan deskriptor dengan filesystem mount.

Installasi FUSE:


1. Download FUSE dari http://fuse.sourceforge.net/ pada bagian Download stable release

2. Extract file tar.gz dan masuk ke direktori FUSE. (tar –xvzf fuse-2.9.4.tar.gz)

3. Lakukan installasi FUSE dengan cara :
  • Gunakan hak akses super user (sudo su)

  • Ketikkan perintah ./configure

  • Ketikkan perintah make

  • Ketikkan perintah make install

4. FUSE siap digunakan 


Membuat filesystem sendiri menggunakan FUSE


#include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <sys/statfs.h>

static const char *dirpath = "/home/ncc/Documents";

static int xmp_getattr(const char *path, struct stat *stbuf)
{
 int res;
 char fpath[1000];
 sprintf(fpath,"%s%s",dirpath,path);
 res = lstat(fpath, stbuf);

 if(res == -1)
 {
  return -errno;
 }

 return 0;
}

static int xmp_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t filler)
{
 char fpath[1000];
 if(strcmp(path,"/") == 0)
 {
  path=dirpath;
  sprintf(fpath,"%s",path);
 }
 else sprintf(fpath, "%s%s",dirpath,path);
 int res = 0;
 DIR *dp;
 struct dirent *de;
 dp = opendir(fpath);
 if(dp==NULL)
 {
  return -errno;
 }
 while((de = readdir(dp))!=NULL)
 {
  res = filler(h, de->d_name, de->d_type);
  if(res!=0) break;
 }
 closedir(dp);
 return res;
}

static struct fuse_operations xmp_oper =
{
 .getattr = xmp_getattr,
 //.readlink = xmp_readlink,
 .getdir = xmp_getdir,
 //.mknod = xmp_mknod,
 //.mkdir = xmp_mkdir,
 //.symlink = xmp_symlink,
 //.unlink = xmp_unlink,
 //.rmdir = xmp_rmdir,
 //.rename = xmp_rename,
 //.link = xmp_link,
 //.chmod = xmp_chmod,
 //.chown = xmp_chown,
 //.truncate = xmp_truncate,
 //.utime = xmp_utime,
 //.open = xmp_open,
 //.read = xmp_read,
 //.write = xmp_write,
 //.release = xmp_release,
 //.fsync = xmp_fsync,
 //.readdir = hello_readdir
};

int main(int argc, char *argv[])
{
 return fuse_main(argc, argv, &xmp_oper);
}



Fungsi yang lain dapat ditambah sesuai dengan kebutuhannya.

Silakan dicoba. Semoga bermanfaat....

Sabtu, 07 November 2015

Thread dan IPC

Thread


Thread adalah bagian kecil dari suatu proses yang bisa di jadwalkan oleh sistem
operasi. Thread juga disebut sebagai proses ringan (lightweight). 

a. Single Threading

Adalah sebuah proses yang hanya memiliki satu thread yang berjalan. Biasanya fungsi thread ini digunakan sebagai pengendali jalannya proses.

b. Multi Threading

Adalah proses yang memiliki lebih dari satu thread yang berjalan didalamnya, sehingga dalam hal ini proses dapat menjalankan lebih dari satu tugas dalam satu waktu.



IPC (Interprocess Communincation)


Interprocess Communication adalah cara atau mekanisme pertukaran data antara satu proses dengan proses lainnya, baik itu proses yang berada di dalam komputer yang sama, atau komputer jarak jauh yang terhubung melalui jaringan.

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

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

c. Shared Memory


Sistem Berbagi Memori merupakan salah satu cara komunikasi antar proses dengan cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar proses. 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.

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

  

Contoh Penggunaan Thread

Simple Music Player

Pembahasan Kode


Fungsi play lagu adalah fungsi yang memanggil pemutar lagu "cvlc". Cvlc akan play lagu yang diinputkan nantinya.



 Fungsi menu adalah interface dari program music player ini.


Fungsi ini masuk ke pilihan menu 1, yaitu help, yang berisi "clear"layar dan menampilkan kembali menu awal.


Fungsi ini masuk ke pilihan menu 2, yaitu tampilkan list, yang berisi menampilkan seluruh isi folder playlist, yang merupakan lagu yang akan diputar.

Fungsi ini masuk ke pilihan menu 3, yaitu play, yang berisi input judul lagu yang dapat dilihat di fungsi tampilkan list, dan memutarnya dengan membuat thread yang berisi command di fungsi play lagu.


Fungsi ini masuk ke pilihan menu 4, yaitu pause, yang berisi menghentikan program vlc yang kita gunakan untuk memutar musik di state yang sedang berjalan.


Fungsi ini masuk ke pilihan menu 5, yaitu continue, yang berisi menjalankan kembali program vlc yang kita gunakan untuk memutar musik di state saat kita menggunakan fungsi pause.

Fungsi ini masuk ke pilihan menu 6, yaitu stop, yang berisi menghentikan program vlc yang kita gunakan untuk memutar musik tanpa menyimpan state saat kita hentikan (berhenti total).

Silakan dicoba. Semoga bermanfaat....