Makalah Threads [PDF]

  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up
File loading please wait...
Citation preview

THREAD Diajukan untuk memenuhi salah satu tugas mata kuliah Sistem Operasi



Oleh: Citra Esti Wulandari / 10111166



Dosen: Herwan Herwansyah, S.Kom



TEKNIK INFORMATIKA FAKULTAS TEKNIK DAN ILMU KOMPUTER UNIVERSITAS KOMPUTER INDONESIA 2014



KATA PENGANTAR Puji syukur kita panjatkan atas kehadirat Allah Yang Maha Esa yang telah memberikan segala rahmat dan karunianya kepada kami, sehingga penulis dapat menyelesaikan makalah ini tepat pada waktunya. Tugas ini disusun untuk memenuhi salah satu tugas Sistem Operasi Dengan demikian, penulis berharap semoga ini dapat bermanfaat bagi pembaca.



Bandung, 10 April 2014



Penulis



BAB I PENDAHULUAN



1.1



LATAR BELAKANG MASALAH Thread adalah unit terkecil dari eksekusi suatu program. Ketika sistem menjalankan



program, komputer akan membuat thread baru. Instruksi dalam program akan dieksekusi oleh thread secara berurutan, satu demi satu dari awal hingga akhir. Thread yang sudah selesai dieksekusi akan disebut mati. Dalam sistem komputer modern, hanya ada satu thread yang bisa dijalankan pada saat tertentu. Akan tetapi sebenarnya komputer membagi waktu menjadi bagian-bagian kecil sehingga seolah-olah seluruh thread dijalankan secara bersama-sama. Thread juga digunakan untuk mempercepat suatu proses. Jika program harus menunggu seluruh input datang baru kemudian melakukan pengolahan, tentunya akan memakan waktu yang lebih lama, terutama apabila aliran network lambat atau pengolahannya memakan waktu lama.



1.2



RUMUSAN MASALAH Dari latar belakang diatas dapat disimpulkan suatu permasalahan, yaitu



1.3



1.



Apa yang dimaksud dengan Thread?



2.



Apa saja yang terdapat pada Thread?



BATASAN MASALAH Dalam makalah ini pembahasannya hanya membahas tentang threads, yang tercakup di



dalamnya a.



Pengertian Thread



b.



Jenis – jenis proses Thread



c.



Keuntungan Thread



d.



Model Multithreading



e.



Status Thread



f.



Kelas Thread



g.



Pembuatan Thread



h.



Library Thread



i.



Pembatalan Thread



1.4



j.



Penjadwalan Thread



k.



Sinkronisasi



l.



Thread Pools



m.



Thread di Linux



TUJUAN PENULISAN Tujuan penulisan dari makalah ini adalah untuk memenuhi salah satu tugas Sistem



Operasi, selain itu agar kami lebih memahami tentang threads.



BAB II PEMBAHASAN 2.1



Pengertian Threads 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 atau proses ringan . 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 2.2



Jenis-Jenis Proses Thread Pada proses thread terdapat dua jenis thread, yaitu: 1.



Single Thread Process Proses yang bekerja secara berurutan sesuai dengan urutan masing-masing thread (terstruktur) dan hanya mengerjakan satu tugas dalam satu waktu. Di bawah ini merupakan gambar single thread.



Gambar Single Thread 2.



Multithread Process Merupakan satu atau beberapa thread yang dijalankan secara



bersamaan



(multiproses). Multithread dapat diartikan juga sebagai suatu proses dengan thread banyak dapat mengerjakan lebih dari satu tugas pada satu satuan waktu.



Multithread sering pula disebut dengan multiproses atau multitasking pada sistem operasi. Gambar multithread ditunjukkan pada gambar dibawah ini



Gambar 2.2. Multitread



