TRHEAD DALAM SOLARIS 2
Solaris 2 merupakan salah satu versi dari UNIX yang sampai dengan tahun
1992 hanya masih mendukung proses berat (heavyweight) dengan kontrol
oleh satu buah thread. Tetapi sekarang Solaris 2 sudah berubah menjadi
sistem operasi yang modern yang mendukung threads di dalam level kernel dan
pengguna, multiprosesor simetrik (SMP), dan penjadualan real-time.
Threads di dalam Solaris 2 sudah dilengkapi dengan library mengenai
API-API untuk pembuatan dan managemen thread. Di dalam Solaris 2 terdapat juga
level tengah thread. Di antara level pengguna dan level kernel thread terdapat
proses ringan/ lightweight (LWP). Setiap proses yang ada setidaknya
mengandung minimal satu buah LWP. Library thread memasangkan beberapa thread
level pengguna ke ruang LWP-LWP untuk diproses, dan hanya satu user-level
thread yang sedang terpasang ke suatu LWP yang bisa berjalan. Sisanya bisa
diblok mau pun menunggu untuk LWP yang bisa dijalankan.
Operasi-operasi di kernel seluruhnya dieksekusi oleh kernel-level threads
yang standar. Terdapat satu kernel-level thread untuk tiap LWP, tetapi ada juga
beberapa kernel-level threads yang berjalan di bagian kernel tanpa
diasosiasikan dengan suatu LWP (misalnya thread untuk pengalokasian disk).
Thread kernel-level merupakan satu-satunya objek yang dijadualkan ke dalam
sistem (lihat Bagian 2.7 mengenai scheduling). Solaris menggunakan model
many-to-many.
Thread level pengguna dalam Solaris bisa berjenis bound mau pun unbound.
Suatu bound thread level pengguna secara permanen terpasang ke suatu LWP. Jadi
hanya thread tersebut yang bekerja di LWP, dan dengan suatu permintaan, LWP
tersebut bisa diteruskan ke suatu prosesor. Dalam beberapa situasi yang
membutuhkan waktu respon yang cepat (seperti aplikasi real-time), mengikat
suatu thread sangatlah berguna. Suatu thread yang unbound tidak secara permanen
terpasang ke suatu LWP. Semua threads unbound dipasangkan (secara multiplex) ke
dalam suatu ruang yang berisi LWP-LWP yang tersedia
untuk aplikasi. Secara default thread-thread yang ada adalah unbound.
Misalnya sistem sedang beroperasi, setiap proses bisa mempunyai threads level
pengguna yang banyak.
User-user level thread ini bisa dijadual dan diganti di antara
LWP-LWP-nya oleh thread library tanpa intervensi dari kernel. User-level
threads sangatlah efisien karena tidak dibutuhkan bantuan kerja kernel oleh
thread library untuk menukar dari satu user-level thread ke yang lain.
Setiap LWP terpasang dengan tepat satu kernel-level thread, dimana setiap
user-level thread tidak tergantung dari kernel. Suatu proses mungkin mempunyai
banyak LWP, tetapi mereka hanya dibutuhkan ketika thread harus berkomunikasi
dengan kernel. Misalnya, suatu LWP akan dibutuhkan untuk setiap thread yang
bloknya konkuren di sistem pemanggilan. Anggap ada lima buah pembacaan berkas
yang muncul. Jadi dibutuhkan lima LWP, karena semuanya mungkin mengunggu untuk
penyelesaian proses I/O di kernel. Jika suatu proses hanya mempunyai empat LWP,
maka permintaan yang kelima harus menunggu unuk salah satu LWP kembali dari
kernel. Menambah LWP yang keenam akan sia-sia jika hanya terdapat tempat untuk
lima proses.
Kernel-kernel threads dijadual oleh penjadual kernel dan dieksekusi di
CPU atau CPU-CPU dalam sistemnya. Jika suatu kernel thread memblok (misalnya
karena menunggu penyelesaian suatu proses I/O), prosesor akan bebas untuk
menjalankan kernel thread yang lain. Jika thread yang sedang terblok sedang menjalankan
suatu bagian dari LWP, maka LWP tersebut akan ikut terblok. Di tingkat yang
lebih atas lagi, user-level thread yang sedang terpasang ke LWP tersebut akan
terblok juga. Jika suatu proses mempunyai lebih dari satu LWP, maka LWP lain
bisa dijadual oleh kernel.
Para pengembang menggunakan struktur-struktur data sebagai berikut untuk mengimplementasikan thread-thread dalam Solaris 2:
- Suatu user-level thread mempunyai thread ID,
himpunan register (mencakup suatu PC dan stack pointer), stack dan prioritas
(digunakan oleh library untuk penjadualan). Semua struktur data tersebut
berasal dari ruang user.
- Suatu LWP mempunyai suatu himpunan register untuk
user-level thread yang ia jalankan, juga memori dan informasi pencatatan. LWP
merupakan suatu struktur data dari kernel, dan bertempat pada ruang kernel.
- Suatu kernel thread hanya mempunyai struktur data
yang kecil dan sebuah stack. Struktur datanya melingkupi copy dari
kernel-kernel registers, suatu pointer yang menunjuk ke LWP yang terpasang
dengannya, dan informasi tentang prioritas dan penjadualan.
Setiap proses dalam Solaris 2 mempunyai banyak informasi yang terdapat di
process control block (PCB). Secara umum, suatu proses di Solaris mempunyai
suatu proses id (PID), peta memori, daftar dari berkas yang terbuka, prioritas,
dan pointer yang menunjuk ke daftar LWP yang terasosiasi kedalam proses.
Thread pada Solaris
THREAD DALAM WINDOWS XP DAN LINUX
Thread pada Windows XP mengimplementasikan pemetaan one-to-one. Setiap thread terdiri atas thread id, kumpulan register, stack user dan kernel yang terpusat. Thread pada Linux sering disebut sebagai Task daripada thread. Pembuatan thread dilakukan dengan sistem call clone(). Clone() memungkinkan task anak menggunakan alamat dari task (proses0 induk.
thread pada windows XP
thread pada Linux
THREAD PADA JAVA
Bahasa pemrograman Java menggunakan Java Thread yang dibuat dengan menggunakan class Thread dan mengimplementasikan interfaces yang bersifat runnable.
State pada Java Thread