Monday, September 30, 2019

THREAD (SISTEM OPERASI)

THREAD


=>Model proses yang didiskusikan sejauh ini telah menunjukkan
bahwa suatu proses adalah sebuah program yang menjalankan
eksekusi thread tunggal. Sebagai contoh, jika sebuah proses
menjalankan sebuah program Word Processor, ada sebuah 
thread tunggal dari instruksi-instruksi yang sedang dilaksanakan.

=>Kontrol thread tunggal ini hanya memungkinkan proses untuk
menjalankan satu tugas pada satu waktu. Banyak sistem operasi
modern telah memiliki konsep yang dikembangkan agar memungkinkan
sebuah proses untuk memiliki eksekusi multi-threads, agar dapat 
secara terus menerus mengetik dan menjalankan pemeriksaan ejaan
di dalam proses yang sama, maka sistem operasi tersebut 
memungkinkan proses untuk menjalankan lebih dari satu tugas
pada satu waktu.

=>Thread merupakan unit dasar dari penggunaan CPU, yang
terdiri dari Thread_ID, program counter, register set, dan stack
Sebuah thread berbagi code section, data section, dan sumber daya 
sistem operasi dengan Thread lain yang dimiliki oleh proses yg sama.
Thread juga sering disebut lightweight process. Sebuah proses tradisional 
atau heavyweight process mempunyai thread tunggal yang berfungsi
sebagai pengendali. Perbedaan antara proses dengan thread tunggal
dengan proses dengan thread yang banyak adalah proses dengan thread
yang banyak dapat mengerjakan lebih dari satu tugas pada satu satuan waktu.



















                             Gambar Thread


=>Banyak perangkat lunak yang berjalan pada PC modern 
dirancang secara multi-threading. Sebuah aplikasi biasanya
diimplementasi sebagai proses yang terpisah dengan beberapa
thread yang berfungsi sebagai pengendali. Contohnya sebuah
web browser mempunyai thread untuk menampilkan gambar
atau tulisan sedangkan thread yang lain berfungsi sebagai 
penerima data dari network.

=>Kadang kala ada situasi dimana sebuah aplikasi diperlukan
untuk menjalankan beberapa tugas yang serupa. Sebagai 
contohnya sebuah web server dapat mempunyai ratusan klien yang 
mengaksesnya secara concurrent. Kalau web server berjalan 
sebagai proses yang hanya mempunyai thread tunggal maka
ia hanya dapat melayani satu klien pada pada satu satuan waktu. 
Bila ada klien lain yang ingin mengajukan permintaan maka ia harus
menunggu sampai klien sebelumnya selesai dilayani. Solusinya 
adalah dengan membuat web server menjadi multi-threading
Dengan ini maka sebuah web server akan membuat thread yang
akan mendengar permintaan klien, ketika permintaan lain diajukan
maka web server akan menciptakan thread lain yang akan melayani 
permintaan tersebut.

=>Java mempunyai pengunaan lain dari thread. Perlu diketahui 
bahwa Java tidak mempunyai konsep asynchronous. Sebagai 
contohnya kalau program java mencoba untuk melakukan koneksi 
ke server maka ia akan berada dalam keadaan block state sampai
koneksinya jadi (dapat dibayangkan apa yang terjadi apabila servernya
mati). Karena Java tidak memiliki konsep asynchronous maka 
solusinya adalah dengan membuat thread yang mencoba untuk
melakukan koneksi ke server dan thread lain yang pertamanya tidur
selama beberapa waktu (misalnya 60 detik) kemudian bangun. 
Ketika waktu tidurnya habis maka ia akan bangun dan memeriksa
apakah thread yang melakukan koneksi ke server masih mencoba 
untuk melakukan koneksi ke server, kalau thread tersebut masih dalam
keadaan mencoba untuk melakukan koneksi ke server maka ia akan 
melakukan interrupt dan mencegah thread tersebut untuk mencoba 
melakukan koneksi ke server.


Keuntungan Thread

Keuntungan dari program yang multithreading dapat dipisah
menjadi empat kategori:
1.Responsi: Membuat aplikasi yang interaktif menjadi multithreading 
   dapat membuat sebuah program terus berjalan meski pun sebagian 
   dari program tersebut diblok atau melakukan operasi yang panjang, 
   karena itu dapat meningkatkan respons kepada pengguna. Sebagai 
   contohnya dalam web browser yang multithreading, sebuah thread dapat
   melayani permintaan pengguna sementara thread lain berusaha 
   menampilkan image.
