Thread Pada Windows

THREADS PADA WINDOWS


THREADS
Threads dapat dikatakan sebagai suatu atau beberapa kegiatan dalam suatu proses. Threads merupakan unit terkecil dari suatu proses yang dapat dijadwalkan oleh suatu sistem operasi. Suatu thread memiliki :
- Thread ID
- Program counter
- Register set
- Stack
Suatu threads berbagi memory, code section, data section dan sumber daya sistem operasi dengan threads lainnya yang berada pada proses yang sama.
Keuntungan dari adanya threads
- Pembuatan thread baru lebih cepat dari pada proses baru,
- Penghentian thread lebih singkat daripada penghentian proses,
- Switching antara dua thread lebih singkat daripada switching antar proses,
- Thread dapat berkomunikasi satu sama lain.



User Threads
User threads merupakan threads 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 thread yang dimilikinya. User threads secara umum lebih ringan dalam proses pembentukan dan penjadwalan. Akan tetapi tidak dapat berjalan secara multi threading.



Kernel Threads
Kernel threads merupakan threads yang dicipatakan dan berjalan pada kernel level. Penjadwalan dan manajemen dilakukan oleh kernel pada kernel level. Kernel threads sering disebut juga proses yang ringan (Lightweight Process/LWP). Kernel threads lebih lambat proses pembentukan dan penjadwalan jika dibandingan dengan user threads. Kernel threads mendukung multithreading dimana beberapa thread dapat dijalankan dalam waktu yang bersamaan.

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 thread yang 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 user thread 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.

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



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.

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

DAFTAR PUSTAKA
http://en.wikipedia.org/wiki/Windows_API

http://en.wikipedia.org/wiki/Thread_(computer_science)

Russinovich, M., and Solomon, D. Microsoft Windows, Internals Fourth Edition: Microsoft Windows Server 2003, Windows XP, and Windows 2000.  Microsoft Press, 2005. hal 289 – 322

Silberschatz, A., Galvin, P., Gagne, G. 2004. Operating Systems Concepts with Java. Sixth Edition. John Wiley & Sons. hal 181 - 212











Komentar

Postingan populer dari blog ini

Bentuk-Bentuk Pemerintahan

Batas Wilayah Darat & Laut Indonesia