2.3 Keuntungan Threads Keuntungan 1. Tanggap: Multithreading mengizinkan program untuk berjalan terus walau pun pada bagian program tersebut di block atau sedang dalam keadaan menjalankan operasi yang lama/ panjang. Sebagai contoh, multithread web browser dapat mengizinkan pengguna berinteraksi dengan suatu thread ketika suatu gambar sedang diload oleh thread yang lain. 2. Pembagian sumber daya: Secara default, thread membagi memori dan sumber daya dari proses. Keuntungan dari pembagian kode adalah aplikasi mempunyai perbedaan aktifitas thread dengan alokasi memori yang sama. 3. Ekonomis: Mengalokasikan memori dan sumber daya untuk membuat proses adalah sangat mahal. Alternatifnya, karena thread membagi sumber daya dari proses, ini lebih ekonomis untuk membuat threads. 4. Pemberdayaan arsitektur multiprosesor: Keuntungann dari multithreading dapat ditingkatkan dengan arsitektur multiprosesor, dimana setiap thread dapat jalan secara parallel pada prosesor yang berbeda. Pada arsitektur prosesor tunggal, CPU biasanya berpindah-pindah antara setiap thread dengan cepat, sehingga terdapat



ilusi paralelisme, tetapi pada kenyataannya hanya satu thread yang berjalan di setiap waktu. 2.4



Model Multithreading 1.



Many-to-One Model Model many-to-one ini memetakan beberapa tingkatan pengguna thread hanya ke satu buah kernel thread. Managemen proses thread dilakukan oleh (di ruang) pengguna, sehingga menjadi efisien, tetapi apabila sebuah thread melakukan sebuah pemblokingan terhadap sistem pemanggilan, maka seluruh proses akan berhenti (blocked). Kelemahan dari model ini adalah multihreads tidak dapat berjalan atau bekerja secara paralel di dalam multiprosesor dikarenakan hanya satu thread



saja



yang



bisa



mengakses



kernel



dalam



suatu



waktu.



2.



One-to-One Model Model one-to-one memetakan setiap thread pengguna ke dalam satu kernel thread. Hal ini membuat model one-to-one lebih sinkron daripada model many-to-one dengan mengizinkan thread lain untuk berjalan ketika suatu thread membuat pemblokingan terhadap sistem pemanggilan; hal ini juga mengizinkan multiple thread untuk berjalan secara parallel dalam multiprosesor. Kelemahan model ini adalah dalam pembuatan thread pengguna dibutuhkan 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 one-to-one diimplementasikan oleh Windows NT dan OS/2.



3.



Many-to-Many Model Beberapa tingkatan thread pengguna dapat menggunakan jumlah kernel thread yang lebih kecil atau sama dengan jumlah thread pengguna. Jumlah dari kernel thread dapat dispesifikasikan untuk beberapa aplikasi dan beberapa mesin (suatu aplikasi dapat dialokasikan lebih dari beberapa kernel thread dalam multiprosesor daripada dalam uniprosesor) dimana model many-to-one mengizinkan pengembang untuk membuat thread pengguna sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu. Model one-to-one mempunyai konkurensi yang lebih tinggi, tetapi pengembang harus hati-hati untuk tidak membuat terlalu banyak thread tanpa aplikasi dan dalam kasus tertentu mungkin jumlah thread yang dapat dibuat dibatasi.



2.5



Status Thread 1.



New Thread yang berada pada status ini merupakan objek dari kelas Thread yang baru dibuat, yaitu saat instansiasi objek dengan statement new. Pada saat thread berada pada status new, belum ada sumber daya yang dialokasikan, sehingga thread belum bisa menjalankan perintah apapun.



2.



Runnable Pada saat method run() dipanggil, maka status thread berubah menjadi runnable, artinya thread tersebut sudah memenuhi syarat untuk dijalankan. Thread yang sedang berjalan juga dikategorikan dalam status runnable.



3.



Blocked Status blocking menunjukkan bahwa sebuah thread terhalang untuk menjalankan tugasnya, sehingga dapat dikatakan thread tersebut terhenti untuk sementara.



4.



Dead Setelah keluar dari method run(), thread akan berada dalam status dead dan menjadi tidak aktif lagi. Status jelas dari thread tidak dapat diketahui, tetapi method isAlive() mengembalikan nilai boolean untuk mengetahui apakah thread tersebut dead atau tidak.



Gambar dibawah ini merupakan ringkasan dari status thread.



Gambar Status Thread 2.6



Kelas Thread Ada tiga macam class Thread, yaitu: a.



Constructor  Thread() Membuat sebuah object Thread yang baru.  Thread(String name) Membuat sebuah object Thread dengan memberikan penamaan yang spesifik.  Thread(Runnable target) Membuat sebuah object Thread yang baru berdasar pada object Runnable. Target menyatakan sebuah object diaman method run() dipanggil  Thread(Runnable target, String name) Membuat sebuauh object Thread yang baru dengan nama yang spesifik dan berdasarkan pada object Runnable.



