Sabtu, 28 November 2015

FUSE

Fuse

Fuse (Filesystem in Userspace), merupakan jembatan antara user dengan filesystem, sehingga user yang ingin mengubah filesystem harus mengubah terlebih dahulu kode kernelnya. Hal ini bisa dilakukan dengan mengakses kode tersebut melalu userspace yang di jembatani fuse.
Berikut adalah contoh kodingan untuk membuat Daemon Fuse:





Fungsi int xmp_getattr() berguna untuk membaca block char ketika kita membuka membuka sebuah file/folder. sedangkan xmp_getdir berguna untuk melakukan trace, sehingga bisa diketahui directory file yang diakses dengan fuse.

Program di atas di jalankan tidak dengan cara compile yang biasa namun harus menggunakan syntax seperti ini di terminal:
gcc -Wall [nama file.c] `pkg-config fuse --cflags --libs` -o [nama file outputan]

kemudian dijalankan dengan cara membuat directory baru dahulu contohnya:
mkdir /tmp/rara

lalu eksekusi menggunakan syntax:
./[nama file outputan] /tmp/rara

maka nanti di folder rara akan muncul seperti ini hasilnya



Jika kita lihat semua file yang ada di folder download, juga ada di folder /tmp/rara yang baru saja dibuat tadi. Selamat mencoba!





Jumat, 06 November 2015

IPC

IPC


            Pada kesempatan kali ini yang akan saya bahas adalah tentang bagaimana komunikasi antar proses. Seperti halnya mahluk hidup, sebuah proses di dalam komputer juga saling berkomunikasi dengan proses lainnya, apa yang mereka komunikasikan ya?
Yang mereka bicarakan tentu bukan gosip murahan belaka atau hal tidak penting, yang mereka komunikasikan adalah pembagian resource yang mereka butuhkan untuk menjalankan proses mereka, jadi dengan komunikasi ini di mungkinkan 2 buah program yang berbeda dapat mengakses sebuah kolom data yang sama dan sama sama dapat mengubah isi nilai dari data tersebut. Komunikasi ini biasa disebut dengan IPC (Interprocess Communication)
IPC dapat dilakukan dengan beberapa metode antaranya:

1.      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. Jadi proses yang melakukan akses atau interupt terlebih dahulu akan selalu dilayani dan mendapatkan hak lebih dulu untuk mengakses resource atau data yang ada di blok memory.

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

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

Di bawah ini adalah contoh kodingan untuk membuat shared memory.


#include
#include
#include
#include
#include
#include

using namespace std;

struct LOCK {
  string name;
  string type;
  vector pids;
};

int main ()

{

  int segment_id;

  LOCK* shared_memory;

  struct shmid_ds shmbuffer;

  int segment_size;

  const int shared_segment_size = 0x6400;



  /* Allocate a shared memory segment.  */

  segment_id = shmget (IPC_PRIVATE, shared_segment_size,

                     IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);

  /* Attach the shared memory segment.  */

  shared_memory = (LOCK*) shmat (segment_id, 0, 0);

  printf ("shared memory attached at address %p\n", shared_memory);

  /* Determine the segment's size. */

  shmctl (segment_id, IPC_STAT, &shmbuffer);

  segment_size  =               shmbuffer.shm_segsz;

  printf ("segment size: %d\n", segment_size);

  /* Write a string to the shared memory segment.  */

  //sprintf (shared_memory, "Hello, world.");
  shared_memory -> name = "task 1";
  shared_memory -> type = "read";
  (shared_memory -> pids).push_back("12345");
  (shared_memory -> pids).push_back("67890");

  /* Detach the shared memory segment.  */

  shmdt (shared_memory);



  /* Reattach the shared memory segment, at a different address.  */

  shared_memory = (LOCK*) shmat (segment_id, (void*) 0x5000000, 0);

  printf ("shared memory reattached at address %p\n", shared_memory);

  /* Print out the string from shared memory.  */

  //printf ("%s\n", shared_memory -> name);
  cout << "Name of the shared memory: " + shared_memory -> name << endl;

  /* Detach the shared memory segment.  */

  shmdt (shared_memory);



  /* Deallocate the shared memory segment.  */

  shmctl (segment_id, IPC_RMID, 0);



  return 0;

}


Sabtu, 17 Oktober 2015

Daemon Process

Daemon Process
Pada post kali ini saya akan membahas tentang daemon process. Apa sih daemon process itu? Intinya daemon process adalah process yang masih berjalan meskipun kita menutup aplikasinya, sering disebut juga background process.
Nah untuk membuat daemon process diperlukan beberapa langkah dibawah ini:
1.       Fork Parent Process dan hentikan Parent Process.
2.       Ubah mode file menggunakam UMASK(0).
3.       Membuat Unique Session ID (SID).
4.       Mengubah directory kerja.
5.       Menutup File Descriptor Standar.
6.       Membuat Loop utama (core proses dari daemon).
Dari ke enam proses tersebut di post kali ini akan saya jelaskan satu satu biar tidak bingung.