2.Berbagi sumber daya: thread berbagi memori dan sumber daya 
   dengan thread lain yang dimiliki oleh proses yang sama. 
   Keuntungan dari berbagi kode adalah mengizinkan sebuah aplikasi 
   untuk mempunyai beberapa thread yang berbeda dalam lokasi memori
   yang sama.
3.Ekonomi: dalam pembuatan sebuah proses banyak dibutuhkan 
   pengalokasian memori dan sumber daya. Alternatifnya adalah dengan 
   penggunaan thread, karena thread berbagi memori dan sumber daya
   proses yang memilikinya maka akan lebih ekonomis untuk membuat 
   dan context switch thread. Akan susah untuk mengukur perbedaan waktu
   antara proses dan thread dalam hal pembuatan dan pengaturan, 
   tetapi secara umum pembuatan dan pengaturan proses lebih lama 
   dibandingkan thread. Pada Solaris, pembuatan proses lebih lama 
   30 kali dibandingkan pembuatan thread, dan context switch proses 5
   kali lebih lama dibandingkan context switch thread.
4.Utilisasi arsitektur multiprocessor: Keuntungan dari multithreading 
   dapat sangat meningkat pada arsitektur multiprocessor, dimana setiap
   thread dapat berjalan secara pararel di atas processor yang berbeda. 
   Pada arsitektur processor tunggal, CPU menjalankan setiap thread 
   secara bergantian tetapi hal ini berlangsung sangat cepat sehingga 
   menciptakan ilusi pararel, tetapi pada kenyataannya hanya satu thread 
   yang dijalankan CPU pada satu-satuan waktu (satu-satuan waktu pada
   CPU biasa disebut time slice atau quantum).


USER DAN KERNEL THREAD:

User Thread:
User thread didukung di atas kernel dan diimplementasi oleh thread 
library pada user level. Library menyediakan fasilitas untuk pembuatan 
thread, penjadualan thread, dan managemen thread tanpa dukungan 
dari kernel. Karena kernel tidak menyadari user-level thread maka semua 
pembuatan dan penjadualan thread dilakukan di user space tanpa 
intervensi dari kernel. Oleh karena itu, user-level thread biasanya cepat 
untuk dibuat dan diatur. Tetapi user thread mempunyai kelemahan yaitu 
apabila kernelnya merupakan thread tunggal maka apabila salah satu 
user-level thread menjalankan blocking system call maka akan 
mengakibatkan seluruh proses diblok walaupun ada thread lain yang 
dapat jalan dalam aplikasi tersebut. Contoh user-thread libraries 
adalah POSIX Pthreads, Mach C threads, dan Solaris threads.

Kernel Thread:
Kernel thread didukung langsung oleh sistem operasi. Pembuatan, 
penjadualan, dan managemen thread dilakukan oleh kernel pada 
kernel space. Karena pengaturan thread dilakukan oleh sistem operasi 
maka pembuatan dan pengaturan kernel thread lebih lambat 
dibandingkan user thread. Keuntungannya adalah thread diatur oleh 
kernel, karena itu jika sebuah thread menjalankan blocking system call 
maka kernel dapat menjadualkan thread lain di aplikasi untuk melakukan
eksekusi. Keuntungan lainnya adalah pada lingkungan multiprocessor
kernel dapat menjadual thread-thread pada processor yang berbeda.
Contoh sistem operasi yang mendukung kernel thread adalah WindowsNT,
Solaris, Digital UNIX.


MULTITHREADING MODELS

1.Many-to-One Model
   Many-to-One model memetakan banyak user-level thread ke satu 
   kernel thread.
   Pengaturan thread dilakukan di user space, oleh karena itu ia efisien 
   tetapi ia mempunyai kelemahan yang sama dengan user thread
   Selain itu karena hanya satu thread yang dapat mengakses thread 
   pada suatu waktu maka multiple thread tidak dapat berjalan secara 
   pararel pada multiprocessor. User-level thread yang diimplementasi 
   pada sistem operasi yang tidak mendukung kernel thread menggunakan 
   Many-to-One model.

















             Gambar Many-to-One model


2.One-to-One Model
   One-to-One model memetakan setiap user thread ke kernel thread
   Ia menyediakan lebih banyak concurrency dibandingkan Many-to-One 
   model. Keuntungannya sama dengan keuntungan kernel thread
   Kelemahannya model ini adalah setiap pembuatan user thread 
   membutuhkan pembuatan kernel thread. Karena pembuatan thread 
   dapat menurunkan performa dari sebuah aplikasi maka implmentasi 
   dari model ini membatasi jumlah thread yang dibatasi oleh sistem. 
   Contoh sistem operasi yang mendukung One-to-One model adalah 
   Windows NT dan OS/2.
















           Gambar One-to-One model 