b.



Contants  public final static int MIN_PRIORITY Nilai prioritas minimum, 0  public final static int NORM_PRIORITY Nilai default prioritas, 5  public final static int MAX_PRIORITY Nilai prioritas maksimum, 10



c.



Method  public static Thread currentThread() Mengembalikan sebuah reference kepada thread yang sedang berjalan.  public final String getName() Mengembalikan nama thread.  public final void setName(String name) Mengulang pemberian nama thread sesuai dengan argument name. Hal ini menyebabkan SecurityException.  public final int getPriority() Mengembalikan nilai prioritas yang telah diberikan kepada thread tersebut.  public final boolean isAlive() Menunjukkan bahwa thread tersebut sedang berjalan atau tidak.  public final void sleep (long milis) Menunda thread dalam jangka waktu milis. Hal ini dapat menyebabkan InterruptedException.  Public void run() Eksekusi thread dimulai dari method ini.  Public void start() Menyebabkan eksekusi dari thread berlangsung dengan cara memanggil method run().



2.7



Pembuatan Thread Sebuah thread dapat diciptakan dengan cara menurunkan (extend) class Thread atau



dengan mengimplementasikan sebuah interface Runnable. a.



Extend class Thread Kelas Thread secara implisit juga meng-implements Runnable. Oleh karena itu, multithread diimplementasikan sebagai objek dimana objek tersebut mempunyai method run()



b.



Implementasi interface Runnable Cara



lain



untuk



membuat



sendiri



sebuah



thread



adalah



dengan



mengimplementasikan interface Runnable. Hanya satu method yang dibutuhkan oleh interface Runnable yaitu method run().



2.8



Library Thread Thread library bertugas untuk menyediakan API untuk programmer dalam menciptakan



dan mengelola thread. Ada dua cara dalam mengimplementasikan pustaka thread, yaitu: a.



Menyediakan API dalam level pengguna tanpa dukungan dari kernel sehingga pemanggilan fungsi tidak melalui system call. Jadi, jika memanggil fungsi yang sudah ada di pustaka, maka akan menghasilkan pemanggilan fungsi call yang sifatnya lokal dan bukan system call.



b.



Menyediakan API di level kernel yang didukung secara langsung oleh sistem operasi. Pemanggilan fungsi call akan melibatkan system call ke kernel.



2.9



Pembatalan Thread Pembatalan suatu thread dapat terjadi dalam dua skenario yang berbeda, yaitu: 1.



suatu thread seketika itu juga memberhentikan



Asynchronous cancellation: target thread.



2.



Deffered cancellation



target thread secara perodik memeriksa apakah



:



dia harus berhenti, cara ini memperbolehkan targetthread untuk memberhentikan dirinya sendiri secara terurut. 2.10 Penjadwalan Thread Untuk menjadwalkan thread, sistem dengan model mulithreading many to many atau many to one menggunakan: a.



Process Contention Scope (PCS). Pustaka thread menjadwalkan thread pengguna untuk berjalan pada LWP (light weight process) yang tersedia.



b.



System Contention Scope (SCS). SCS



berfungsi



untuk



memilih



satu



dari



banyak



thread,



kemudian



menjadwalkannya ke satu thread tertentu. 2.11 Sinkronisasi Thread yang berjalan sendiri tanpa memperhatikan status dan aktifitas dari thread lain yang sedang berjalan. Didalam situasi-situasi tertentu, sebuah thread yang berjalan bersama-sama kadang membutuhkan resource atau method dari luar. Oleh karena itu, thread tersebut perlu untuk berkomunikasi satu dengan yang lain sehingga dapat mengetahui status dan aktifitas mereka.



2.12 Thread Pools Pada web server yang multithreading ada 2 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 pools , dimana mereka duduk diam dan menunggu untuk bekerja. Jadi ketika server menerima permintaan maka maka ia akan membangunkan thread dari pool dan jika threadnya 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 1 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 penting pada sistem yang tidak bisa mendukung banyak thread yang berjalan secara concurrent. Istilah thread di Linux adalah task.



Jumlah thread dalam pool bisa tergantung dari jumlah CPU dalam sistem, jumlah memori fisik, dan jumlah permintaan klien yang concurrent . 2.7



