Sistem Operasi 4 “Threads”
Thread Definisi: unit dasar dari penggunaan CPU. Thread terdiri dari: thread ID, program counter, register, dan stack. Thread juga sering disebut Lightweight process. Thread berbagi: code section, data section, dan sumber daya sistem operasi dengan thread lain yang termasuk dalam proses yang sama. Proses tradisional ( Heavyweight process ) mempunyai thread tunggal yang berfungsi sebagai pengontrol.
Single and Multithreaded Processes 3
Keuntungan Thread Responsiveness : Melakukan multithreading pada aplikasi yang interaktif dapat membuat program terus berjalan meskipun bagian dari program tersebut diblok atau sedang menjalankan operasi yang panjang, karena itu dapat meningkatkan respon kepada user. Resource sharing : sebuah aplikasi dapat mempunyai beberapa thread yang berbeda dalam sebuah alamat memori yang sama karena Thread berbagi memori dan sumber daya dari proses yang memilikinya. Economy: karena mahal untuk mengalokasikan memori dan sumber daya untuk pembuatan proses. Alternatifnya adalah dengan pengunaan thread. Sebab thread berbagi sumber daya dari proses yang memilikinya, oleh sebab itu akan lebih ekonomis untuk membuat sebuah thread daripada menggunakan memory baru. Utilization of multiproccesor architectures: keuntungan dari multithreading dapat meningkat secara drastis dalam arsitektur multiprosesor, dimana setiap thread dapat berjalan secara pararel pada prosesor yang berbeda.
Fakta Pembuatan Proses lebih berat dan lama daripada Thread Pada Solaris: Pembuatan proses 30x lebih lama daripada Thread Context Switch Proses 5x lebih lama daripada CT Thread Java memiliki konsep yang berbeda mengenai Thread Program Java tidak bs bersifat asinkronus
User Threads & Kernel Threads User threads didukung diatas kernel dan diimplementasikan oleh thread library pada level user. Library mendukung pembuatan thread, penjadwalan, dan manajemen tanpa dukungan dari kernel. Karena kernel tidak menyadari adanya user-level threads maka pembuatan semua thread dan penjadwalan dilakukan di dalam user space tanpa intervensi dari kernel. Kerugian: jika salah satu thread block, semua proses block Three primary thread libraries: POSIX Pthreads Win32 threads Java threads
User dan Kernel Threads Kernel threads didukung secara langsung dari sistem operasi. Pembuatan thread, penjadwalan, dan manajemen dilakukan oleh sistem operasi, secara umum kernel threads lebih lambat untuk dibuat dibanding user thread. Keuntungan: SO dapat menjadwalkan thread lain jika ada salah satu thread yang di block SO dapat menjadwalkan thread-thread pada multi processor Examples Windows XP/2000 Solaris Linux Tru64 UNIX Mac OS X
Multithreading model Many to One Model memetakan beberapa user-level threads ke satu kernel threads. Examples: Solaris Green Threads GNU Portable Threads Kelemahan: Satu block semua block
Multithreading model One to One model memetakan setiap user thread ke kernel thread. Examples Windows NT/XP/2000 Linux Solaris 9 and later Keuntungan: Konkurensi Butuh space, waktu, Tidak blocking Terbatas
Multithreading model Many to many model memetakan banyak user-level thread ke kernel thread yang lebih sedikit atau sama. User dapat membuat banyak thread, masing2 kernel thread dpt jalan di lingkungan multiprocessor Examples Solaris prior to version 9 Windows NT/2000 with the ThreadFiber package
Two-level Model Similar to M:M, except that it allows a user thread to be bound to kernel thread Examples IRIX HP-UX Tru64 UNIX Solaris 8 and earlier 11
Thread Libraries Thread library provides programmer with API for creating and managing threads Two primary ways of implementing Library entirely in user space Kernel-level library supported by the OS
Threading issue: Forking Bila sebuah thread di program memanggil fork() maka ada dua skenario yang bisa terjadi : Semua thread akan diduplikasi. Hanya thread yang memanggil fork() yang akan didupliakasi. Jika exec() dipanggil langsung setelah fork(), maka duplikasi seluruh thread tidak dibutuhkan krn exec sdh mengganti seluruh proses Jika exec() tidak dipanggil, maka duplikasi thread harus dilakukan
Threading issue: cancellation Thread cancellation adalah sebuah tugas untuk memberhentikan thread sebelum thread tersebut selesai. Contoh: JVM akan mematikan seluruh thread sblm mati Thread yang akan diberhentikan disebut target thread. Dua skenario thread cancellationn : Asynchronous cancellation : satu thread memberhentikan target thread seketika itu juga. Deferred cancellation : target thread secara periodik dapat mengecek apakah ia harus berhenti, skenario ini memberi kesempatan kepada target thread untuk memberhentikan dirinya sendiri.
Kesulitan Thread Cancellation Asynchronous: Jika thread yg akan dimatikan, thread tersebut sedang mengupdate data. Alternatifnya: Deferred Cancellation
Threading issue: Signal handling Sebuah sinyal digunakan di sistem UNIX untuk memberitahu sebuah proses kalau peristiwa tertentu sedang terjadi (mis: perubahan state thread, error, interrupt). Pola sinyal asynchronous / synchronous: Sebuah sinyal diaktifkan oleh munculnya suatu peristiwa. Sinyal yang diaktifkan dikirim ke proses. Sesudah dikirim, sinyal tersebut harus ditangani.
Threading issue: Signal handling Sinyal Synchronous: Sinyal dimunculkan dan dikirim ke proses yang melakukan operasi tersebut Ketika ada pengaksesan memory ilegal atau divison by zero Sinyal Asynchronous: Sinyal dimunculkan oleh peristiwa diluar proses tersebut Ketika ada proses menutup window (ALT + F4)
Threading issue: Signal handling Penerima sinyal: Diatur oleh sistem operasi Didefinisikan oleh user Pada single thread penanganan sinyal mudah, tapi multithreading sulit, krn 1 proses memiliki lbh dr 1 thread Sinyal dikirim ke: Thread yg dituju Setiap thread pd proses tersebut Ke thread tertentu pd proses tersebut Menugaskan thread khusus
Thread pools Gagasan umum : Keuntungan : Thread specific data Membuat beberapa thread pada start-up proses dan menempatkan mereka ke dalam sebuah pool dimana mereka diam dan menunggu untuk bekerja. Penciptaan thread yg tak terbatas menurunkan performa Keuntungan : Biasanya lebih cepat untuk melayani sebuah permintaan dengan thread yang ada dibanding menunggu thread tersebut dibuat. Thread pool membatasi jumlah thread yang ada pada suatu waktu. Hal ini penting pada sistem yang tidak bisa mendukung banyak concurrent thread Thread specific data Duplikat data tertentu dari suatu thread pada suatu situasi.
Windows XP Threads Implements the one-to-one mapping, kernel-level Each thread contains A thread id Register set Separate user and kernel stacks Private data storage area The register set, stacks, and private storage area are known as the context of the threads The primary data structures of a thread include: ETHREAD (executive thread block) KTHREAD (kernel thread block) TEB (thread environment block) 20
Linux Thread Threads pada linux mulai digunakan di kernel versi 2.2 Threads lebih dianggap sebagai tasks Linux menyediakan 2 system call : fork(): duplikasi proses, dimana proses anak independen clone(): mirip seperti fork(), namun selain meng-copy proses yang memanggilnya, method ini membuat proses baru yang berbagi address space yang sama dengan proses yang memanggilnya, sehingga sama persis dgn induknya Context Switch Linux lebih cepat
Java Threads Java threads are managed by the JVM Typically implemented using the threads model provided by underlying OS Java threads may be created by: Extending Thread class Implementing the Runnable interface 22
Contoh “extend Thread”
Lainnya
Implements Runnable
Hasil
Java Threads Keunggulan Java Threads adalah: JVM menggunakan prioritas preemptive berdasarkan algoritma penjadualan Semua threads di Java mempunyai prioritas. Prioritas tertinggi dijadualkan untuk dieksekusi oleh JVM Jika ada 2 thread yang prioritasnya sama, digunakan algoritma First In First Out (FIFO)
NEXT Process Schedulling / Penjadwalan