Senin, 26 Oktober 2015

[Pert 7 & 8] Thread


Thread adalah :
  • - State eksekusi (running, ready, dll)
  • - Mempunyai stack eksekusi
  • - Mengakses memory dan resource nya dai proses
  • Menyimpan isi thread ketika tidak dijalankan


Thread mengijinkan beberapa eksekusi untuk mengambil tempat dalam lingkungan proses yang sama.

Lightweight process --> karena thread memiliki properti dari proses.

Multithreading --> mengijinkan beberapa thread dalam proses yang sama.

Model Thread :






Setiap stack memiliki stack nya sendiri.




Keuntungan dari Thread ialah :
  • - Memerlukan waktu yang sedikit untuk membuat thread yang baru daripada sebuah proses
  • - Waktu untuk mengterminate thread lebih sedikit daripada pada proses
  • - Waktu untuk mengubah dari 2 thread dalam proses yang sama sangast sedikit.
  • - Thread yang berada dalam proses yang sama, maka dapat membagi memory dan file. Oleh karena itu, thread dapat berkomunikasi satu sama lain tanpa harus memanggil kernel.


Cth codingan :

int pthread_create (pthread_t *obj, const pthread_attr_t* attr, void* (*func) (void*), void* arg);


Implementasi Thread :

- User Space

Keuntungan :
  1. Mengijinkan setiap proses untuk mempunyai algoritma penjadwalan sendiri.
  2. Performa lebih bagus


Kerugian dari implementasian Thread :
  1. Implementasi untuk membloking system terpanggil
  2. Thread lain tidak dapat dijalankan kecuali thread yang pertama menyerah.



- Kernel Space

Keuntungan : 
  • Tidak perlu untuk pemanggilan non-blocking system yang baru.


Kerugian :
  • Cost yang lebih besar untuk membuat dan menghancurkan thread.



- Hybrid




Pop Up Thread

(a) --> Ketika pesan belum sampai
(b) --> Ketika pesan telah sampai


Basic dari Thread :
1. Semua Thread di dalam proses yang sama saling membagi :
  • Tempat alamat yang sama
  • Instruksi proses
  • Data
  • Open files (descriptor)
  • Sinyal dan signal handler 
  • Directory pekerjaan yang sedang dilakukan (current)
  • ID dari user maupun grup


2. Setiap Thread memiliki komponen yang unik, yaitu :
  • ID Thread
  • Set register, dan stack pointer
  • Stack untuk variable lokal, dan alamat untuk return (return addresses) 
  • Signal mask
  • Prioritas
  • Return value



Thread State

1. Spawn
  • Ketika sebuah proses diciptakan, otomatis thread untuk proses tersebut juga akan tercipta.
  • Thread dalam proses dapat menciptakan thread lain dalam proses tersebut, yang dapat menyediakan instruksi pointer dan argumen untuk thread baru tersebut. Thread baru tersebut nanti nya akan mempunyai konteks register dan stack space nya sendiri dan akan diletakkan pada queue yang sudah siap.


2. Block
  • Ketika thread diharuskan untuk berhenti dalam suatu keadaan, thread akan memblok user register nya, program counter dan juga stack pointer
  • Prosesor boleh mengaktifkan eksekusi untuk thread aktif lainnya pada proses yang sama maupun berbeda


3. Unblock
  • Ketika keaddan dimana thread terblok, thread akan dipindah ke barisan urutan yang siap (ready queue)


4. Finish
  • Ketika thread telah selesai, konteks register dan stacks nya akan dialokasikan



Contoh Multi Threading pada Uniprocessor



Relasi dari Thread dan Proses :

  • 1 : 1
    • Setiap thread yang dieksekusi merupakan proses yang unik dengan alamat dan resource nya sendiri
    • Cth : implementasian pada LINUX yang tradisional
  • M : 1
    • Sebuah proses mendefinisikan alamat dan dynamic resource kepemilikan. Thread yang banyak dapat di buat dan dieksekusi tanpa harus ada proses tersebut
    • Cth : Windows NT, Solaris, OS/2, OS/390, MACH
  • 1 : M
    • Thread yang dapat bermigrasi (berpindah) dari satu lingkungan proses ke lain nya. Thread dengan begitu dapat dipindah secara gampang dari system tersebut
    • Cth : Ra (Cloud), Emerald
  • M : M
    • Kombinasi dari M:1 dan 1:M
    • Cth : TRIX

Threading Granularity 

1. Coarse Threading
  • Module bersifat individu, disebut sebagai sistem, ditetapkan pada prosesor sendiri
  • Pada source engine sate, dapat disebut untuk meletakkan rendering pada satu prosessor, AI (Artificial Intelligence) pada yang lain, kemudian physic pada lainnya.
  • Setiap module merupakan single threaded dan prinsip koordinasi melibatkan sinkronisasi dari semua thread dengan thread timeline
2. Fine-Grained Threading
  • Task yang sama terletak pada beberapa prosessor
3. Hybrid Threading
  • Melibatkan penggunaan yang selektif pada fine grained threading untuk beberapa sistem dan single threading untuk beberapa sistem yang lain.


POSIX (Portable Operating System Interface) Thread :



Programming pada Thread :

int pthread_create (pthread_t *obj, const pthread_attr_t* attr, void* (*func) (void*), void* arg);


  • Parameter obj menunjuk pada struktur dari pthread_t, dimana digunakan untuk menyimpan ID yang sudah dibuat, beserta detail nya.
  • Parameter attr menunjuk pada objek dari pthread_attr_t dimana digunakan untuk men-set properti spesial dari thread. (scheduling dan properti prioritas)
  • Ketika attr = NULL, thread akan dibuat ulang dengan scheduling dan properti prioritas yang default
  • "func" adalah pointer dari sebuah fungsi (fungsi hanya dapat mengambil parameter void*)
  • "arg" adalah void* dimana merepresentasikan argumen yang diberikan kepada fungsi func ketika thread dieksekusi
  • Ketika berhasil, fungsi akan meng-return 0

pthread_self()
--> untuk mendapatkan ID thread sendiri

pthread_join()
--> untuk bergabung dengan flow kontrol yang berbeda
--> ketika dipanggil, thread yang terpangggil akan ditunda sampai eksekusi dari target thread telah selesai
--> melepas resource

pthread_exit()
--> fungsi mengambil pointer ke data dimana dikembalikan ketika thread digabung




Tidak ada komentar:

Posting Komentar