08 December 2014

Mengenal Linux Thread

Thread ID direpresentasikan dengan tipe 'pthread_t'. Tipe ini adalah tipe struktur sehingga harus ada fungsi yg membandingkan dua thread ID.
#include<pthread.h>
int pthread_equal(pthread_t tid1, pthread_t tid2);
Fungsi ini membutuhkan dua thread ID dan mengembalikan nilai tidak nol jika kedua thread ID adalah sama besar atau selain itu ia akan mengembalikan nilai nol.

Kasus lain muncul ketika sebuah thread ingin mengetahui thread IDnya itu sendiri. Untuk kasus ini kita membutuhkan fungsi di bawah ini.
                #include <pthread.h>
pthread_t pthread_self(void);
Fungsi p_thread_self() digunakan untuk mencetak thread ID itu sendiri.

Normalnya ketika program dijalankan dan menjadi sebuah proses akan membutuhkan setidaknya satu thread untuk mengontrol. Sebuah proses dapat membuat ekstra hread dengan menggunakan fungsi di bawah ini.
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg)

Contoh penggunaan tiga fungsi thread di atas
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>

pthread_t tid[2];

void* doSomeThing(void *arg)
{
    unsigned long i = 0;
    pthread_t id = pthread_self();

    if(pthread_equal(id,tid[0]))
    {
        printf("\n First thread processing\n");
    }
    else
    {
        printf("\n Second thread processing\n");
    }

    for(i=0; i<(0xFFFFFFFF);i++);

    return NULL;
}

int main(void)
{
    int i = 0;
    int err;

    while(i < 2)
    {
        err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL);
        if (err != 0)
            printf("\ncan't create thread :[%s]", strerror(err));
        else
            printf("\n Thread created successfully\n");

        i++;
    }

    sleep(5);
    return 0;
}

Kodingan ini melakukan:
1.       Menggunakan fungsi pthread_create() untuk membuat dua thread
2.       Fungsi permulaian digunakan unuk membuat kedua thread sama besar
3.       Di dalam dungsi ‘doSomeThing()’, thread tsb menggunakan fungsi pthread_self() dan pthread_equal() untuk mengeksekusi thread mana yg menjadi pertama atau thread kedua yg dibuat

Ketika dijalankan, kodingan ini akan menghasilkan output:
$ ./threads
Thread created successfully
First thread processing
Thread created successfully
Second thread processing

Perhatikan outputnya, thread pertama dibuat dan dia mulai melakukan proses, kemudian thread ke dua dibuat dan melakukan proses. Satu hal yg harus diingat, urutan eksekusi dapat berbeda-beda tergantung dengan “OS scheduling algorithm”.





16 November 2014

Multithread

Single-Threading dan Multi-Threading
Single-Threading adalah sebuah lightweight process (proses sederhana) yang mempunyai thread tunggal yang berfungsi sebagai pengendali/ controller.
Multi-Threading adalah proses dengan thread yang banyak dan mengerjakan lebih dari satu tugas dalam satu waktu.



Keuntungan Multi-Threading
  1. Responsive; tanggap: Multi-Threading mengizinkan program untuk berjalan terus walau-pun pada bagian program tersebut di block atau sedang dalam keadaan menjalankan operasi yang lama/ panjang. Sebagai contoh, multithread web browser dapat mengizinkan pengguna berinteraksi dengan suatu thread ketika suatu gambar sedang diload oleh thread yang lain.
  2. Pembagian sumber daya: Secara default, thread membagi memori dan sumber daya dari proses. Ketika thread berjalan pada data yang sama, thread tersebut bisa berbagi cache memory.
  3. Ekonomis: Mengalokasikan memori dan sumber daya untuk membuat proses adalah sangat mahal. Alternatifnya, karena thread membagi sumber daya dari proses, ini lebih ekonomis untuk membuat threads.
  4. Pemberdayaan arsitektur multiprosesor: Keuntungan dari multi-threading dapat ditingkatkan dengan arsitektur multiprosesor, dimana setiap thread dapat jalan secara paralel pada prosesor yang berbeda. Pada arsitektur prosesor tunggal, CPU biasanya berpindah-pindah antara setiap thread dengan cepat, sehingga terdapat ilusi paralelisme, tetapi pada kenyataannya hanya satu thread yang berjalan di setiap waktu.

Kerugian Multi-Threading
  1. Multiple thread bisa mengganggu satu sama lain saat berbagi hardware resource, misalnya chace memory.
  2. Execution time (waktu proses) dari sebuah single-thread tidak dapat diimprove (ditambah), tapi malah bisa diturunkan. Ini terjadi karena penurunan frequensi yang dibutuhkan ketika terjadi pergantian thread yang berjalan.
  3. Harus ada dukungan dari hardware ataupun software untuk melakukan multi-Threading.

