0% menganggap dokumen ini bermanfaat (0 suara)
209 tayangan56 halaman

Konsep dan Model Thread dalam OS

Thread merupakan unit dasar dari pemanfaatan CPU dalam sistem multithread. Dokumen ini memperkenalkan konsep thread dan mendiskusikan model multithread, library thread seperti Pthreads, Windows, dan Java serta beberapa strategi implicit threading seperti thread pools dan OpenMP. Dokumen ini juga membahas permasalahan utama dalam pemrograman multithread seperti penanganan system call, signal, dan scheduler.

Diunggah oleh

Anindhita Firdani
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPT, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
209 tayangan56 halaman

Konsep dan Model Thread dalam OS

Thread merupakan unit dasar dari pemanfaatan CPU dalam sistem multithread. Dokumen ini memperkenalkan konsep thread dan mendiskusikan model multithread, library thread seperti Pthreads, Windows, dan Java serta beberapa strategi implicit threading seperti thread pools dan OpenMP. Dokumen ini juga membahas permasalahan utama dalam pemrograman multithread seperti penanganan system call, signal, dan scheduler.

Diunggah oleh

Anindhita Firdani
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPT, PDF, TXT atau baca online di Scribd

Thread

Materi
Pengenalan Thread
Pemrograman Multicore
Model Multithread
Thread Library
Implicit Threading
Permasalahan dalam Thread
Thread dalam Berbagai Sistem
Operasi

Tujuan
Memperkenalkan konsep thread unit
dasar
dari
penggunaan
CPU
yang
terbentuk dari sistem multithread
Mendiskusikan API untuk library thread
Pthreads, Windows, dan Java
Mengeksplor beberapa strategi implicit
threading
Membahas
masalah
pada
program
multithread

Pengenalan Thread

Thread
Unit dasar dari pemanfaatan CPU
Pada dasarnya satu proses terdiri
atas satu thread (single-thread)
Dalam sekali waktu hanya ada satu
tugas yang bisa dikerjakan dalam satu
proses

Padahal program-program terkini


butuh menjalankan beberapa tugas
dalam sekali waktu.
Butuh multi-thread dalam satu proses.

Web browser

Contoh Kebutuhan
Multithreading

Thread untuk menampilkan halaman web,


gambar
Thread untuk mengunduh data dari jaringan

Pengolah kata
Thread untuk menerima dan menampilkan
hasil pengetikan
Thread untuk mengecek grammar

Webserver
Thread untuk menangani request dari banyak
user

Contoh Multithread pada


Webserver

Question
Mengapa harus multi-thread? Mengapa
tidak pakai multiprocess saja? Apa
keuntungan pakai multithread?

Keuntungan Multithread
Responsiveness

Program tetap bisa berjalan walaupun ada sebagian tugas yang


memakan waktu lama.
Contoh : Web browser tetap dapat digunakan walaupun sedang ada
aktifitas download.

Resource sharing

Multiprocess : Butuh implementasi shared memory atau message


passing untuk berbagi data antar-proses.
Multithread : Antar-thread dalam satu proses sudah berbagi data

Economy

Multiprocess : Butuh alokasi banyak memori dan resource untuk


membuat proses baru
Multithread : Antar-thread sudah berbagi resource yang dialokasikan
untuk sebuah proses

Scalability

Process : Satu processor hanya bisa mengeksekusi satu proses


Thread : Setiap thread dalam satu proses dapat dieksekusi secara paralel
oleh processor yang berbeda

Single Thread vs Multi Thread

Multicore Program

Multicore Program
Multicore/Multiprocessor : ada lebih dari satu
processor/core processor dalam satu system
Pemrograman multithread memungkinkan
pemanfaatan fitur multicore pada suatu system
Contoh sebuah program dengan 4 threads
Single core :
Eksekusi thread dilakukan secara bergantian (concurrent)