3.Many-to-Many Model
   Many-to-many model multiplexes banyak user-level thread ke 
   kernel thread yang jumlahnya lebih kecil atau sama banyaknya 
   dengan user-level thread. Jumlah kernel thread dapat spesifik 
   untuk sebagian aplikasi atau sebagian mesin. Many-to-One model 
   mengizinkan developer ntuk membuat user thread sebanyak yang 
   ia mau tetapi concurrency tidak dapat diperoleh karena hanya satu 
   thread yang dapat dijadual oleh kernel pada suatu waktu. One-to-One 
   menghasilkan concurrency yang lebih tetapi developer harus hati-hati 
   untuk tidak menciptakan terlalu banyak thread dalam suatu aplikasi 
   (dalam beberapa hal, developer hanya dapat membuat thread 
   dalam jumlah yang terbatas). Many-to-Many model tidak menderita 
   kelemahan dari 2 model di atas. Developer dapat membuat user 
   thread sebanyak yang diperlukan, dan kernel thread yang bersangkutan 
   dapat bejalan secara pararel pada multiprocessor. Dan juga ketika suatu
   thread menjalankan blocking system call maka kernel dapat menjadualkan 
   thread lain untuk melakukan eksekusi. Contoh sistem operasi yang 
   mendukung model ini adalah Solaris, IRIX, dan Digital UNIX.

















              Gambar Many-to-many


Fork dan Exec System Call:

Ada dua kemungkinan dalam system UNIX jika fork dipanggil oleh 
salah satu thread dalam proses:
1.Semua thread diduplikasi.
2.Hanya thread yang memanggil fork.

Kalau thread memanggil exec System Call maka program yang 
dispesifikasi di parameter exec akan mengganti keseluruhan proses 
termasuk thread dan LWP.
Penggunaan dua versi dari fork di atas tergantung dari aplikasi. 
Kalau exec dipanggil seketika sesudah fork, maka duplikasi seluruh 
thread tidak dibutuhkan, karena program yang dispesifikasi di parameter 
exec akan mengganti seluruh proses. Pada kasus ini cukup hanya 
mengganti thread yang memanggil fork. Tetapi jika proses yang terpisah 
tidak memanggil exec sesudah fork maka proses yang terpisah tersebut 
hendaknya menduplikasi seluruh thread.


Cancellation:

Thread cancellation adalah tugas untuk memberhentikan thread 
sebelum ia menyelesaikan tugasnya. Sebagi contohnya jika dalam 
program java kita hendak mematikan Java Virtual Machine (JVM) 
maka sebelum JVM-nya dimatikan maka seluruh thread yang berjalan
dihentikan terlebuh dahulu. Thread yang akan diberhentikan biasa 
disebut target thread.

Pemberhentian target thread dapat terjadi melalui dua cara yg berbeda:
1.Asynchronous cancellation: suatu thread seketika itu juga 
   memberhentikan target thread.
2.Defered cancellation: target thread secara perodik memeriksa apakah 
   dia harus berhenti, cara ini memperbolehkan target thread untuk 
   memberhentikan dirinya sendiri secara terurut.

Hal yang sulit dari pemberhentian thread ini adalah ketika terjadi situasi 
dimana sumber daya sudah dialokasikan untuk thread yang akan 
diberhentikan. Selain itu kesulitan lain adalah ketika thread yang 
diberhentikan sedang meng-update data yang ia bagi dengan thread lain. 
Hal ini akan menjadi masalah yang sulit apabila digunakan asynchronous
cancellation. Sistem operasi akan mengambil kembali sumber daya dari 
thread yang diberhentikan tetapi seringkali sistem operasi tidak mengambil 
kembali semua sumber daya dari thread yang diberhentikan.

Alternatifnya adalah dengan menggunakan deffered cancellation
Cara kerja dari deffered cancellation adalah dengan menggunakan 
satu thread yang berfungsi sebagai pengindikasi bahwa target thread 
hendak diberhentikan. Tetapi pemberhentian hanya akan terjadi jika
target thread memeriksa apakah ia harus berhenti atau tidak. 
Hal ini memperbolehkan thread untuk memeriksa apakah ia harus 
berhenti pada waktu dimana ia dapat diberhentikan secara aman yang 
aman. Pthread merujuk tersebut sebagai cancellation points.

Pada umumnya sistem operasi memperbolehkan proses atau thread 
untuk diberhentikan secara asynchronous. Tetapi Pthread API 
menyediakan deferred cancellation. Hal ini berarti sistem operasi yang mengimplementasikan Pthread API akan mengizinkan deferred cancellation.



