7 0 399 KB
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…………………………………………………………