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. Gambar 2 . Kernel Threads
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)
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
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