SisOp Session 7 & Session 8
*Session 7
Threads
Thread
- State eksekusi (running, ready, terminated)
- Isi thread disimpan ketika tidak berjalan
- Memiliki tumpukan eksekusi
- Beberapa penyimpanan per thread static dipakai untuk variabel lokal
- Akses ke memori dan resource terjadi saat proses
- Theads mengijinkan beberapa eksekusi terjadi dilingkungan proses yang sama
- Light weight process :threads punya beberapa sifat dari proses
- Multi threading : mengijinkan beberaa threads diproses yang sama
Thread Model
* kolom pertama berisi beberapa item yang dibagi oleh semua thread dalam sebuah proses.
* kolom kedua berisi beberapa item private ke setiap thread.
*setiap proses memiliki stack tersendiri
Benefit of thread
- Membutuhkan waktu yang sedikit untuk membuat thread baru ketimbang sebuah proses
- Membutuhkan waktu yang sedikit untuk menterminate sebuah thread dibanding sebuah proses
- Membutuhkan waktu yang sedikit untuk menukar dua thread diproses yag sama
- Karena memiliki proses yang sama (memori dan files), thread bisa saling berkomunikasi satu sama lain tanpa menggunakan kernel
*contoh koding menggunakan thread
Thread Implementation
User Space
Advantages
- Memungkinkan setiap masing – masing proses memiliki scheduling algorithmnya sendiri
- Performa stabil
Disadvantages
- Implementasi blocking system calls
- Tidak ada thread yang bisa berjalan tanpa salah satu thread mengalah dalam pemakaian CPU
Kernel Space
Advantages
- Tidak membutuhkan sebuah non blocking system calls baru
Disadvantages
- Butuh biaya besar untuk membuat dan menghancurkan thread
Hybrid
- Multiplexing thread tingkat user ke thread tingkat kernel
Pop Up Thread
Membuat sebuah thread baru ketika pesan tiba.
- Sebelum pesan diterima
- Setelah pesan diterima
Threads basic
- Semua Thread diproses yang sama saling berbagi :
* Alamat yang sama
* Instruksi proses
* Sebagian besar data
* Open file (descriptor)
* Sinyal dan sinyal handler
* Direktori kerja saat ini
* ID user dan ID grup.
- Setiap Thread memiliki keunikan :
* ID thread
* Kumpulan register dan stack pointer
* Stack untuk local variabel dan alamat return
* Signal mask
* Prioritas
* Return value
Thread State
- Spawn
* Biasanya ketika sebuah proses baru dibangkitkan(spawn) maka sebuah thread untuk proses tersebut juga dibangkitkan(spawan).
* Thread dapat memberikan pointer dan argument untuk thread baru hasil spawn.
- Block
* Pemblokiran terjadi saat sebuah thread harus menunggu sebuah proses (menyimpan register pengguna, program counter, dan stack pointer).
- Unblock
* Saat sebuah proses berada ditahap sedang terjadi pemblokiran thread maka thread tersebut akan diletakkan diantrian.
- Finish
* Ketika sebuah thread selesai digunakan maka register context dan stack akan dialokasikan.
Multi threading example on a uniprocessor
Relationship between Threads and Processes
Threading granularity
- Coarse Threading
- Modul individu yang dipanggil sistem, yang ditugaskan prosesor individu
- Dalam source case engine, hal ini berarti meletakkan sebuah rendering ke satu prosesor, AI ke prosesor lain, physics ke prosesor lain dan seterusnya
- Tiap modul penting adalah thread tunggal dan koordinasinya melibatkan sinkronisasi semua thread dengan timeline thread
- Fine-grained threading
- Banyak perintah yang identic tersebar dibanyal prosesor
- Contoh : sebuah loop dalam sebuah array bisa dipecah menjadi beberapa bagian loop pararel di thread tersendiri yang bisa dijadwalkan secara pararel.
- Hybrid threading
- Kombinasi Fine-grained threading dengan coarse threading
Posix (Portable Operating System Interface) Threads
*Session 8
Thread Programming
- Parameter obj menujuk ke structure dari pthread_t, digunakan untuk menyimpan id dari thread yang dibuat beserta detailnya
- Parameter attr menunjuk ke sebuah objek dari pthread_attr_t yang digunakan untuk mengatur set property khusus (Scheduling dan priority)
- Jika attr NULL, maka akan dibuat thread dengan scheduling dan property yang bersifat default
- func adalah penunjuk sebuah fungsi. (fungsi ini hanya bisa memiliki parameter void*)
- Arg adalah sebuah penunjuk void yang merepresentasikan argument yang sudah diberikan ke fungsi ketika thread dieksekusi
- Return 0 apabila eksekusi sukses
Thread Function
- pthread_self()
– Untuk memperoleh ID thread
- pthread_join()
– Untuk mengabung dan memisahkan flow control yang berbeda
– Ketika thread dipanggil, thread tersebut akan ditunda hingga eksekusi thread tujuan telah selesai
– Melepas resource (untuk mencegah zombie thread).
- pthread_exit()
- Fungsi yang mengambil sebuah pointer ke data yang dikembalikan ketika thread bergabung
Setting thread attributes
Contention Scope
- Digunakan mengatur scheduling property baik diproses atau global sistem.
Stack Size & Stack Address
- Memungkingkan programmer untuk mengatur seberapa banyak stack yang ada dan di memori mana stack itu berada
Detach State
- Membuat thread secara terpisah atau tergabung
Schedule Policy & Schedule Parameters
- Jika sistem operasi kita mendukung, maka kita dapat menguraikan scheduling yang dilakukan dalam proses di Light weight process (LWP)
* Untuk mengatur atribut objek kita harus memanggil : pthread_attr_init()
When to use threads
- Ketika ada sebuah program yang membutuhkan pengerjaan tugas secara bersamaan atau beberapa perintah yang bisa dikerjakan secara pararel untuk memperoleh hasil tugas tersebut
contoh
– Computer graphigs (ray tracing)
– Manipulasi matrix
Thanks…