1.       Fork Parent Process dan Hentikan Parent Process
Langkah pertama adalah dengan melakukan forking untuk pembuatan proses baru, apa itu forking? Forking atau fork process adalah sebuah operasi dimana sebuah proses membuat kopian dari dirinya sendiri . Setelah itu kita matikan parent processnya, parent process adalah process yang memiliki child process. Dengan matinya parent process, sistem akan menganggap bahwa proses tersebut telah berakir, padahal proses tersebut masih dilanjutkan oleh childnya yang telah dibuat dari forking.
2.       Ubah mode file
Langkah kedua adalah mengubah mode file menggunakan UMASK(). Mengapa hal ini diperlukan? Dalam prosesnya nanti kita akan membutuhkan semua akses ke dalam daemon, termasuk akses log filenya, nah dikarenakan itu kita akan mengubah permission access kita ke proses tersebut menggunakan UMASK().
3.       Membuat SID
Unique Section ID ini diperlukan agar child process yang telah dibuat tadi dapat berjalan, karena kernel tidak akan mengizinkan suatu proses berjalan tanpa adanya ID.
4.       Mengubah directory kerja
Setelah memiliki ID kita harus menentukan dimana daemon ini akan bekerja, biasanya akan di pilih tempat yang selalu ada dan tidak akan di hapus, di root directory misalnya.
5.       Menutup file descriptor standar

Menutup file descriptor standar(STDIN, STDOUT, STDERR) hal ini dilakukan karena daemon tidak membutuhkan kendali terminal, jika file descriptor tersebut tidak ditutup dapat memberikan potensi bahaya bagi daemon process.
6.       Membuat loop utama
Buat looping yang menentukan daemon bekerja setiap berapa detik ataupun selama berapa saat.

Berikut adalah source code daemon process:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
  pid_t pid, sid; 
pid = fork();
if (pid < 0){
exit(EXIT_FAILURE); }  
if (pid > 0){
exit(EXIT_SUCCESS); }
umask(0);
sid = setsid();  
if (sid < 0){
exit(EXIT_FAILURE); }
  if ((chdir("/")) < 0){
  printf("test");
  exit(EXIT_FAILURE);  } 
close(STDIN_FILENO);
close (STDOUT_FILENO);close(STDERR_FILENO); 
           exit(EXIT_SUCCESS);
}
 

Sabtu, 26 September 2015

Introduction to Shellscripting

Shell scripting, apa itu shell scripting? Shell scripting merupakan sebuah teks, yang berisi urutan perintah yang bisa di jalankan di sistem operasi berbasis unix. Jadi bisa dibilang Shell scripting sama halnya dengan koding yang kita lakukan di sistem operasi berbasis windows, hanya saja ini untuk sistem operasi berbasis unix.

Untuk memulainya tentu saja pertama kita harus menginstal sistem operasi berbasis unix, ada beberapa yang populer diantaranya:
  1. Linux Mint
  2. Ubuntu 
Jika kalian menggunakan ubuntu, maka tampilan dekstop dasarnya adalah seperti ini
 Lalu untuk melakukan shell scripting, klik lambang ubuntu yang ada di pojok kiri atas layar, kemudian search aplikasi bernama terminal, dengan tampilan kurang lebih seperti ini
Selanjutnya kita bisa memunculkan, aplikasi untuk melakukan bash scripting, layaknya menggunakan dev-c untuk bahasa c dengan mengetik gedit atau nano di terminal.
Kemudian kita bisa melakukan tradisi turun temurun dengan membuat program pertama berupa kata "hello world" dengan menuliskan kode seperti di bawah ini.


Jangan lupa untuk menyimpan file tersebut dengan ekstensi .sh karena ekstensi tersebut akan memberi tahu kepada sistem bahwa file tersebut adalah executeable file.
Nah untuk menjalankannya kita bisa kembali ke terminal, lalu mengetik perintah ./
Setelah itu pasti akan muncul tulisan permission denied hal ini dikarenakan di sistem operasi unix kita harus memberi tahu kepada sistem hak akses yang diberikan kepada user untuk suatu perogram seperti apa. Hal ini bisa diatasi dengan menuliskan chmod 777 angka 777 disitu akan membuat kita memiliki akses penuh terhadap file tersebut, dapat mengeksekusinya, menginputkan atau merubah datanya, layaknya administrator di komputer windows.


Jumat, 12 Oktober 2012

coba

formulir




awakmu pelajar ta ?


umur pira rek?

5-10
11-15
16-20


lahir nang endi?