NIM : 8020170120

PENGERTIAN DAN CONTOH THREAD

PENGERTIAN

Thread merupakan unit terkecil dalam suatu proses yang bisa dijadwalkan oleh sistem operasi dan sebuah unit dasar dari sistem utilisasi pada processor (CPU). Dalam ilmu komputer, thread diartikan sebagai sekumpulan perintah (instruksi) yang dapat dilaksanakan (dieksekusi) secara sejajar dengan thread  lainnya, dengan menggunakan cara time slice (ketika satu CPU melakukan perpindahan antara satu thread  ke threadlainnya atau multiprocess (ketika thread-thread tersebut dilaksanakan oleh CPU yang berbeda dalam satu sistem. Thread sebenarnya mirip dengan proses, tetapi cara berbagi sumber daya antara proses dengan thread sangat berbeda. Thread merupakan sebuah situs eksekusi seperti ready, running, suspend, block, queue,dll. 


Thread kadang disebut sebagai proses ringan (lightweight). Sebuah thread  terdapat : ID Thread, Program Counter, Register, dan Stack. Sebuah thread berbagi code section, data section dan resource sistem operasi dengan thread yang lain yang memiliki proses yang sama. Keuntungan dari adanya thread :

1. Pembuatan thread baru lebih cepat dari pada proses   baru 

2. Penghentian thread lebih singkat daripada penghentian   proses

3. Switching antara dua thread  
    lebih singkat daripada switching antar proses 

4. Thread dapart berkomunikasi satu sama lain


CONTOH
User Thread dan Kernel Thread
User Thread merupakan thread yang berjalan pada user level. Pengaturan dan penjadwalan dari thread ini sepenuhnya dilakukan pada user level tanpa campur tangan dari kernel level. Setiap proses memiliki thread table untuk menyimpan informasi threadyang dimilikinya. User thread secara umum lebih ringan dalam proses pembentukan dan penjadwalan. Akan tetapi tidak dapat berjalan secara multi threading.
Kernel thread merupakan thread yang diciptakan dan berjalan pada kernel level. Penjadwalan dan manajemen dilakukan oleh kernel pada kernel level. Kernel threadsering disebut juga proses yang ringan (Lightweight Process/LWP). Kernel thread lebih lambat proses pembentukan dan penjadwalan jika dibandingan dengan user thread. Kernel thread mendukung multithreading dimana beberapa thread dapat dijalankan dalam waktu yang bersamaan.
                                         User Thread                          Kernel Thread

Terdapat relasi diantara user threads dan kernel threads. Relasi ini secara umum dapat dimodelkan menjadi 3 bentuk yaitu :
1. Many-to-One
Many-to-One model memetakan semua user thread ke dalam satu kernel thread. Manajemen pengaturan thread dilakukan pada user level sehingga kinerja lebih cepat. Kekurangannya adalah jika suatu thread melakukan blocking maka threadyang lain tidak dapat berjalan. Hanya satu thread yang dapat dijalankan pada satu waktu.

2. One-to-One
Satu user thread memiliki satu kernel thread. Keuntungan dari model ini adalah lebih dari satu thread dapat berjalan secara bersamaan. Jika satu thread melakukan blocking, thread yang lain tetap dapat berjalan. Karena setiap penciptaan userthread harus dibarengi dengan kernel thread maka model ini cenderung lebih lambat dibandingkan dengan many-to-one.

3. Many-to-Many
Memetakan beberapa user thread ke dalam sejumlah kernel thread, dimana jumlah kernel thread yang dapat digunakan sama atau lebih sedikit dari jumlah user thread. Pada model ini hanya satu thread yang dapat dijadwalkan oleh kernel thread dalam satu waktu.

THREAD PADA WINDOWS
Windows mengunakan Win32 API sebagai API utama dalam hampir semua sistem operasi Microsoft. Selain itu windows mengimplementasi model relasi One-to-One, dimana terdapat satu kernel thread yang berasosiasi dengan masing – masing user thread.
 Thread pada windows secara umum mempunyai komponen sebagai berikut :
  •   Thread ID
  •   Register set
  •   User stack dan kernel stack
  •   Private storage area.
Register set, stacks dan private data storage disebut sebagai context dari sebuah thread. Struktur data utama dari sebuah thread :
  •   ETHREAD (executive thread block)
  •   KTHREAD (kernel thread block)
  •   TEB (thread environment block)

ETHREAD (executive thread block


Bagian penting dari ETHREAD adalah KTHREAD, Process ID, Thread start address. Blok KTHREAD merupakan pointer yang merujuk pada kernel thread (KTHREAD), Process ID juga merupakan suatu pointer yang menunjuk pada proses utama yang memiliki thread tersebut dan Thread start address adalah alamat dari rutin awal thread. 

KTHREAD (kernel thread block


KTHREAD menyimpan informasi yang dibutuhkan oleh kernel untuk dapat melakukan penjadwalan dan sinkronisasi thread. Pada KTHREAD juga terdapat kernel stack, yang mana akan digunakan ketika thread berjalan pada kernel mode. Juga terdapat pointer yang menunjuk TEB.

TEB (thread environment block)


TEB menyimpan informasi image loader dan beberapa DLLs dari windows. Komponen - komponen ini berjalan pada user mode, maka dibutuhkan suatu struktur data yang dapat dimanipulasi(writable) pada user mode. Oleh karena itu, tidak seperti KTHREAD dan ETHREAD yang berada pada kernel space, TEB berada pada user space.


                                 Struktur Thread pada Windows XP

Proses Pembentukan Thread
Sebelum sebuah thread dibuat, diperlukan stack dan context dimana thread akan dijalankan. Proses pembentukan stack dilakukan dengan pemanggilan fungsi CreateThread. Fungsi ini terdapat dalam Kernel32.dll. Process manager akan mengalokasikan space untuk object dari thread yang baru dan memanggil kernel untuk membuat kernel thread block. Berikut ini langkah – langkah pembentukan thread :
      1.  Memanggil fungsi CreateThread membuat stack untuk thread pada user-                level.
2.  Thread's hardware context diinilisasi oleh CreateThread.
3.  Fungsi NtCreateThread dipanggil untuk membuat executive thread object.      NtCreateThread memanggil fungsi PspCreateThread dan menjalankan proses – proses berikut :
  •  Thread count pada program/proses akan dinaikan 1.
  •  Executive thread block (ETHREAD) dibuat dan diinisialisasi.
  •  Thread ID dibuat untuk thread yang baru
  •  TEB di setup (user- mode)
  •  Thread start address pada user-mode disimpan dalam ETHREAD
  •  Fungsi KelnitThread dipanggil untuk membuat KTHREAD block. KelnitThread mengalokasikan kernel stack dan inisialisasi machinedependent hardware context termasuk didalamnya context, trap, dan exception frames.
  •    Thread access token di set sesuai dengan proces acces token dan akan dicek apakah program/proces tersebut memiliki hak untuk membuat thread atau tidak. Proses cek ini akan selalu berhasil jika thread yang diciptakan bersifat lokal, dimana thread yang diciptakan masih berada dalam program/proces yang sama. Kemungkinan gagal jika thread yang akan dibuat untuk program/proces yang lain.

    4. Thread baru diinformasikan oleh CreateThread kepada Windows subsystem           dan subsystem melakukan beberapa proses setup untuk thread yang baru.
5. Thread handle dan thread ID dikembalikan kepada proses/program yang                membuat thread tersebut.
6. Thread dijalankan.

Windows dalam mengimplementasikan thread memakai model One-to-One. Sehingga windows mendukung multithreading. Win32 API adalah pustaka thread yang digunakan oleh windows.
Struktur data utama dalam thread windows : ETHREAD (executive thread block), KTHREAD (kernel thread block) yang keduanya berada pada kernel-level dan TEB (thread environment block) yang berada pada user-level.


Tidak ada komentar:

Posting Komentar