Threads
Pada Solaris
Threads merupakan unit
terkecil pada sistem operasi yang menjelaskan suatu proses mengenai status pada
sebuah eksekusi (ready,running dll). Dalam thread terdapat program counter,
register dan stack. Sistem operasi sangan mendukng thread pada tingkatan kernel maupun pengguna
dan memiliki proses sendiri dalam pengimplementasiannya, Seperti contohnya
threads pada solaris
kernel Solaris
memiliki kemampuan fully preemtible yang artinya semua thread, termasuk thread
yang mendukung aktifitas kernel itu sendiri dapat ditunda untuk menjalankan
thread dengan prioritas yang lebih tinggi; memiliki penjadwalan secara soft
realtime; mendukung symmetrically multiprocessing yang mengoptimalkan kerja semua
processornya dalam tingkatan yang sama, sehingga memberikan kualitas akses yang
sama pada hardware computer yang lain dan; mendukung juga user-level
multithreading. Kernel thread menggunakan resources yang sangat sedikit,
dan peralihan kernel threadnya relative sangat sedikit karena tidak memerlukan
sebuah perubahan space pada virtual memory.
Dukungan multiprocessor pertama kali ditambahkan pada kernel Solaris, pengembang lebih mengutamakan pada kemampuan kernel, karena dengan kernel yang stabil, mampu meningkatkan concurrency, dan juga mampu mendukung dan mengontrol lebih dari satu thread dalam satu proses user. Thread sendiri mampu melaksanakan system calls dan menangani page faults secara independent. Untuk membuat kernel mendukung pengoperasian multiprocessor, thread mengontrol untuk menjalankan proses secara bersamaan pada processor yang berbeda. Para pengembang juga ingin kernel yang dibangun tersebut dapat beroperasi secara soft realtime, yang diperlukan untuk mengontrol penjadwalan yang berlebihan dan preemption adalah tindakan sementara pada proses yang sedang dilakukan oleh system computer, untuk melanjutkan proses di lain waktu. Dan preemption ini memungkinan untuk mengeksekusi pada banyak titik proses.
Dukungan multiprocessor pertama kali ditambahkan pada kernel Solaris, pengembang lebih mengutamakan pada kemampuan kernel, karena dengan kernel yang stabil, mampu meningkatkan concurrency, dan juga mampu mendukung dan mengontrol lebih dari satu thread dalam satu proses user. Thread sendiri mampu melaksanakan system calls dan menangani page faults secara independent. Untuk membuat kernel mendukung pengoperasian multiprocessor, thread mengontrol untuk menjalankan proses secara bersamaan pada processor yang berbeda. Para pengembang juga ingin kernel yang dibangun tersebut dapat beroperasi secara soft realtime, yang diperlukan untuk mengontrol penjadwalan yang berlebihan dan preemption adalah tindakan sementara pada proses yang sedang dilakukan oleh system computer, untuk melanjutkan proses di lain waktu. Dan preemption ini memungkinan untuk mengeksekusi pada banyak titik proses.
Proses pada Solaris
Kernel thread menggunakan resources yang sangat sedikit, dan peralihan kernel threadnya relative sangat sedikit karena tidak memerlukan sebuah perubahan space pada virtual memory. Kernel thread juga memiliki kemampuan fully preemptible dan dapat menjadwalkan berdasarkan prioritas pada realtime. Solaris mampu menggunakan kernel threads untuk memungkinkan asynchronous aktifitas kernel, seperti menulis asynchronous disk. Hal ini menghilangkan berbagai komplikasi dari idle loop dan menggantikannya dengan penjadwalan thread secara independent. Hal ini meningkatkan concurrency karena tindakan yang ditangani oleh CPU terpisah dan memberikan aktifitas pada prioritas asynchronous sehingga dapat dijadwalkan secara tepat. Kernel thread juga menangani interrupt. Jika thread ditemukan interrupt, maka akan menguncinya pada blok-blok yang mengalami interrups tersebut dan memungkinkan untuk menghapus dan mencegah terjadinya deadlock. Karena membuat thread baru setiap kali terjadi interrupt itu sangat memakan waktu, maka kernel menyiapkan bagian-bagian untuk menginisialisasi thread interrupt tersebut, dan ketika interrupt terjadi maka satuan kerja tersebut memindahkannya pada tumpukan thread interrupt.
Fitur utama pada multiprocessor kernel Solaris adalah dengan dukungan Lightweight Processes (LWPs). Dukungan LWPs sendiri adalah mendukung beberapa control dari kernel thread pada banyak proses user, seperti yang ditunjukan pada Gambar . Mereka berbagi space dengan proses, dan resources proses. Kernel mendukung pelaksanaan LWPs dengan menghubungkan penggunaan kernel thread dengan LWP masing-masing. Tiap-tiap user level library menggunakan LWPs untuk mengimplementasikan user level threads. Hal ini memungkinkan proses user memiliki ribuan thread tanpa membebankan kernel.
Seperti yang dibahas sebelumnya, kernel Solaris dirancang untuk mencegah deadlocks yang disebabkan oleh thread interrupt. Hal ini dilakukan dengan memblokir thread-thread interrupt, jika ditemukan maka variable sinkronisasi akan terkunci dan menunggu sampai bagian yang critical sudah selesaikan. Strategi penguncian kernel ini digunakan untuk mengunci yang berbasis data. Didalam metode ini, setiap data dilindungi oleh objek sinkronisasi.
Kernel thread menggunakan resources yang sangat sedikit, dan peralihan kernel threadnya relative sangat sedikit karena tidak memerlukan sebuah perubahan space pada virtual memory. Kernel thread juga memiliki kemampuan fully preemptible dan dapat menjadwalkan berdasarkan prioritas pada realtime. Solaris mampu menggunakan kernel threads untuk memungkinkan asynchronous aktifitas kernel, seperti menulis asynchronous disk. Hal ini menghilangkan berbagai komplikasi dari idle loop dan menggantikannya dengan penjadwalan thread secara independent. Hal ini meningkatkan concurrency karena tindakan yang ditangani oleh CPU terpisah dan memberikan aktifitas pada prioritas asynchronous sehingga dapat dijadwalkan secara tepat. Kernel thread juga menangani interrupt. Jika thread ditemukan interrupt, maka akan menguncinya pada blok-blok yang mengalami interrups tersebut dan memungkinkan untuk menghapus dan mencegah terjadinya deadlock. Karena membuat thread baru setiap kali terjadi interrupt itu sangat memakan waktu, maka kernel menyiapkan bagian-bagian untuk menginisialisasi thread interrupt tersebut, dan ketika interrupt terjadi maka satuan kerja tersebut memindahkannya pada tumpukan thread interrupt.
Fitur utama pada multiprocessor kernel Solaris adalah dengan dukungan Lightweight Processes (LWPs). Dukungan LWPs sendiri adalah mendukung beberapa control dari kernel thread pada banyak proses user, seperti yang ditunjukan pada Gambar . Mereka berbagi space dengan proses, dan resources proses. Kernel mendukung pelaksanaan LWPs dengan menghubungkan penggunaan kernel thread dengan LWP masing-masing. Tiap-tiap user level library menggunakan LWPs untuk mengimplementasikan user level threads. Hal ini memungkinkan proses user memiliki ribuan thread tanpa membebankan kernel.
Seperti yang dibahas sebelumnya, kernel Solaris dirancang untuk mencegah deadlocks yang disebabkan oleh thread interrupt. Hal ini dilakukan dengan memblokir thread-thread interrupt, jika ditemukan maka variable sinkronisasi akan terkunci dan menunggu sampai bagian yang critical sudah selesaikan. Strategi penguncian kernel ini digunakan untuk mengunci yang berbasis data. Didalam metode ini, setiap data dilindungi oleh objek sinkronisasi.
Namun ada juga
penjelasan Threads pada solaris 2
Solaris 2 merupakan 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)
seperti pada solaris yang diatas. Setiap proses yang ada setidaknya mengandung
minimal satu buah LWP. Dimana ada banyak threads pada library threads namun hanya satu yang
terpasang sisanya diblok.
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. Kernel-kernel
threads dijadwal oleh penjadwal 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 akan ikut terblok.
Para pengembang
menggunakan struktur-struktur data sebagai berikut untuk mengimplementasikan
thread-thread dalam Solaris 2 yaitu user memilik ID threads yang dimana semua
struktur data berasal dari ruang user, LWP memili -user level thread sebegai
emori dan informasi pencatatan yg bertempat pada ruang kernel, dan Suatu kernel thread hanya mempunyai
struktur data yang kecil dan sebuah stack.
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.
Sumber: