Rabu, 19 November 2014



Concurrency Semaphore dan IPC

           Concurrence adalah keadaan dimana terjadinya dua kejadian atau lebih yang terjadi secara bersamaan. Masalah - masalah yang dihadapi adalah bahayanya berbagai global resources, sulitnya OS mengatur alokasi resource secara optimal, dan sulitnya mencari kesalahan programming.
           Istilah - istilah yang ada pada concurrency antara lain :

  1. Atomic Operation -> funsi (action) yang diimplementasikan sebagai rangkaian instruksi yang tampaknya tidak dapat dibagi. Merukapan bagian program yang tidak dapat di interupt.
  2. Critical Section -> Bagian tertentu dari code yang membutuhkan akses ke shared resoruces. Tidak boleh dijalankan ketika ada proses lain yang sedang menjalankan bagian tersebut.
  3. Race Condition -> Hasil eksekusi dari beberapa thread/proses yang tergantung dari siapa yang berjalan duluan
            Mutual Exclusion (MUTEX) adalah sesuatu yang dibutuhkan untuk memastikan tidak ada proses lain yang menjalankan critical section, ketika ada proses yang sedang menjalankan atau bisa disebut kunci/ lock. Mekanismenya dapat dibagi 2 :
  • Menggunakan hardware (disable/ enable interrupt)
  • Menggunakan software (software object/ variable)
           Kesalahan penggunaan dapat menyebabkan :
  • Starvation -> Situasi dimana suatu proses tidak pernah dijalankan oleh prosesor
  • Deadlock -> Situasi dimana dua atau lebih proses tidak dapat berjalan karena saling menunggu resource dari yang lainnya.
            Semaphore dapat dimiripkan dengan sinyal. Semaphore memiliki beberapa kemungkinan nilai, yaitu:
  1. Awalnya diisi dengan bilangan intger non - negatif
  2. SetWait mengurangi nilai semaphore dan jika hasilnya minus, maka proses yang memanggil akan di block.
  3. SemSignal menambah nilai semaphore dan hasilnya lebih dari 0, maka proses  yang memanggil semWait bisa masuk ke ready queue lagi.
            InterProcess Communication (IPC) adalah mekanisme komunikasi antar proses yang berjalan pada satu komputer. Ada 4 macam IPC, yaitu:
  1. Pipe 
    1. Unnamed pipe 
    2. Named pipe -> Digunakan untuk 2 proses yang berjalan sendiri - sendiri. Hanya bisa digunakan pada proses - proses yang menggunakan filesystem yang sama. Membutuhkan file yang dibuat terlebih dahulu dengan menggunakan mknod. Ex: mknod pipe_file p
  2. Message Queues
  3. Shared memory
  4. Semaphores

Minggu, 09 November 2014


Thread

                 Thread pada dasarnya merupakan bagian yang lebih kecil dari proses. Thread sendiri merupakan bagian dari proses. Perbedaan yang mendasar antara proses dengan thread adalah proses tidak dapat mengakses ruang lain yang menjadi milik proses lain, sedangkan thread dapat mengakses ruang yang terdapat di thread lainnya. Dalam sebuah thread terdapat :
  • Thread state
  • Saved thread Context saat tidak berjalan
  • Execuiton stack
  • Local variables
  • Akses ke memory dan resource yang dimiliki oleh prosesnya
                  Keuntungan yang dimiliki thread antara lain :
  • Waktu pembuatan yang lebih cepat 
  • Waktu pemberhentian yang lebih cepat
  • Waktu pergantian antar thread lebih cepat daripada antar proses
  • Komunikasi antar thread lebih efisien
                  Thread State dapat dibagi menjadi beberapa ciri : 
  • Spawn, Thread muncul, atau dibuat oleh proses / OS
  • Block, Thread menunggu sebuah event 
  • Unblock, Ketika event yang ditunggu oleh thread muncul
  • Finish, Thread selesai
                   Implementasi dalam Thread dibagi menjadi 3 macam, user level thread, kernel level thread, dan hybrid level thread.

1) User Level Thread
     Ciri - cirinya :
  • Kernel Tidak mengetahui keberadaan thread 
  • Thread management dilakukan oleh aplikasi user level/ library 
      Keuntungannya
  • Thread switching tidak membutuhkan kernel mode privileges 
  • Dapat berjalan di berbagai OS
     Kerugiannya
  • Satu thread blocked, thread lain pada proses yang sama juga blocked
  • Dua thread pada proses yang sama tidak dapat berjalan bersamaan pada dua prosesor
2) Kernel Level Thread
     Ciri - Cirinya : Thread management dilakukan oleh kernel
     
     Keuntungannya 
  • Thread pada proses yang sama  dapat dijalankan pada prosesor  yang berbeda
  • Kernel routines juga dapat multithreading
     Kerugiannya 
  • Thread switching antar proses yang sama tetap melibatkan kernel
  • Dapat memperlambat 
3) Hybrid Level Thread 
     Ciri - cirinya :
  • Ada sejumlah kernel level thread yang dipetakan ke sejumlah user level thread
  • Pembuatan  thread, scheduling, sinkronisasi dilakukan di user space