Multi Core :
Eksekusi dilakukan secara parallel sesuai jumlah core
Memungkinkan pembagian tugas dalam satu program

Question
Apa perbedaan concurrent dan
parrarel?

Concurrency vs. Parallelism


Concurrent execution pada single core
Hanya ada satu thread yang dieksekusi sekali waktu
Thread dieksekusi dengan progress tertentu secara
bergantian

Paralleilism pada multi-core


Beberapa thread dieksekusi secara parallel sesuai
jumlah core

Tantangan Pemrograman pada


Sistem Multi-core
Identifikasi aktifitas
Identifikasi bagian program mana saja yang dapat
berjalan terpisah

Keseimbangan
Tugas yang dipisah memiliki beban yang seimbang

Pemisahan data
Bagaimana membagi data antar bagian program yang
terpisah?

Ketergantungan data
Bagaimana jika data pada satu tugas bergantung
dengan data dari tugas lain?

Testing dan debugging


Bagaimana melakukan testing dan debugging pada
bagian program yang terpisah?

Tipe Parralelism
Data parralelism
Task parralelism

Data Parallelism
Distribusi bagian-bagian data ke
masing-masing core processor
berbeda untuk diolah
Operasi pada masing-masing core
sama
Contoh :
Operasi penjumlahan bilangan 1 sampai N
Ada 2 core processor
Penjumlahan data 1 sampai (N/2) di core 1
dan (N/2+1) sampai N di core 2

Task Parallelism
Distribusi tugas (thread) berbeda
ke masing-masing core processor
yang berbeda
Operasi pada masing-masing core
beda
Contoh :
Core 1 menghitung standard deviasi
Core 2 mencari nilai max

Multithreading Model

User Thread vs Kernel Thread


Berdasarkan pengendalinya, thread dibagi :
User thread
Kenel thread

User thread dikendalikan oleh program


pada level user tanpa campur tangan
kernel
Kernel thread dikendalikan langsung oleh
sistem operasi
Ada beberapa model hubungan antara
kernel dan user thread

Model Many-to-One
Beberapa user-thread dipetakan ke
satu kernel-thread
Kelebihan
Tidak ada batasan jumlah userthread yang bisa dibuat
Kelemahan
Satu thread melakukan blocking
(misal I/O), seluruh proses ter-block
Multithread tidak dapat dijalankan
secara parallel pada sistem
multicore
Contoh
Solaris Green Threads
GNU Portable Threads

Model One-to-One
Satu user-thread dipetakan ke
satu kernel-thread
Pembuatan satu user-thread =
Pembuatan satu kernel-thread
Kelebihan
Satu thread blocking tidak akan
berpengaruh ke thread lain
Multithread dapat dijalankan secara
parallel pada sistem multicore

Kelemahan

Jumlah user-thread yang bisa dibuat


terbatas
Pembuatan kernel-thread dapat
membebani performa

Contoh : Windows, Linux

Model Many-to-Many
Beberapa user-thread
dipetakan ke beberapa
kernel-thread (multiplexing)
Jumlah kernel-thread yang
dibuat bergantung aplikasi dan
spesifikasi mesin
Kelebihan :
Satu thread blocking tidak akan
berpengaruh ke thread lain
Tidak ada batasan jumlah userthread

Two Level Model


Mirip M:M, tapi
mengijinkan userlevel thread
dipetakan ke satu
kernel thread
Contoh :

IRIX
HP-UX
TRU64-Unix
Solaris 8 ke bawah

Thread Library

Thread Libraries
Application Programming
Interface (API) untuk pembuatan
dan manajemen thread
Dua jenis implementasi
Library diimplementasi di level user
Library diimplementasi di level
kernel. Bisa dipianggil dengan
dengan system call

Strategi Implementasi
Asynchronous Threading
Setelah thread induk membuat thread anak,
proses induk kembali melanjutkan eksekusi
Thread induk dan thread anak berjalan
independen
Proses induk tidak perlu tahu status thread anak