Penanganan Sinyal:
Sebuah sinyal digunakan di sistem UNIX untuk notify sebuah proses 
kalau suatu peristiwa telah terjadi. Sebuah sinyal dapat diterima secara 
synchronous atau asynchronous tergantung dari sumber dan alasan 
kenapa peristiwa itu memberi sinyal.

Semua sinyal (asynchronous dan synchronous) mengikuti pola yg sama:
1.Sebuah sinyal dimunculkan oleh kejadian dari suatu persitiwa.
2.Sinyal yang dimunculkan tersebut dikirim ke proses.
3.Sesudah dikirim, sinyal tersebut harus ditangani.

Contoh dari sinyal synchronous adalah ketika suatu proses melakukan 
pengaksesan memori secarai ilegal atau pembagian dengan nol, 
sinyal dimunculkan dan dikirim ke proses yang melakukan operasi 
tersebut. Contoh dari sinyal asynchronous misalnya kita mengirimkan 
sinyal untuk mematikan proses dengan keyboard (ALT-F4) maka sinyal
asynchronous dikirim ke proses tersebut. Jadi ketika suatu sinyal 
dimunculkan olehperistiwa di luar proses yang sedang berjalan maka 
proses tersebut menerima sinyal tersebut secara asynchronous.

Setiap sinyal dapat ditangani oleh salah satu dari dua penerima sinyal:
1.Penerima sinyal yang merupakan set awal dari sistem operasi.
2.Penerima sinyal yang didefinisikan sendiri ole user.
Penanganan sinyal pada program yang hanya memakai thread tunggal 
cukup mudah yaitu hanya dengan mengirimkan sinyal ke prosesnya. 
Tetapi mengirimkan sinyal lebih rumit pada program yang multithreading
karena sebuah proses dapat memiliki beberapa thread.

Secara umum ada empat pilihan kemana sinyal harus dikirim:
1.Mengirimkan sinyal ke thread yang dituju oleh sinyal tersebut.
2.Mengirimkan sinyal ke setiap thread pada proses tersebut.
3.Mengirimkan sinyal ke thread tertentu dalam proses.
4.Menugaskan thread khusus untuk menerima semua sinyal yang 
   ditujukan pada proses.

Cara untuk mengirimkan sebuah sinyal tergantung dari jenis sinyal 
yang dimunculkan.Sebagai contoh sinyal synchronous perlu dikirimkan 
ke thread yang memunculkan sinyal tersebut bukan thread lain pada 
proses tersebut. Tetapi situasi dengan sinyal asynchronous menjadi 
tidak jelas. Beberapa sinyal asynchronous seperti sinyal yang berfungsi 
untuk mematikan proses (contoh: alt-f4) harus dikirim ke semua thread
Beberapa versi UNIX yang multithreading mengizinkan thread menerima 
sinyal yang akan ia terima dan menolak sinyal yang akan ia tolak. 
Karena itu sinyal asynchronouns hanya dikirimkan ke thread yang tidak 
memblok sinyal tersebut. Solaris 2 mengimplementasikan pilihan ke-4 untuk
menangani sinyal. Windows 2000 tidak menyediakan fasilitas untuk 
mendukung sinyal,sebagai gantinya Windows 2000 menggunakan 
asynchronous procedure calls (APCs). Fasilitas APC memperbolehkan 
user thread untuk memanggil fungsi tertentu ketika user thread menerima 
notifikasi peristiwa tertentu.


Thread Pools:

Pada web server yang multithreading ada dua masalah yang timbul:
1.Ukuran waktu yang diperlukan untuk menciptakan thread untuk 
   melayani permintaan yang diajukan terlebih pada kenyataannya thread
   dibuang ketika ia seketika sesudah ia menyelesaikan tugasnya.
2.Pembuatan thread yang tidak terbatas jumlahnya dapat menurunkan 
   performa dari sistem.

Solusinya adalah dengan penggunaan Thread Pools, cara kerjanya 
adalah dengan membuat beberapa thread pada proses startup dan 
menempatkan mereka ke poolsdimana mereka duduk diam dan 
menunggu untuk bekerja. Jadi ketika server menerima permintaan 
maka ia akan membangunkan thread dari pool dan jika thread tersedia
maka permintaan tersebut akan dilayani. Ketika thread sudah selesai 
mengerjakan tugasnya maka ia kembali ke pool dan menunggu pekerjaan 
lainnya. Bila tidak thread yang tersedia pada saat dibutuhkan maka 
server menunggu sampai ada satu thread yang bebas.