Thread di Linux

             GNU / Linux menggunakan POSIX Standard Thread API atau dikenal dengan nama pthread. Program dengan thread harus di compile dengan option : -lpthread. Setiap thread dalam sebuah program diidentifikasikan dengan ID dengan type : pthread_t. Fungsi untuk membuat thread adalah :  int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); Dengan parameter :
  • 1 ----------> thread ID
  • 2 ----------> thread atribut (NULL untuk default atribut)
  • 3 ----------> fungsi yang ingin dijalankan
  • 4 ----------> parameter untuk fungsi yang dijalankan
             Beberapa fungsi lain di thread:
  • Pthread_self() ; digunakan untuk mengetahui thread ID dari thread yang sedang aktif
  • Pthread_equal(); Membandingkan thread ID yang satu dengan yang lain, apakah sama atau tidak

Selasa, 04 November 2014

Process Programming 


            Setiap process di Linux memiliki PID (Process ID). PID adalah 16 bit  integer yang keluar secara bersamaan. Setiap proses memiliki parent process, kecuali proses init. 


         Terdapat 3 cara untuk membuat proses baru melalui kode program : 

1. Fungsi system ()
    Menjalankan shell command. Didefinisikan dengan : #include<stdlib.h> , int system (const char *string);
     Fungsi ini tidak disarankan karena tidak portable, menghabiskan resource, dan berbahaya.

2. System call fork ()
    Fork() akan menduplikasikan proses yang ada. Proses hasil duplikasi disebut proses anak. definisi fungsi dengan : #include <unistd,h> , pid_t fork (void); pid_t vfork(void);.
    Return value dari fork() menentukan sedang ada di proses mana. Apabila  >0 ada di parent process, apabila =0 maka berada di child process, apabila <0 maka error.

3. Fungsi exec* family
    Ciri - cirinya adalah mengganti program yang sedang berjalan pada suatu proses.
    Keluarga exec: execv, execvp, execve, execlp, execle

Signal
    Signal adalah sebuah event yang dikirimkan ke suatu proses oleh proses itu sendiri atau proses lain. Digunakan untuk mengirimkan notifikasi kepada suatu proses bahwa ada suatu event. Definisi : #include <sys/types.h> #include <signal.h> int_kill(pid_t, pid, int sig);
     Beberapa contoh signal yang populer:
  • SIGKILL , mengakhiri eksekusi program sekarang juga
  • SIGTERM, mengakhiri eksekusi program
  • SIGSEV, diterima ketika program melakukan segmentation violation
  • SIGSTOP, menghentikan sementara suatu proses sekarang juga
  • SIGCONT, melanjutkan kembali program yang di stop
  • SIGINT, interrupt ke suatu proses
     Terdapat 2 cara mengirimkan sinyal ke proses, yaitu dengan perintah kill ( kill -SIGKILL pid) atau dengan menggunakan definisi system call kill().
     Agar proses induk bisa menunggu proses anaknya selesai, maka membutuhkan system call wait(). wait() akan memblok eksekusi program sampai salah satu proses anaknya mati.
 
   


Proses

         Proses adalah program yang sedang di eksekusi. Proses terdiri dari kode program, sekumpulan data, dan atribut yang mendeskripsikan status dari proses tersebut. Setiap proses memiliki daftar urutan instruksi yang dijalankan, yang disebut dengan trace. Terdapat pula dispatcher, yaitu program kecil yang mengatur proses mana yang akan dijalankan oleh prosesor.
          Status proses adalah sinyal atau tanda proses tersebut sedang dijalankan. Terdapat beberapa alasan proses di - Suspend, yaitu:
  • Swapping
  • Interactive user request
  • Timing
  • Parent process request
  • Lainnya
           Terdapat beberapa macam kontrol proses:
1. Memory Table
     Digunakan untuk mencatat perubahan - perubahan di memori baik fisik maupun virtual. Informasi yang ada diantaranya alokasi main memory ke proses, alokasi memory sekunder ke proses, atribut proteksi pada blok tertentu di memory, informasi - informasi tentang virtual memory.

2. I/O Tables and File Tables
    I/O Tables digunakan untuk pembagian akses I/O device
    File Tables digunakan untuk mengatur pembagian akses ke File. Informasi yang ada : keberadaan file, lokasi file di memory, status.

3. Process Tables
    Menyimpan informasi mengenai setiap proses yang ada : State, PID, Lokasi memori. Setiap proses memiliki proses imagenya sendiri - sendiri. Proses image terdiri dari : Process Control Block, User data, Stack. Proses Image berada di block memory yang kontinu.
    Process Control ( Mode of Execution), terdapat user mode dan System mode atau control mode atau kernel mode.

          Process Creation
  • Memberi ID yang unik pada proses baru
  • Mengalokasikan ruang untuk proses baru
  • Membuat Process Control Block
  • Memasukkan ke dalam queue
  • Membuat data - data lain yang dibutuhkan
          Mode Switching
Langkah - langkah perubahan state pada proses:
  • Simpan isi dari prosesor
  • Update isi Process Control Block
  • Pindahkan process control block ke queue yang sesuai
  • Pilih proses lain yang akan dieksekusi
  • Update process control block dari proses itu
  • Update struktur data dari manajemen memori
  • kembali ke isi dari prosesor