Jumat, 27 November 2015

FUSE

  1. File system adalah struktur pokok dari komputer yang digunakan untuk mengorganisir data.
  2. Tipe dari file system:
  • Disk file system
                        File system yang digunakan pada disk.
                        Contoh: FAT, Ext, NTFS.
  • Flash file system
                        File system yang digunakan pada flash memory.
                        Contoh: JFFS, YAFFS.
  • Network file system
                        File system yang bekerja sebagai client.
                        Contoh: client untuk ASF, NFS, SMB protocol.
  • Database file system
            File sistem untuk menyimpan file sebagai database.
                        Contoh: IBM DB2.
  • Tape file system
                        File system yang digunakan pada tape.
                        Contoh: LTFS.
3. Virtual file system adalah suatu lapisan perangkat lunak dalam kernel yang menyediakan interface sistem berkas untuk program userspace dan menangani semua system call yang berhubungan dengan suatu system berkas di bawahnya. Fungsi dari VFS adalah me-mediasi dari perbedaan sistem berkas yang digunakan oleh beberapa sistem berkas, misal windows, mac os, linux. Dengan VFS, suatu aplikasi dapat mengakses berkas dari sistem berkas yang berbeda.

4.
  • Dentry atau Directory Entry merupakan suatu struktur data yang bertugas sebagai penerjemah dari suatu nama berkas ke inode-nya. disimpan dalam cache di vfs. isi dari dentry adalah name, use of count,chains for lots of list, pointer to parent dentry, list head of childre, pointer to inode. Operasi pada dentry d_compare, d_release, dan d_delete.
           
  • inode : it stands for index node. semua objek yang ada di dalam file system diwakili oleh sebuah index (inode). Inode merupakan identifier dari file dan atribut. Inode berisi struktur data pada file system yang menyimpan informasi dasar tentang sebuah file, direktori, atau obke file system yang lain.

  • superblock : berisi informasi tentang file system seperti file system type, status, size, dan informasi tentang struktu metadata. jikalau inode berisi file attribute, superblock berisi file system attribute. superblock merepresentasikan setiap sistem berkas yang di-mount.

5. Fuse (Filesystem in Userspace) adalah sebuah kerangka sistem berkas pada area pengguna. Fuse terdiri dari modul kernel, pustaka pada area pengguna, dan sebuah utilitas untuk melakukan proses mount (fusermount). fuse memungkinkan pengguna untuk membuat filesystemnya sendiri tanpa mengubah kernel [to make their filesystem theirselves without change the kernel].


6.  Cara Kerja FUSE:
·         fuse_main() (lib/helper.c) = program user memanggil fungsi fuse_main() kemudian fungsi fuse_mount() dipanggil. Lalu memanggil fuse_new() untuk memesan ruang untuk fuse file system data. lalu fuse_loop dipanggil untuk memproses session.
·         fuse_mount() (lib/mount.c) = menciptakan UNIX domain socket, lalu membuat child process yang menjalankan fusermount.
·         fusermount() (util/fusermount.c) = untuk mengecek apakah modul FUSE sudah di load. then open /dev/fuse dan mengirim file handle melalu UNIX domain socket kembali ke fungsi fuse_mount()
·         fuse_new() (lib/fuse.c) = create struktur data yang besiri ruang yang digunakan untuk menyimpan data file system
·         fuse_loop() (lib/fuse.c) = membaca file system calls dari /dev/fuse

7. Keuntungan menggunakan FUSE:
  • Pengguna biasa dapat menciptakan file system mereka sendiri dan memodifikasi tanpa mengubah mode kernel.
  • Kernel tidak akan berpengaruh saat terjadi crash.
  • Dapat dilakukan load dan mount dengan user biasa.
  • Dapat menggunakan lebih banyak library.
  • Kode dari filesystem yang mengalami hang dapat dimatikan dengan mudah.


Kamis, 05 November 2015

Cara Memutar Musik Anti Mainstream dengan Thread

Kali ini saya akan membahas memutar musik dengan thread. sebeleumnya apa itu thread? thread adalah bagian kecil dari suatu progres yang bisa dijadwalkan 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 penggendali jalannya proses.

b. Multi Thread
   Adalah proses yang dimiliki lebih dari satu thread yang berjalan didalamnya , sehingga dalam hal ini proses dapat menjalankan lebih dari satu thread.

\
Cukup sekilas tentang thread , sekarang kita akan mengoding di linux ubuntu untuk memutar musik di linux.
berikut kodungnya :

#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
#include <dirent.h>

pthread_t tid[5];
char lagu[100];
int t;
void* playandmenu (void *arg)
{
    unsigned long i = 0;
    pthread_t id = pthread_self();
    int flag;
    if(pthread_equal(id,tid[0]))
    {
        printf("1. list\n2. play [Nama_lagu]\n3. pause\n4. continue\n5. stop\n");
        fflush(stdout);
    }
    else if(pthread_equal(id,tid[1]))
    {
        system("ls /home/aditya/Modul3/Nomor1/Playlist/ | grep .mp3");
    }
    else if(pthread_equal(id,tid[2]))
    {
        system("pkill mpg123");
        system("clear");
        char popup[]="mpg123 -q /home/aditya/Modul3/Nomor1/Playlist/";
        strcat(popup,lagu);
        system(popup);
    }
    else if(pthread_equal(id,tid[3]))
    {
        sleep(t);
        system("pkill -STOP mpg123");
    }
    else if(pthread_equal(id,tid[4]))
    {
        sleep(t);
        system("pkill -CONT mpg123");
    }
    else if(pthread_equal(id,tid[5]))
    {
        sleep(t);
        system("pkill mpg123");
        system("clear");
    }
    return NULL;
}

int main(void)
{
    while(1)
    {
        int err;
        char pilihan[10];
        scanf("%s", pilihan);
        system("clear");
        if(strcmp(pilihan,"help")==0)
        {
            system("clear");
            err=pthread_create(&(tid[0]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"list")==0)
        {
            system("clear");
            err=pthread_create(&(tid[1]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"play")==0)
        {
            system("clear");
            scanf(" %[^\t\n]s",lagu);
            err=pthread_create(&(tid[2]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"pause")==0)
        {
            system("clear");
            scanf("%d", &t);
            err=pthread_create(&(tid[3]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"continue")==0)
        {
            system("clear");
            scanf("%d", &t);
            err=pthread_create(&(tid[4]), NULL, &playandmenu, NULL);
        }
        else if(strcmp(pilihan,"stop")==0)
        {
            system("clear");
            scanf("%d", &t);
            err=pthread_create(&(tid[5]), NULL, &playandmenu, NULL);
        }
    }
    return 0;
}


saya menggunakan 5 thread dalam kodingan ini , thread pertama untuk melihat list lagu di folder playlist yang anda buat, thread kedua untuk memutar musik , thread ketiga untuk mem-pause musik, thread ke empat untuk continue musik yan g telah di pause , thread ke lima untuk men-stop musik. Sebelum itu pastikan anda telah mengistall "MPG123" player pada linux anda.

Kodingan ini harus disertai folder playlist yang berisi lagu akan dimainkan.
selamat mencoba :)