Contoh Thread
pada Windows
Pembahasan
kali ini yaitu mengenai thread yang
ada pada sistem operasi. Thread yang
dibahas adalah thread yang ada pada
sistem oprasi Windows. Sebelumnya apasih thread
itu?
Thread
?
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 thread
lainnya 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
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 thread
yang 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 thread sering 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 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.
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.
Daftar
Pustaka
1. https://www.google.co.id/amp/s/tintakopi.wordpress.com/2011/10/24/thread-multhiread/amp/
2. https://id.m.wikipedia.org/wiki/Utas_(komputer)
3. https://www.google.co.id/url?sa=t&source=web&rct=j&url=https://juliusbata.files.wordpress.com/2011/02/tugasso_juliusbata_309012.pdf&ved=0ahUKEwjy9o-bqI3XAhUSTY8KHb13DKUQFggcMAA&usg=AOvVaw3yV1FR7xp8tOkfYrWXPQ0_