Synchronous Threading
Proses induk menunggu semua thread anak
selesai sebelum melanjutkan eksekusi (fork-join)
Setelah thread anak selesai, join ke thread induk

Pthreads
Tersedia untuk user-level dan kernel-level
thread
Spesifikasi, bukan implementation
API menspesifikasi behaviour, untuk
implementasi tergantung developer
Banyak digunakan pada OS berbasis UNIX
seperti Solaris, Linux, Mac OS X

Contoh Pthreads

Contoh Pthreads (Cont.)

Pthreads Code for Joining 10


Threads (fork-join strategy)

Windows Multithreaded C
Program

Java Threads
Java threads diatur oleh JVM
Implementasi menggunakan
model thread yang disediakan
oleh OS
Java threads dapat dibuat
dengan:
Extends Thread class dan override
method run()
Implement Runnable interface

Java Multithreaded Program : implement


Runnable

Java Multithreaded Program (2)

Java Thread : Important Notes


Tidak ada konsep global variabel
Proses berbagi data dilakukan
dengan passing reference ke object
Contoh : panggil method getSum() dan
setSum()

Implementasi fork-join strategy


dilakukan dengan memanggil
method join()

Question
Apa perbedaan implementasi thread
di Java dengan implements Runnable
dan extend Thread class?

Implicit Threading

Implicit Threading
Dalam perkembangannya, sebuah aplikasi
dapat mempunyai ratusan hingga ribuan
thread
Contoh : multithread pada webserver

Masalah :
Identifikasi, pemisahan data, ketergantungan
data
Ketepatan hasil program

Solusi
Implicit threading : pembuatan dan
manajemen thread dilakukan oleh compiler
dan run-time library, bukan programmer

Metode Implicit Threading


Thread Pools
OpenMP
Grand Central Dispatch

Thread Pools
Latar Belakang

Ada ratusan/ribuan thread yang harus dibuat pada satu


aplikasi. Contoh : webserver
Pembuatan thread memakan waktu dan resource

Solusi Thread Pools

Buat beberapa thread di awal process dan tempatkan


dalam penampung (pool)
Ketika sebuah tugas akan dieksekusi, gunakan threadthread yang sudah tersedia dalam pool

Kelebihan

Lebih cepat daripada membuat thread baru setiap kali


ada tugas
Thread pool dapat membatasi jumlah threa yang dibuat
sekali waktu
Ada pemisahan bagian antara tugas yang akan dikerjakan
dengan pembuatan thread
Sebuah tugas dapat dilakukan secara berulang

OpenMP

API untuk C, C++, FORTRAN


Menyediakan dukungan untuk
pemrograman parallel pada
lingkungan shared-memory
Programmer dapat menentukan
Parallel regions bagian code
yang berjalan secara parallel

#pragma omp parallel


Create as many threads as there
are cores
#pragma omp parallel for
for(i=0;i<N;i++) {
c[i] = a[i] + b[i];
}
Run for loop in parallel

Grand Central Dispatch


Tekologi Apple untuk Mac OS X dan iOS
Programmer dapat menentukan bagian code
yang berjalan secara parallel
Detail pengaturan threading sudah diatur oleh
GCD
Code ditaruh di ^{ } { printf("I am a block"); }

Bagian block ditempatkan dalam dispatch queue


Block dijalankan oleh thread yang tersedia di thread
pool
Block dihapus dari dispatch queue

Permasalahan dalam Thread

Permasalahan dalam Thread


System call fork() dan exec()
Signal handling
Pembatalan thread
Thread local storage
Schedulers activation

System call fork() dan exec()


Permasalahan

Jika fungsi fork() dipanggil oleh salah satu


thread, apakah semua thread diduplikasi
atau hanya thread yang memanggil saja?

Solusi

Jika fungsi exec() dipanggil setelah fork(),