Keuntungan thread pool:
1.Biasanya lebih cepat untuk melayani permintaan dengan thread 
   yang ada dibanding dengan menunggu thread baru dibuat.
2.Thread pool membatasi jumlah thread yang ada pada suatu waktu. 
   Hal ini pentingpada sistem yang tidak dapat mendukung banyak thread 
   yang berjalan secara concurrent.

Jumlah thread dalam pool dapat tergantung dari jumlah CPU 
dalam sistem, jumlah memori fisik, & jumlah permintaan klien yg concurrent.


Thread Specific Data:
 Thread yang dimiliki oleh suatu proses memang berbagi data tetapi 
 setiap thread mungkin membutuhkan duplikat dari data tertentu untuk 
 dirinya sendiri dalam keadaan tertentu.Data ini disebut thread-specific data.


Pthreads:
Pthreads merujuk kepada POSIX standard (IEEE 1003.1 c) 
mendefinisikan sebuah API untuk pembuatan thread dan sinkronisasi. 
Pthreads adalah spesifikasi untuk thread dan bukan merupakan suatu 
implementasi. Desainer sistem operasi boleh mengimplementasikan 
spesifikasi tersebut dalam berbagai cara yang mereka inginkan.
Secara umum Libraries yang mengimplementasikan Pthreads
dilarang pada sistem berbasis UNIX seperti Solaris 2. Sistem operasi 
Windows secara umum belum mendukung Pthreads, walaupun versi 
shareware-nya sudah ada di domain publik.


Rangkuman:
>>Thread adalah sebuah alur kontrol dari sebuah proses. 
Suatu proses yang multithreaded mengandung beberapa perbedaan 
alur kontrol dengan ruang alamat yang sama.
>>Keuntungan dari multithreaded meliputi peningkatan respon dari 
pengguna, pembagian sumber daya proses, ekonomis, dan kemampuan 
untuk mengambil keuntungan dari arsitektur multiprosesor. 
>>Thread tingkat pengguna adalah thread yang tampak oleh programer 
dan tidak diketahui oleh kernel. 
>>Thread tingkat pengguna secara tipikal dikelola oleh sebuah 
library thread di ruang pengguna. 
>>Thread tingkat kernel didukung dan dikelola oleh kernel sistem operasi. 
Secara umum, thread tingkat pengguna lebih cepat dalam pembuatan 
dan pengelolaan dari pada kernel thread
>>Ada 3 perbedaan tipe dari model yang berhubungan dengan pengguna 
dan kernel thread yaitu one-to one model, many-to-one model, 
many-to-many model.

1.Model many to one: memetakan beberapa pengguna level thread 
   hanya ke satu buah kernel thread.
2.Model one to one: memetakan setiap thread pengguna ke dalam 
   satu kernel thread berakhir.
3.Model many to many: mengijinkan pengembang untuk membuat 
   thread pengguna sebanyak mungkin, konkurensi tidak dapat tercapai 
   karena hanya satu thread yang dapat dijadualkan oleh kernel dalam 
   satu waktu.

Thread cancellation adalah tugas untuk memberhentikan thread 
sebelum ia menyelesaikan tugasnya.
Thread yang akan diberhentikan disebut target thread.
Pemberhentian target thread dapat terjadi melalui 2 cara yang berbeda:
1.Asynchronous cancellation: suatu thread seketika itu juga 
   memberhentikan target thread.
2.Deffered cancellation: target thread secara periodik memeriksa 
   apakah dia harus berhenti, cara ini memperbolehkan target thread 
   untuk memberhentikan dirinya sendiri secara terurut.

Thread Pools adalah cara kerja dengan membuat beberapa thread 
pada proses startup dan menempatkan mereka ke pools.
Keuntungan Thread Pools:
1.Biasanya lebih cepat untuk melayani permintaan dengan thread 
   yang ada dibanding dengan menunggu thread baru dibuat.
2.Thread pool membatasi jumlah thread yang ada pada suatu waktu. 
   Hal ini penting pada sistem yang tidak dapat mendukung banyak 
   thread yang berjalan secara concurrent.


Sumber: Diolah dari berbagai sumber


                                 >>>>>TERIMAKASIH<<<<<

No comments:

Post a Comment

ARSITEKTUR & ORGANISASI KOMPUTER (UNIT MASUKAN & KELUARAN)

UNIT MASUKAN DAN KELUARAN Definisi dan Fungsi: Unit masukan dan keluaran merupakan bagian komponen   utama dari sistem komputer ...