Model-Model Threading
  1. Kernel-level threading; thread ini dibuat oleh pengguna yang berkorespondensi 1-1 dengan entitas-entitas yang terjadwalkan yang berada di kernel. Ini merupakan implementasi (penerapaan) paling sederhana dari threading.
    • Thread kernel didukung langsung oleh sistem operasi.
    • Pembuatan, penjadwalan, dan manajemen thread dilakukan oleh kernel pada kernel space.
    • Pengaturan thread dilakukan oleh sistem operasi, sehingga pembuatan dan pengaturan kernel thread lebih lambat dibandingkan user thread.
  1. User-level threading; sebuah pemetaan N-1, yang berarti bahwa semua level aplikasi thread dipetakan ke entitas tunggal yang ada di kernel. Dengan pendekatan ini, switching proses dapat dilakukan dengan sangat cepat.
    • Thread pengguna didukung kernel serta diimplementasikan dengan pustaka (library) thread pada tingkatan pengguna.
    • Pustaka (library) menyediakan fasilitas untuk pembuatan thread, penjadwalan thread, dan manajemen thread tanpa dukungan dari kernel.
    • Semua pembuatan dan penjadwalan thread dilakukan dalam ruang pengguna tanpa campur tangan kernel.
    • Thread pengguna biasanya dapat cepat dibuat dan
      dikendalikan
  1. Hybrid threading; sebuah pemetaan M-N, yang berarti beberapa jumlah N-thread aplikasi dipetakan ke beberapa entitas di kernel.

Thread dalam Sistem Operasi
  • Sistem operasi telah mendukung proses multithreading.
  • Setiap sistem operasi memiliki konsep tersendiri dalam pengimplementasiannya.
  • Sistem operasi dapat mendukung thread pada tingkatan kernel maupun tingkatan pengguna.

Model Multi-Threading
a.       Many-to-One
·         Memetakan beberapa thread tingkatan pengguna ke sebuah thread tingkatan kernel.
·         Pengaturan thread dilakukan dalam ruang pengguna, sehingga efisien.
·         Hanya satu thread pengguna yang dapat mengakses thread kernel pada satu saat.



b.      One-to-One
·         Memetakan setiap thread tingkatan pengguna ke thread kernel.
·         Model ini menyediakan lebih banyak concurrency dibandingkan model Many-to-One.



c.       Many-to-Many
·         Mengelompokkan banyak thread pengguna untuk dipetakan ke thread kernel yang jumlahnya lebih sedikit atau sama dengan tingkatan pengguna.
·         Mengijinkan sistem operasi untuk membuat sejumlah thread kernel.


06 October 2014

Instalasi Linux Dualboot

Hai Readers!

Udah pada tau kan kalo laptop kalian bisa menjalani dua sistem operasi sekaligus? Yap. Itu lah yg dinamakan dual boot. Hmmm.. buat apa sih sebenernya? Pasti Readers berpikir "Ngapain sih kan Windows aja cukup" atau "Linux aja cukup". Yaa jawabannya sih tergantung dari kebutuhan masing-masing. Kalau saya sih karena saya kuliah di Institut Teknologi Sepuluh Nopember jurusan Teknik Informatika yg menganjurkan untuk menginstall Linux dan Windows pada laptop masing-masing. Nah, hari ini saya akan memberikan tutorial untuk menginstall Linux pada Windows 7.

Hal-hal yg mesti Readers siapkan:
  1. Installer Linux (boleh di CD boleh di flashdisk)
  2. Partisi hardisk

Udah siap? Lanjutttt!
  1. Klik Start, pilih Computer klik kanan dan pilih Manage. Kemudian pililh Disk management.
  2. Buat partisi di data D, klik kanan pilih shrink volume dan masukan 35000 pada Enter the amount of space to shrink in MB. lalu klik shrink.
  3. Tutup Windows, restart laptop Readers sembari dipasang installer Linuxnya (di sini saya menggunakan flashdisk).
  4. Atur Boot priority dengan menekan ESC atau F2 (tergantung jenis laptopnya) pilih boot pertama, biasanya akan muncul nama flashdisk Readers. Setelah di reboot pilih boot device (pilih flashdisk Readers) tekan enter.
  5. Muncul Unet boot in. Pilih try ubuntu without installing. Laptop akan booting dan menampilkan tampilan desktop Linux beserta Libre Office dan lain lain.
  6. Kalau sudah puas melihat-lihat tampilan Linux, lanjut aja kita mengklik install ubuntu untuk mulai mengintall Linux di laptop Readers.
  7. Ketika reader mengklik install ubuntu, akan muncul tampilan instalasi Linux. Pilih English klik continue muncul tampilan Preparing to install ubuntu klik cotinue kemudian muncul tampilan wireless klik continue aja trus muncul tampilan Installation type pilih Something else klik continue. Kemudian muncul tampilan hardisk laptop Readers. Untuk menginstall Linux minimal Readers mempunyai dua partisi. Satu untuk root dan satu untuk swap. Klik add, masukan swap area sebesar 1500, klik ok. Lalu klik add lagi, masukan root sebesar 35201 (sisa dari swap area), kosongkan mount point blank root, klik ok. Kemudian muncul tampilan hardisk lagi lalu klik install now. Instalasi berjalan. Pilih Jakarta, pilih keyboard layout: english, isi username dan password, klik continue. Lalu readers akan dihadapkan dengan pilihan untuk mengganti gambar desktop, silakan pilih gambar yg readers inginkan. Tunggu instalasi sampai selesai.
  8. Restart laptop Readers untuk memilih sistem operasi mana yg akan Readers gunakan. Jika ingin menggunakan Linux pilih ubuntu with Linux, jika ingin menggunakan Windows 7 tinggal pilih saja Windows 7.

Mudah kan? Selamat mencoba!