Source : Operating System Concepts, 10/e by Abraham Silberschatz, Peter Baer Galvin, Greg Gagne
Kelompok 3
01 Muhammad Daffa 19082010031
Dalam desain sistem adalah menempatkan banyak komputasi core pada satu
chip pemrosesan di mana setiap inti muncul sebagai CPU terpisah ke sistem
operasi. Ini mengacu pada sistem seperti multicore dan pemrograman
multithreaded yang menyediakan mekanisme penggunaan secara lebih
efisien dari beberapa inti komputasi dan peningkatan konkurensi.
04
4.2.1 Programming Challenges
1. Mengidentifikasi tugas
Ini melibatkan pemeriksaan aplikasi untuk menemukan area yang dapat
dibagi menjadi tugas yang terpisah dan bersamaan. Idealnya, tugas
adalah independen satu sama lain dan dengan demikian dapat berjalan
secara paralel pada setiap inti.
2. Keseimbangan
Saat mengidentifikasi tugas yang dapat berjalan secara paralel, programmer
juga harus memastikan bahwa tugas melakukan pekerjaan yang sama
dengan nilai yang sama.
04
Programming Challenges
3. Pemisahan data
Sama seperti aplikasi yang dibagi menjadi tugas terpisah, file data yang
diakses dan dimanipulasi oleh tugas harus dibagi untuk dijalankan inti
secara terpisah.
4. Ketergantungan data
Data yang diakses oleh tugas harus diperiksa ketergantungan antara dua
atau lebih tugas. Saat satu tugas bergantung data dari yang lain,
programmer harus memastikan bahwa eksekusi file tugas
disinkronkan untuk mengakomodasi ketergantungan data.
5. Pengujian dan debugging
04 di beberapa core, banyak
Ketika sebuah program berjalan secara paralel
jalur eksekusi yang berbeda dimungkinkan. Pengujian dan
debugging program bersamaan seperti itu secara inheren lebih
sulit daripada pengujian dan debugging aplikasi single-
threaded.
4.2.2 Types of Parallelism
1. Paralelisme Data
Berfokus pada pendistribusian subset dari 2. Paralelisme Tugas
data yang sama di beberapa inti komputasi Tidak melibatkan distribusi data
dan melakukan operasi yang sama pada tetapi tugas (thread) di
masing-masing inti. Pertimbangkan, beberapa inti komputasi.
misalnya, menjumlahkan konten array Setiap thread melakukan
berukuran N. operasi unik. Perbedaan
Pada a sistem inti tunggal, satu thread hanya thread mungkin
akan menjumlahkan elemen [0]. . . [N - 1]. beroperasi pada data yang
Namun, pada sistem inti ganda, thread A, sama, atau mungkin beroperasi
yang berjalan pada inti 0, dapat pada data yang berbeda.
menjumlahkan elemen
[0]. . . [N ∕ 2 - 1] sementara thread 04
B, berjalan pada inti 1, dapat
menjumlahkan elemen [N ∕ 2]. . . [N - 1].
Kedua thread akan berjalan secara paralel
pada inti komputasi terpisah.
4.3 Multithreading Mode
ls
mengimplementasikan spesifikasi 04
Pthreads antara lain UNIX-
type system, termasuk
Linux dan MacOS.
4.4.2 Windows Threads
04
4.4.3 Java Threads
Thread merupakan model fundamental dari eksekusi
program di sebuah program Java, dan Bahasa Java dan API-nya
menyediakan banyak set fitur untuk membuat dan mengelola
thread. Java Threads tersedia di beberapa sistem seperti Windos,
Linux, dan MacOS.
4.4.3.1 Java Executor Framework
Dimulai dari versi 1.5 beserta API-
nya, Java memperkenalkan
beberapa fitur concurrency baru yang
menyediakan pengembang dengan
control yang jauh lebih baik
terhadap pembuatan
dan komunikasi thread. Alat ini
tersedia di java.util.concurrent
package.
Sebagai tambahan,
pendekatannya memisahkan 04
pembuatan thread dari hasil yang
mereka hasilkan, daripada
menunggu thread berakhir sebelum
dapat mengambil hasil, induk
hanya akan menunggu hasilnya
4.5 Solaris dan Manajemen SMP (Symetric Multiprocessing)
Solaris adalah salah satu sistem operasi open-source Unix yang didasarkan pada
arsitektur System V. Solaris diluncurkan oleh oracle dan dikembangkan oleh Sun
microsystem. Solaris merupakan sistem operasi yang bisa dijalankan pada perangkat
keras dengan spesifikasi X64 bit, X86 bit, dan SPARC.
04
Konsep pada Solaris
• Process
Proses pada UNIX yang mencakup ruang alamat pengguna, stack, dan proses
kontrol block.
• User-level Threads (ULT)
Implementasi dari ULT (User Level Thread) yang berhubungan dengan eksekusi
pada proses.
• Lightweight Processes (LTP)
Dilihat sebagai pemetaan antara ULT dan urutan kernel. Setiap LWP mendukung
ULT kepada urutan kernel. LWP dijadwalkan oleh kernel dan dieksekusi secara
paralel pada multiprosessor. 04
• Kernel Threads
Entitas yang bersifat fundamental yang dapat dijadwalkan dan dikirim untuk
dijalankan pada salah satu sistem prosessor.
Terjadi single ULT yang terkait dengan single LWP. Hal itu
merupakan proses yang terjadi pada proses UNIX secara
tradisional. Apabila pada proses terjadi banyak ULT yang
terkait dengan single LWP maka, menjadi rangkaian single
kernel.
OS memiliki 2 bentuk fundamental dari aktivitas Solaris menggunakan satu set kernel
konkurensi yaitu, proses dan interupsi. thread untuk menangani interupsi.
Proses (pada threads) bekerja dan mengatur Akses kontrol kernel ke struktur data
kegunaan shared data structures yang berarti, dan sinkronisasi antara thread dengan
banyak variasi primitif yang melaksanakan interupsi menggunakan primitif
eksekusi bersama - sama dan pengecualian bersama.
menyinkronkan eksekusi yang terjadi. Interupsi pada thread dianggap
Kegunaan interupsi, yaitu menyinkronkan memliki prioritas yang lebih tinggi
dengan mencegah berdasarkan waktu yang daripada semua jenis kernel thread
dihabiskan. lainnya
4.6 Thread Issues
4.6.1 Panggilan Sistem fork () dan exec()
• Jika salah satu thread dalam panggilan program fork() apakah proses baru
menduplikasi semua thread, atau apakah proses baru thread tunggal?
Beberapa UNIX sistem telah memilih untuk memiliki dua versi garpu(), satu
yang menduplikasi semua thread dan satu lagi yang hanya menduplikasi
thread yang memanggil garpu() panggilan sistem.
• Exec() system call biasanya bekerja dengan cara jika thread memanggil exec()
panggilan sistem, program yang ditentukan dalam parameter ke exec ()
akan menggantikan seluruh proses termasuk semua thread dari dua versi
garpu() untuk digunakan tergantung pada aplikasinya. Jika exec ()
dipanggil segera setelah bercabang,04maka menduplikasi semua thread
tidak diperlukan, karena program ditentukan dalam
parameter untuk exec () akan menggantikan prosesnya.
4.6.2 Signal Handling
Sebuah sinyal digunakan dalam UNIX sistem untuk memberi tahu proses
bahwa peristiwa tertentu telah terjadi. Sinyal dapat diterima baik secara
sinkron maupun asinkron, tergantung pada sumber dan alasan
acara yang diberi sinyal. Semua sinyal, baik sinkron maupun asinkron,
mengikuti pola yang sama :
1. Sebuah sinyal dihasilkan oleh terjadinya peristiwa tertentu.
2. Sinyal dikirim ke suatu proses.
3. Setelah terkirim, sinyal harus ditangani.
Contoh sinyal sinkron termasuk akses memori ilegal dan pembagian
04
dengan 0. Jika program yang berjalan melakukan salah satu dari tindakan
ini, sinyal akan dihasilkan. Ketika sinyal dibangkitkan oleh peristiwa di luar
proses yang sedang berjalan, proses itu menerima sinyal secara
tidak sinkron.
Signal Handling
Sebuah sinyal dapat ditangani oleh salah satu dari dua kemungkinan penangan:
1. Penangan sinyal default
2. Penangan sinyal yang ditentukan pengguna
Setiap sinyal memiliki penangan sinyal default yang dijalankan kernel saat menangani sinyal itu.
Tindakan default ini dapat diganti dengan penangan sinyal yang ditentukan pengguna yang dipanggil
untuk menangani sinyal. Menangani sinyal dalam program single-threaded sangatlah mudah: sinyal
selalu dikirim ke suatu proses. Namun, pengiriman sinyal lebih rumit dalam program
multithread, di mana suatu proses mungkin memiliki beberapa thread. Lalu, ke mana sinyal
harus dikirimkan?
Secara umum, opsi berikut ada:
04
1. Kirimkan sinyal ke thread tempat sinyal diterapkan.
2. Kirimkan sinyal ke setiap thread dalam proses.
3. Mengirimkan sinyal ke thread tertentu dalam proses.
4. Tetapkan thread tertentu untuk menerima semua sinyal untuk proses tersebut.
Signal Handling
Metode pengiriman sinyal tergantung pada jenis sinyal yang dihasilkan. Misalnya, sinyal sinkron
perlu dikirim ke thread yang menyebabkan sinyal dan tidak ke thread lain dalam
prosesnya. Namun, situasi dengan sinyal asinkron tidak begitu jelas. Beberapa
sinyal asinkron - seperti sinyal yang menghentikan suatu proses (<kontrol> <C>, misalnya) —
harus dikirim ke semua thread.
Standar UNIX fungsi untuk mengirimkan sinyal adalah sebagai berikut :
Fungsi ini menentukan proses (pid) ke mana sinyal tertentu (sinyal) harus dikirim. Sebagian besar
versi multithread dari UNIX memungkinkan thread menentukan sinyal mana yang akan diterima dan
yang akan diblokir. Dalam beberapa kasus, sinyal asinkron hanya dapat dikirimkan ke thread
yang tidak memblokirnya. POSIX Pthreads menyediakan fungsi berikut, yang memungkinkan sinyal
dikirim ke thread tertentu. 04
Asynchronous Procedure Calls (APCs) memungkinkan thread pengguna menentukan fungsi yang akan
dipanggil ketika thread pengguna menerima pemberitahuan tentang peristiwa tertentu. Seperti yang
ditunjukkan dengan namanya, sebuah APC secara kasar setara dengan sinyal asinkron dalam
UNIX.
4.6.3 Thread Cancellation
Pembatalan Thread melibatkan penghentian thread sebelum
selesai.Misalnya, jika beberapa thread secara bersamaan mencari melalui
database dan satu thread mengembalikan hasilnya, thread yang tersisa
mungkin dibatalkan. Situasi lain mungkin terjadi saat pengguna
menekan tombol di browser web yang menghentikan pemuatan
halaman web lebih jauh. Thread yang akan dibatalkan sering disebut
sebagai thread target. Pembatalan thread target dapat terjadi dalam
dua skenario berbeda:
1. Pembatalan asinkron.
Satu thread segera mengakhiri thread target.
2. Pembatalan yang ditangguhkan. 04
Dengan pembatalan yang ditangguhkan, sebaliknya, satu thread
menunjukkan bahwa target thread harus dibatalkan, tetapi
pembatalan hanya terjadi setelah thread target telah memeriksa
sebuah bendera untuk menentukan apakah itu harus
4.6.3 Thread Cancellation
Di Pthreads, pembatalan thread dimulai menggunakan pthread batal ()
fungsi. Pengenal thread target diteruskan sebagai parameter ke fungsi
tion. Kode berikut menggambarkan pembuatan - dan kemudian membatalkan —
thread
04
Thread Cancellation
Memohon pthread cancel () namun hanya menunjukkan permintaan untuk
membatalkan thread target; pembatalan sebenarnya bergantung pada
bagaimana thread target disiapkan untuk menangani permintaan. Saat thread
target akhirnya dibatalkan, panggilan ke pthread join () di thread cancel
kembali. Pthreads mendukung tiga mode pembatalan. Setiap mode
didefinisikan sebagai status dan tipe, seperti yang diilustrasikan pada tabel di
bawah. thread dapat menyetel status dan jenis pembatalannya menggunakan
API.
04
Thread Cancellation
Salah satu teknik untuk menetapkan titik pembatalan adalah dengan
memanggil Pthread_testcancel () fungsi. Jika ditemukan permintaan
pembatalan menunggu keputusan, panggilan ke pthread_ testcancel () tidak
akan kembali, dan thread akan berakhir. Jika tidak, panggilan ke fungsi
tersebut akan kembali, dan thread akan terus berjalan. Selain itu, Pthreads
memungkinkan fungsi yang dikenal sebagai penangan pembersihan untuk
dipanggil jika thread dibatalkan.
Sebagai contoh, Java menyediakan ThreadLocal <T> kelas dengan set() dan
dapatkan() metode untuk ThreadLocal <T> benda.
Pthreads termasuk tipe pthread key t, yang menyediakan kunci yang khusus
untuk setiap thread. Kunci ini kemudian dapat digunakan untuk
mengakses TLS data. Bahasa Microsoft C # 04 hanya perlu menambahkan atribut
penyimpanan [ThreadStatic] untuk mendeklarasikan data thread-local.
Compiler menyediakan kata kunci kelas penyimpanan
benang untuk mendeklarasikan TLS data.
4.6.5 Scheduler Activations
Sebuah aplikasi mungkin memerlukan sejumlah LWP agar berjalan efisien.
Mempertimbangkan Sebuah CPU aplikasi-bound berjalan pada satu
prosesor. Hanya dalam skenario ini satu thread dapat berjalan dalam satu
waktu, jadi satu LWP Cukup. Aplikasi I/O intensif mungkin
membutuhkan banyak LWPs untuk dieksekusi, bagaimanapun.
Biasanya, file LWP adalah diperlukan untuk setiap panggilan sistem
pemblokiran bersamaan.
Misalnya, lima permintaan baca file yang berbeda terjadi secara bersamaan.
Lima LWP dibutuhkan, karena semua bisa menunggu I/O penyelesaian di
04 empat LWPs, maka
kernel. Jika suatu proses memiliki hanya
permintaan kelima harus menunggu salah satu dari LWPs untuk
kembali dari kernel.
Scheduler Activations
Satu skema untuk komunikasi antara pustaka thread pengguna
dan kernel dikenal sebagai aktivasi penjadwal. Ia bekerja sebagai
berikut:
• Kernel pro-membuat aplikasi dengan satu set prosesor virtual
(LWPs), dan aplikasi dapat menjadwalkan thread pengguna ke
prosesor virtual yang tersedia. Selanjutnya,kernel harus
menginformasikan aplikasi tentang kejadian tertentu.
Prosedur ini dikenal sebagai upcall. Upcall ditangani oleh pustaka
thread dengan ekstensi penangan upcall, dan penangan upcall
harus dijalankan pada prosesor virtual.
Dalam skenario ini, kernel melakukan upcall ke aplikasi memberi
tahu bahwa sebuah thread akan memblokir dan mengidentifikasi
thread tertentu. Kernel kemudian mengalokasikan prosesor
virtual baru ke
penangan upcall pada prosesor 04
aplikasi. Aplikasi-kation menjalankan
virtual baru ini, yang
menyimpan file status thread pemblokiran dan melepaskan
prosesor virtual yang menjalankan thread pemblokiran.
Penangan upcall kemudian menjadwalkan thread lain yang memenuhi
syarat untuk dijalankan pada prosesor virtual baru. Ketika
peristiwa yang ditunggu oleh thread pemblokiran, kernel akan melakukan
4.7 MAC OS X GRAND CENTRAL DISPATCH
Gambar Queue
Gambar Contoh Source Code Menampilkan Queue