Laman udinoto

Selasa, 24 Oktober 2017

Threads pada Solaris (Sistem Operasi)

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.


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.

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:

Tidak ada komentar:

Posting Komentar