Proses bekerja sama yang dapat mempengaruhi atau dipengaruhi oleh proses
eksekusi lain dalam sistem. Proses kerjasama dapat langsung berbagi ruang
alamat logis (yaitu, kode dan data) atau diizinkan untuk berbagi data hanya
melalui file atau pesan. Kasus sebelumnya dicapai melalui penggunaan
threads. Akses yang terjadi bersamaan ke data bersama dapat mengakibatkan
inkonsistensi data. Sinkronisasi proses dibutuhkan dalam berbagai mekanisme
untuk memastikan eksekusi yang tertib dari proses kerja sama yang berbagi
ruang alamat logis, sehingga konsistensi data tetap terjaga.
Background
- Akses secara bersamaan pada data yang di-sharing mengakibatkan
data menjadi inkonsistensi
- Maintain data yang konsisten membutuhkan mekanisme untuk
memastikan bahwa eksekusi proses dari cooperating proses
dilakukan secara berurutan
- Solusi shared-memory pada problem bounded-buffer
(Consumer-Producer) memungkinkan paling banyak
n-1 item dalam buffer pada waktu yang sama.
▫ Misal kita memodifikasi code producer-consumer dengan
menambahkan variabel counter, diinisialisasi 0 dan diincrement setiap
ada item baru yang ditambahkan ke dalam buffer.
- Race condition : adalah situasi dimana beberapa proses mengakses
dan memanipulasidata bersama pada saat yang bersamaan. Nilai
akhir dari data bersama tersebut tergantung pada proses yang
terakhir selesai. • Untuk mencegah race condition proses-proses
yang berjalan bersamaan harus disinkronisasi
Synchronization Hardware
Kebanyakan sistem menyediakan dukungan hardware untuk
implementasi kode critical section• Semua solusi berikut
berdasarkan ide locking Critical section dilindungi dengan lock•
Uniprocessors – dapat dengan mematikan interrupt Kode yang
sedang berjalan dapat mengeksekusi tanpa preemption
Umumnya kurang efisien bagi sistem multiprosesor SO yang
menggunakan cara ini tidak scalable• Komputer modern
menyediakan instruksi hardware atomic khusus Atomic = non-
interruptible
Disabling Interrupt : hanya untuk uniprosesor saja
- Atomic test and set : mengembalikan parameter dan menge-set
parameter ke atomic
- Test and modify the content of a word atomicallyboolean
TestAndSet(boolean &target) {
boolean rv = target;
tqrget = true;
return rv;
}
Mutex Locks
1. Solusi-solusi sebelumnya rumit dan umumnya tidak bisa diakses oleh
programmer aplikasi
1. Perancang SO membuat alat bantu software sebagai solusi critical section
problem
2. Yang paling sederhana adalah lock mutex
3. Melindungi critical section pertama sekali dengan meng- acquire() sebuah
lock kemudian me-release() lock tersebut
1. Variabel boolean akan menyatakan apakah lock tersedia atau tidak
1. Pemanggilan acquire() dan release() harus atomic
1. Biasanya diimplementasikan dengan instruksi hardware atomic
2. Tapi solusi ini membutuhkan busy waiting
3. Karenanya lock ini disebut sebuah spinlock
Semaphores
Semaphore adalah pendekatan yang diajukan oleh Djikstra • Prinsipnya dua proses atau
lebih dapat bekerjasama dengan menggunakan penanda- penanda sederhana. • Variabel
khusus untuk penanda disebut semaphore
Sifat-sifat semaphore ▫ Dapat diinisialisasi dengan nilai non-negatif ▫ Terdapat dua operasi :
Down (Wait) dan Up (Signal) • Operasi Down dan Up adalah atomic, tak dapat diinterupsi
sebelum diselesaikan.
Semaphore – Operasi Down (Wait) • Operasi ini menurunkan menilai semaphore ▫ Jika nilai
semaphore menjadi non-positif maka proses yang mengeksekusinya di-block
Semaphore – Operasi Up (Signal)
• Operasi ini menaikkan menilai semaphore
▫ Jika satu proses atau lebih di-block pada
semaphore tidak dapat menyelesaikan operasi
Down, maka salah satu dipilih oleh sistem dan
menyelesaikan operasi Down-nya. Pemilihan
proses dilakukan secara acak.
1. Semaphore Usage
2. Semaphore Implementation
3. Deadlocks and Starvation
4. Priority Inversion
Monitors
ermasuk kumpulan prosedur, variabel dan struktur data di satu modul
atau paket khusus. Proses dapat memanggil prosedur-prosedur kapan
pun diinginkan. Tapi proses tak dapat mengakses struktur data internal
dalam monitor secara langsung. Hanya lewat prosedur-prosedur yang
dideklarasikan minitor untuk mengakses struktur internal.
Abstraksi tingkat-tinggi yang menyediakan mekanisme yang
mudah dan efektif untuk sinkronisasi proses • Abstract data
type, merupakan variabel internal yang hanya bisa diakses oleh
kode di dalam prosedur • Hanya satu proses yang boleh aktif di
dalam monitor dalam satu waktu • Tapi belum cukup ampuh
untuk memodelkan beberapa skema sinkronisasi monitor
monitor
1. Monitor Usage
2. Dining-Philosophers Solution Using Monitors
3. Implementing a Monitor Using Semaphores
4. Resuming Processes within a Monitor
Synchronization Examples
sinkronisasi atau serialisasi adalah penerapan mekanisme tertentu untuk
memastikan bahwa dua thread atau proses yang berjalan secara bersamaan tidak
mengeksekusi bagian yang sama dari sebuah program pada saat yang sama, hal ini
disebut mutual exclusion. Jika satu thread telah mulai mengerjakan bagian dari
sebuah program secara serial, yang disebut critical section, maka setiap thread lain
yang mencoba untuk mengeksekusi bagian yang sama ini harus menunggu sampai
thread pertama selesai.Critical Section Dalam pemrograman konkuren adalah
bagian dari kode yang mengakses ‘shared resource’ baik berupa struktur data atau
perangkat yang tidak boleh bersamaan diakses oleh lebih dari satu thread
eksekusi.Jika langkah-langkah sinkronisasi tersebut tidak diambil, dapat
mengakibatkan kondisi ‘perlombaan’ di mana nilai-nilai variabel menjadi tidak tidak
terduga dan tergantung pada timing dari thread atau proses konteks switch.
Deadlock: Hal ini terjadi ketika dua atau lebih proses atau thread menunggu
program yang terkunci untuk memasuki critical section, dimana program
tersebut dipegang oleh proses lain. Hal ini menyebabkan proses-proses yang
menunggu tersebut menunggu tanpa batas dan proses-proses tersebut tidak
mendapatkan kemajuan lebih lanjut.
Starvation: Dalam beberapa kasus, proses atau thread bisa memiliki waktu
tunggu tak terbatas untuk memperoleh giliran pada program yang terkunci
dan tidak pernah membuat kemajuan apapun.
Priority inversion: Dalam sistem yang memiliki fasilitas memberikan prioritas
untuk proses dan thread, tugas dengan prioritas menengah dapat mendahului
tugas prioritas yang lebih tinggi ketika menggunakan sinkronisasi sehingga
melanggar aturan sistem. Hal ini terjadi, terutama pada sistem real time yang
dapat menyebabkan tenggat waktu terlewat.
2. Synchronization in Linux
- Linux:Prior to kernel Version 2.6, disables interrupts to implement
short critical sections
- Version 2.6 and later, fully preemptive
- Linux provides:
a. semaphores
b. spin locks
3. Synchronization in Solaris
4. Pthreads Synchronization
a. mutex locks
b. condition variables
c. read-write locks
d. spin locks
Alternative Approaches
1. Transactional Memory
d) OpenMP
OpenMP adalah API untuk menulis aplikasimultithreaded(MT), berupa satu
setdirektifcompilerdanlibraryuntuk pemrograman aplikasi paralel yang
menyeder-hanakan penulisan program MT pada C, C++, dan Fortran. OpenMP
dirancanguntuk berjalan pada komputershared memory(Gambar 2.1) yang
menyediakan fiturthreading. Secara umum, banyak dipakai untuk sistem SMP
dan CPUmulti-core.Gambar 2.1: OpenMPstackpada arsitekturshared memory6.
ebagian besarconstructOpenMP berlaku untuk satu blok terstruktur.
Blokterstruktur adalah blok yang terdiri atas satu atau lebih pernyataan
dengan satutitik masuk di atas dan satu titik keluar di bawah.7
e) Functional Programming Languages
Functional programming languages offer a different
paradigm than procedural languages in that they do not
maintain state. • Variables are treated as immutable and
cannot change state once they have been assigned a value.•
There is increasing interest in functional languages such as
Erlang and Scala for their approach in handling data races.
Summary
Mengingat kumpulan proses sekuensial yang bekerja dalam waktu bersamaan yang berbagi
data, mutual exclusion harus diberikan untuk memastikan bahwa bagian penting dari kode
digunakan hanya oleh satu proses atau thread pada satu waktu. Biasanya, perangkat keras
komputer menyediakan: beberapa operasi yang memastikan mutual exclusion. Namun,
solusi berbasis perangkat keras seperti itu terlalu rumit untuk digunakan sebagian besar
pengembang. Mutex locks dan semaphore mengatasi hambatan ini. Kedua alat tersebut
dapat digunakan untuk menyelesaikan berbagai masalah sinkronisasi dan dapat
diimplementasikan secara efisien, terutama jika: dukungan perangkat keras untuk operasi
atom tersedia. Berbagai masalah sinkronisasi (the bounded-buffer problem, the readers–
writers problem, and the dining-philosophers problem) penting terutama karena mereka
adalah contoh class of concurrency-control problems. Masalah-masalah ini digunakan untuk
menguji hampir setiap usulan baru skema sinkronisasi. Sistem operasi harus menyediakan
sarana untuk menjaga dari timing errors, dan beberapa konstruksi bahasa telah diusulkan
untuk menangani masalah-masalah ini. Monitor menyediakan mekanisme sinkronisasi untuk
berbagi tipe data abstrak. Variabel kondisi menyediakan metode dimana monitor fungsi
dapat memblokir eksekusinya sampai diberi sinyal untuk melanjutkan. Sistem operasi juga
menyediakan dukungan untuk sinkronisasi. Sebagai contoh, Windows, Linux, dan Solaris
menyediakan mekanisme seperti semaphore, mutex locks, spinlock, dan variabel kondisi
untuk mengontrol akses ke data bersama. Pthreads API menyediakan dukungan untuk kunci
mutex dan semaphore, serta variabel kondisi. Beberapa pendekatan alternatif berfokus pada
sinkronisasi untuk multicore sistem. Salah satu pendekatan menggunakan memori
transaksional, yang dapat mengatasi masalah sinkronisasi menggunakan teknik perangkat
lunak atau perangkat keras. Lain pendekatan menggunakan ekstensi kompiler yang
ditawarkan oleh OpenMP. Terakhir, bahasa pemrograman fungsional mengatasi masalah
sinkronisasi dengan melarang perubahan.