Thread di Linux Ketika pertama kali dikembangkan, Linux tidak didukung dengan threading di dalam



kernelnya, tetapi dia mendukung proses-proses sebagai entitas yang dapat dijadwalkan melalui clone()



system



calls.



Sekarang



Linux



mendukung



penduplikasian



proses



menggunakan system callclone() dan fork(). Clone() mempunyai sifat mirip dengan fork(), kecuali dalam hal pembuatan copy dari proses yang dipanggil dimana ia membuat sebuah



proses yang terpisah yang berbagi address space dengan proses yang dipanggil. Pembagian address space dari parent process memungkinkancloned task bersifat mirip dengan thread yang terpisah. Pembagian address space ini dimungkinkan karena proses direpresentasikan di dalam Kernel Linux. Di dalam Kernel Linux setiap proses direpresentasikan sebagai sebuah struktur data yang unik. Jadi, daripada menciptakan yang baru maka struktur data yang baru mengandung pointer yang menunjuk ke tempat dimana data berada. Jadi ketika fork() dipanggil, proses yang baru akan tercipta beserta duplikasi dari segala isi di struktur data di parent process, namun ketika clone() dipanggil, ia tidak menduplikasi parent processnya tetapi menciptakan pointer ke struktur data pada parent processyang memungkinkan child process untuk berbagi memori dan sumber daya dari parent processnya. Project LinuxThread menggunakan system call ini untuk mensimulasi thread di user space. Sayangnya, pendekatan ini mempunyai beberapa kekurangan, khusunya di area signal handling, scheduling, daninterprocess synchronization primitive.Untuk meningkatkan kemampuan Thread Linux, dukungan kernel dan penulisan ulang pustaka thread sangat diperlukan. Dua project yang saling bersaing menjawab tantangan ini. Sebuah tim yang terdiri dari pengembang dari IBM membuat NGPT (Next Generation POSIX Threads). Sementara



pengembang



Library).Sebenarnya



dari Red



Linux



tidak



Hat membuat membedakan



NPTL antara



(Native proses



POSIX



Thread



dan thread.



Dalam



kenyataannya, Linux lebih menggunakan istilah task dibandingkan proses dan thread ketika merujuk kepada pengaturan alur pengontrolan di dalam program.



BAB III PENUTUP KESIMPULAN



3.1



Thread adalah sebuah alur kontrol dari sebuah proses. Thread terbagi menjadi dua jenis yaitu Single Thread dan Multithread. Dilihat dari kegunaannya multithread adalah thread yang paling banyak dipakai akhir-akhir ini. Suatu proses yang multithreaded mengandung beberapa perbedaan alur kontrol dengan ruang alamat yang sama. Keuntungan dari multithreaded meliputi peningkatan respon dari user, pembagian sumber daya proses, ekonomis, dan kemampuan untuk mengambil keuntungan dari arsitektur multiprosesor. User level thread adalah thread yang tampak oleh programmer dan tidak diketahui oleh kernel. User level thread secara tipikal dikelola oleh sebuah library thread di ruang user. Kernel level thread didukung dan dikelola oleh kernel sistem operasi. Secara umum, user level thread lebih cepat dalam pembuatan dan pengelolaan dari pada kernel thread. Ada tiga perbedaan tipe dari model yang berhubungan dengan user dan kernel thread. 



Model many to one: memetakan beberapa user level thread hanya ke satu buah kernel thread.







Model one to one: memetakan setiap user thread ke dalam satu kernel thread. berakhir.







Model many to many: mengizinkan pengembang untuk membuat user thread sebanyak mungkin, konkurensi tidak dapat tercapai karena hanya satu thread yang dapat dijadualkan oleh kernel dalam satu waktu.



DAFTAR PUSTAKA 1) http://okulsel.net/docs/index-71538.html?page=18 (diakses 06 April 2014) 2) http://wandiso.blogspot.com/2011/04/thread.html (diakses 07 April 2014) 3) http://tugassosistemoperasi.blogspot.com/2011/04/thread-dengan-linux-threaddengan-java.html (diakses 10 April 2014)



DAFTAR ISI Kata Pengantar…………………………………………………….…. Pendahuluan………………………………………………………….. Isi…………………………………………………………………….... Penutup………………………………………………………………... Daftar Pustaka…………………………………………………………