Thread dalam Sistem Operasi

Konsep Dasar

Thread adalah unit dasar dari penggunaan CPU, thread mengandung 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 yang 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. Banyak software yang berjalan pada PC modern didesain secara multithreading. 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.
https://vivimargaretha494.wordpress.com/

Kadang kala ada situasi dimana sebuah aplikasi diperlukan untuk menjalankan beberapa tugas yang serupa. Sebagai contohnya sebuah web server bisa mempunyai ratusan klien yang mengaksesnya secara concurrent. Kalau web server berjalan sebagai proses yang hanya mempunyai thread tunggal maka ia hanya bisa 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 multithreading. 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 dikeahui 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(bisa 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 selamabeberap 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

Keuntungan dari program yang multithrading dapat dipisah menjadi empat kategori :

1. Responsi

Membuat aplikasi yang interaktif menjadi multithreading dapat membuat sebuah program terus berjalan meskipun 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 mengijinkan 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 bisa 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 Threads

User thread didukung diatas kernel dan diimplementasi oleh thread library pada user level. Library meneyediakan fasilitas untuk pembuatan thread, penjadwalan thread, dan manajemen thread tanpa dukungan dari kernel. Karena kernel tidak menyadari user-level thread maka semua pembuatan dan penjadwalan 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 bisa jalan dalam aplikasi tersebut. Contoh user-thread libraries adalah POSIX Pthreads, Mach C-threads, dan Solaris threads.

Kernel Threads

Kernel thread didukung secara langsung oleh sistem operasi: pembentukan thread, Penjadwalan, dan managemen dilakukan oleh kernel dalam ruang kernel. Karena managemen thread telah dilakukan oleh sistem operasi, kernel thread biasanya lebih lambat untuk membuat dan mengelola daripada pengguna thread. Windows NT, Solaris, dan Digital UNIX adalah sistem operasi yang mendukung kernel thread.

Kelebihan :

1. Jika sebuah thread menjalankan blocking system call maka kernel dapat menjadualkan thread lain di aplikasi untuk melakukan eksekusi.
2. Pada lingkungan multiprocessor, kernel dapat menjadual thread-thread pada processor yang berbeda.

Kekurangan :

1. Pengaturan dan pembuatan thread lebih lambat.

Model Multithreading

Multithreading adalah suatu kemampuan yang memungkinkan beberapa kumpulan instruksi atau proses dapat dijalankan secara bersamaan dalam sebuah program. Satu kumpulan instruksi yang akan dieksekusi secara independen dinamakan thread.  thread adalah alur kontrol dari suatu proses.atau sekumpulan perintah(instruksi) yang dapat dilaksanakan(dieksekusi) secara teratur dengan proses lainnya.Proses melakukan setiap langkah-langkah/intruksi yang berurutan, setiap intruksi untuk mengeksekusi baris kode/listing – listing program.Nah Karena langkah-langkah yang berurutan itu, setiap langkah membutuhkan jumlah waktu tertentu.

Model Many to One

Yaitu memetakan beberapa tingkatan thread user hanya ke satu buah kernel thread.

Kelebihan :

1. Managemen proses thread dilakukan oleh(di ruang) pengguna, sehingga menjadi lebih efisien.

Kekurangan :

1. Multithread tidak dapat berjalan atau bekerja secara paralel di dalam multiprosesor karena hanya satu thread saja yang bisa mengakses kernel dalam suatu waktu. Model ini ada pada Solaris Green dan GNU Portable.

Model One to One

Yaitu memetakan setiap user thread ke dalam 1 kernel thread.

Kelebihan :

1. Model one-to-one lebih sinkron daripada model many-to-one karena mengizinkan thread lain untuk berjalan ketika suatu thread membuat pemblokingan terhadap sistem pemanggilan, hal ini juga membuat multiple thread bisa berjalan secara parallel dalam multiprosesor.

Kekurangan :

1. Dalam pembuatan user thread diperlukan pembuatan korespondensi thread pengguna. Karena dalam proses pembuatan kernel thread dapat mempengaruhi kinerja dari aplikasi, maka kebanyakan dari implementasi model ini membatasi jumlah thread yang didukung oleh sistem. Model ini ada pada Windows NT dan OS/2.

Model Many to Many

Yaitu membolehkan setiap tingkatan user thread dipetakan ke banyak kernel thread.

Kelebihan :

1. Developer dapat membuat user thread sebanyak yang diperlukan dan kernel thread yang bersangkutan dapat berjalan secara parallel pada multiprocessor.
2. Dan ketika suatu thread menjalankan blocking system call maka kernel dapat menjadwalkan thread lain untuk melakukan eksekusi.

Kekurangan :

1. Developer dapat membuat user thread sebanyak mungkin, tetapi konkurensi tidak dapat diperoleh karena hanya satu thread yang dapat dijadwalkan oleh kernel pada suatu waktu. Model ini ada pada Solaris, IRIX, dan Digital UNIX.

Thread 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 Penjadwalan 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.

Thread Java

Thread adalah rangkaian eksekusi dari sebuah aplikasi java dan setiap program java minimal memiliki satu buah thread. Sebuah thread bisa berada di salah satu dari 4 status, yaitu new, runnable, blocked, dan dead.

Untuk membuat thread dalam java terdapat dua cara, yaitu :

1. Extends class Thread

Untuk menjalankan thread, dapat dilakukan dengan memanggil method start(). Saat start() dijalankan, maka sebenarnya method run() dari class akan dijalankan. Jadi untuk membuat thread, harus mendefinisikan method run() pada definisi class. Konstruktor dari cara ini adalah :
SubThread namaObject = new SubThread();
namaObject.start();   

2. Implements interface Runnable

Cara ini merupakan cara yang paling sederhana dalam membuat thread. Runnable merupakan unit abstrak, yaitu kelas yang mengimplementasikan interface ini hanya cukup mengimplementasikan fungsi run(). Dalam mengimplementasi fungsi run(), kita akan mendefinisikan instruksi yang membangun sebuah thread. Konstruktor dari cara ini adalah :
MyThread myObject= new MyThread();
Thread namaObject = new Thread(myObject);
Atau dengan cara singkat seperti :
New Thread(new ObjekRunnable());

MyThread merupakan class yang mengimplementasikan interface dari Runnable, dan object dari class MyThread akan menjadi parameter instansi object class Thread.

Managemen Thread

Manajemen thread merupakan konsep pokok dalam sistem operasi, sehingga masalah manajemen thread adalah masalah utama dalam perancangan sistem operasi. Proses adalah program yang sedang dieksekusi. Proses dapat juga didefinisikan sebagai unit kerja terkecil yang secara individu memiliki sumber daya dan dijadwalkan oleh sistem operasi. Proses berisi instruksi, data, program counter, register pemroses, stack data, alamat pengiriman dan variabel pendukung lainnya.

Keadaan Thread

Sebuah thread berada di dalam keadaan BARU ketika kita mempunyai sebuah objek Thread yang dipakai tapi belum dipanggil dengan method start().

Ketika kita mulai sebuah thread(dengan memanggil Method Start() dari Objek Thread), sebuah tumpukan baru akan dibuat, dengan run() method dari Runnable yang berada di bawah tumpukan. Thread sekarang mulai dalam keadaan RUNNABLE, menunggu untuk dijalankan.

Sebuah thread mengatakan untuk menjadi RUNNING ketika Penjadwal Thread dari JVM telah memilihnya untuk menjadi thread yang sedang berjalan. Pada mesin berprosessor tunggal, hanya ada satu Thread yang sedang Berjalan.

Kadang sebuah Thread dapat dipindahkan dari keadaan RUNNING ke keadaan TERBLOK(TIdak Berjalan untuk Sementara). Sebuah Thread mungkin Terblok karena ia menunggu data dari sebuah stream(aliran data), atau karena ia telah tertidur, atau karena ia menunggu untuk penguncian Objek.

Penjadwalan Thread tidak menjamin untuk bekerja pada cara tertentu, jadi kita tidak dapat memastikan bahwa thread-thread akan bergiliran sesuai keinginan kita. Kita dapat membantu untuk mempengaruhi mengaktifkan pengambilan dengan mengkondisikan thread anda ke keadaan sleep pada waktu-waktu tertentu.

Thread dan JVM

JVM(Java Virtual Machine) adalah sebuah mesin imajiner(maya) yang bekerja dengan menyerupai aplikasi pada sebuah mesin nyata. JVM menyediakan spesifikasi hardware dan platform dimana kompilasi kode Java terjadi. Spesifikasi inilah yang membuat aplikasi berbasis Java menjadi bebas dari platform manapun karena proses kompilasi diselesaikan oleh JVM.

Aplikasi program Java diciptakan dengan file teks berekstensi.java. Program ini dikompilasi menghasilkan satu berkas bytecode berekstensi.class atau lebih.

Bytecode adalah serangkaian instruksi serupa instruksi kode mesin. Perbedaannya adalah kode mesin harus dijalankan pada sistem komputer dimana kompilasi ditujukan, sementara bytecode berjalan pada java interpreter yang tersedia di semua platform sistem komputer dan sistem operasi.

JVM dan Sistem Operasi

Java Virtual Machine atau JVM adalah jenis perangkat lunak virtual machine aplikasi untuk menjalankan program dalam kode instruksi Java. Java sendiri adalah bahasa komputer yang digunakan pada sistem platform Java, dimana memiliki jenis instruksi mesin yang berbeda dengan sistem komputer jenis PC atau yang lainnya. Oleh karena itu agar sebuah komputer dapat menjalankan sebuah program dalam bahasa Java, maka diperlukan JVM yang sering disebut sebagai middleware yang berfungsi untuk menterjemahkan instruksi Java(JVM instruction set) menjadi instruksi mesin pada komputer jenis tertentu.

Java Virtual Machine dalam nama lain disebut sebagai Java Runtime Environment(JRE), dikembangkan oleh Sun Microsystem untuk memperluas penggunaan bahasa Java pada platform komputer manapun. Oleh karena itu program yang dibuat dengan java dapat dijalankan pada banyak platform komputer maupun berbagai sistem operasi komputer. Dengan sistem emulasi instruksi ini, maka program java ini banyak sekali dipakai pada aplikasi--aplikasi di perangkat mobile, karena perangkat mobile saat ini sudah banyak yang sudah memiliki Java Virtual Machine.

Contoh Solusi Multithreaded

solusi multithreaded secara lengkap kepada masalah produser konsumer yang menggunakan penyampaian pesan. Kelas server pertama kali membuat sebuah mailbox untuk mengumpulkan pesan, dengan menggunakan kelas message queue kemudian dibuat produser dan konsumer threads secara terpisah dan setiap thread mereferensi ke dalam mailbox bersama. Thread produser secara bergantian antara tidur untuk sementara, memproduksi item, dan memasukkan item ke dalam mailbox. Konsumer bergantian antara tidur dan mengambil suatu item dari mailbox dan mengkonsumsinya. Karena receive() method dari kelas message queue adalah tanpa pengeblokan, konsumer harus mencek apakah pesan yang diambilnya tersebut adalah nol.

Sumber 

http://opensource.telkomspeedy.com/repo/abba/v06/Kuliah/SistemOperasi/2003/49/produk/SistemOperasi/c35.html
http://teknikkom15.blogspot.co.id/2012/03/thread-dalam-solaris-2.html
https://lifenmechatronic.wordpress.com/2015/04/01/thread-thread-java/
http://thisismeamirah.blogspot.co.id/2014/11/sistem-virtual-machine.html

Thread dalam Sistem Operasi Thread dalam Sistem Operasi Reviewed by Syafriansyah Muhammad on 7/24/2018 Rating: 5

2 komentar:

  1. Artikelnya keren nih, buat nambah wawasan dalam mempelajari mata kuliah system terdistribusi, oh ya perkenalkan nama saya Yuli Suseno, jika berkenan agan bisa mengunjungi web kampus kami di ISB Atma Luhur Terima Kasih

    BalasHapus

Diberdayakan oleh Blogger.