THREADS PADA WINDOWS
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
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 :
- 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.
- 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. Gambar 2 . Kernel Threads
- 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)
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 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
Posting Komentar