duplikasi hanya untuk thread yang
memanggil
Program yang dipanggil di exec() akan
menggantikan seluruh proses

Jika tidak memanggil exec(), duplikasi


semua thread

Signal Handling

Signals digunakan pada UNIX system untuk


memberitahu sebuah proses bahwa sebuah even terjadi.

Divide by zero
Buffer overflow

Signal handler digunakan untuk menangani signal

Signal dibuat oleh event tertentu


Signal diberikan ke sebuah process
Signal ditangani oleh satu dari dua jenis handler : default
handler atau user-defined handler

Masalah : Kemana signal harus diberikan pada proses


dengan multi-thread?

Berikan signal ke satu thread dimana signal tersebut


digunakan
Berikan signal ke setiap thread
Berikan signal ke beberapa thread
Tunjuk satu thread untuk menangani semua signal

Thread Cancellation
Pemusnahan thread sebelum selesai menjalankan
tugas
Thread yang akan dibatalkan disebut target
thread
Dua pendekatan:
Asynchronous cancellation memusnahkan target
thread segera
Deferred cancellation membuat target thread untuk
mengecek secara periodik apakah dia harus
mengakhiri eksekusi

Pthread code to create and cancel a thread:

Thread Cancellation (Cont.)


Pemusnahan thread bergantung status thread

Default type adalah deferred


Pemusnahan terjadi hanya ketika thread mencapai
cancellation point
I.e. pthread_testcancel()
Then cleanup handler is invoked

Pada Linux systems, pemusnahan thread ditangani


melalui signals

Scheduler Activations
M:M dan two-level model butuh komunikasi untuk
menjaga alokasi jumlah kernel thread dari
sebuah aplikasi
Biasanya menggunakan perantara data structure
antara user dan kernel threads lightweight
process (LWP)
Terlihat sebagai virtual processor yang dapat
menjadwalkan user-thread mana yang berjalan
Setiap LWP ditempelkan ke kernel thread
Berapa jumlah LWP yang harus dibuat?

Scheduler activations menyediakan upcalls


-Sebuah mekanisme komunikasi dari kernel ke
upcall handler dalam library thread.
Komunikasi ini membuat aplikasi dapat menjaga
jumlah kernel thread yang dibuat

Thread-Local Storage
Thread-local storage (TLS) membuat setiap
thread mempunyai duplikat datanya sendiri
Berguna jika programmer tidak bisa mengontrol
pembuatan thread (ketika menggunakan thread
pool)
Beda dengan local variable
Lingkup local variabel hanya dalam satu fungsi
Lingkup TLS meliputi berbagai fungsi

Mirip static data


TLS unik untuk setiap thread

Thread dalam Berbagai


Sistem Operasi

Windows Threads

Thread di Windows dapat dibuat/diatur dengan Windows API

Menerapkan one-to-one mapping, kernel-level

Setiap thread mengandung

Thread id
Register set merepresentaskan status prosesor
Memisahkan user dan kernel stack ketika thread berjalan di user mode atau kernel
mode
Private data storage area yag digunakan oleh run-time libraries and dynamic link
libraries (DLLs)

Register set, stacks, dan private storage area disebut sebagai context
thread

Struktur data sebuah thread meliputi:

ETHREAD (executive thread block) pointer ke proses induk dari sebuah thread
dan ke KTHREAD, dalam kernel space
KTHREAD (kernel thread block) informasi penjadwalan dan sinkronisasi, kernelmode stack, pointer ke TEB, dalam kernel space
TEB (thread environment block) thread id, user-mode stack, thread-local storage,
di user space

Windows Threads Data


Structures

Linux Threads
Linux menggunakan terminologi tasks daripada threads
Pembuatan thread melalui system call clone()
clone()mengijinkan thread anak untuk berbagi data
dengan proses induk
Flags control behavior

struct task_struct menunjuk ke process data


structures (shared or unique)

Terima Kasih

Anda mungkin juga menyukai