Anda di halaman 1dari 9

 Pengertian sinkronisasi proses

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

 The Critical-Section Problem


1. Bagian dari program dimana shared memory diakses disebut critical
section atau critical region
- n proses berkompetisi untuk menggunakan shared data
- Masing-masing memiliki code segment,dinamakan critical section
dimana shared datadiakses
- Problem : bagaimana memastikan satu proses dieksekusi dalam
critical section, dan tidak adaproses lain yang boleh dieksekusi dalam
critical section tersebut

2. 4 kondisi solusi yang baik :


• Tidak ada dua proses secara bersamaan masukke dalam critical section
• Tidak ada asumsi mengenai kecepatan atau
jumlah CPU
• Tidak ada proses yang berjalan di luar critical
section yang dapat mem-blok proses lain
• Tidak ada proses yang menunggu selamanya
untuk masuk critical section

3. Solusi Problem Critical-Section (2)


• Mutual Exclusion. Jika proses Pi dieksekusi dalamcritical section, maka
tidak ada proses lain dapat
dieksekusi dalam critical section tersebut.
• Progress. Artinya ketika tidak ada proses yang
menggunakan critical section dan ada proses-proses
yang ingin menggunakan critical section tersebut, maka
harus ada proses yang menggunakan critical section
tersebut.
• Bounded Waiting. Maksud dari Bounded Waiting
adalah setiap proses yang menunggu menggunakan
critical section, maka proses-proses yang menunggu
tersebut dijamin suatu saat akan menggunakan critical
section. Dijamin tidak ada thread yang mengalami
starvation : proses seolah-olah berhenti, menunggu
request akses ke critical section diperbolehkan.

4. Komponen Critical Section


• Entry section : kode yang digunakan untuk
masuk ke dalam critical section.
• Critical section : kode dimana hanya ada satu
proses yang dapat dieksekusi dalam satu waktu.
• Exit section : akhir dari critical section,
mengijinkan proses lain.
• Remainder section : kode istirahat setelah masukke critical section.
Aturan Critical-Section
Solusi yang diberikan harus memenuhi
permintaan berikut :
• Mutual exclusion
• Deadlock free
• Starvation free
 Peterson’s Solution
 Peterson’s solution adalah solusi atas critical section problem yang memenuhi tiga
requirement yaitu mutual exclusion, progress, dan bounded waiting.

 Algoritma ini dapat digunakan untuk 2 atau lebih proses kongkuren


 Misal proses P0 mengubah flag[0] menjadi true, P1 tidak dapat masuk ke
critical section. Jika P1 telah berada di dalam critical section maka flag[1]
= true dan P0 terblock dan tidak masuk ke critical section.
 Deadlock dicegah. Jika P0 terblock pada looping whilenya. Yaitu saat
flag[1]=true dan turn=1. P0 dapat masuk critical section saat flag[1] =
false atau turn = 0.

Hal yang tidak mungkin terjadi pada Algoritma Peterson


• P1 tidak berminat pada critical section.
• P1 menunggu terus untuk masuk critical section. Karena jika turn=1 P1
dapat masuk critical section
• P1 memonopoli critical section. Jika P1 diwajibkan memberi P0
kesempatan dengan mengubah turn = 0 sebelum masuk critical section.

 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

 Classic Problems of Synchronization


1. The Bounded-Buffer Problem
Permasalahan : bagaimana jika dua proses berbeda, yaitu produsen dan konsumen,
berusaha mengakses buffer tersebut dalam waktu bersamaan. Producer and
Consumer are separate threads
2. The Readers –Writers Problem
Banyak reader dan writer ingin mengakses suatudatabase yang sama (masing-masing
satu thread) • Banyak reader dapat diproses secara bersamaan• Writer harus di-
sinkronisasi dengan reader danwriter yang lain ▫ Hanya satu writer pada satu waktu ! ▫
Ketika seseorang ingin menulis, harus tidak ada reader ! Tujuan : ▫ Memaksimumkan
concurrency. ▫ Mencegah starvation.
3. The Dining-Philosophers Problem
Lima filosof duduk dalam satu meja
• Satu garpu terletak diantara
masing-masing filosof
• Saat makan membutuhkan 2 garpu
• Bagaimana mencegah deadlock ?
Each philosopher is
modeled with a thread

 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.

Selain menyediakan mutual exclusion, sinkronisasi juga harus waspada terhadap


hal-hal berikut:

 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.

Sinkronisasi digunakan untuk mengontrol akses untuk menentukan tahapan


baik dalam sistem multiprocessing skala kecil seperti dalam lingkungan
multithreaded ataupun dalam komputer multiprosesor, dan dalam komputer
terdistribusi yang terdiri dari ribuan unit komputer - di bidang perbankan dan
sistem database, di server web, dan sebagainya
1. Synchronization in Windows
- Uses interrupt masks to protect access to global resources on
uniprocessor systems
- Uses spinlocks on multiprocessor systems
- Also provides dispatcher objects which may act as either mutexes
and semaphores
- Dispatcher objects may also provide events (An event acts much like
a condition variable)

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

- Implements a variety of locks to support multitasking, multithreading (including


real-time threads), and multiprocessing
- Uses adaptive mutexes for efficiency when protecting data from short code
segments
- Uses condition variables and readers-writers locks when longer sections of code
need access to data
- Uses turnstiles to order the list of threads waiting to acquire either an adaptive
mutex or reader-writer lock

4. Pthreads Synchronization

- Pthreads API is OS-independent


- It provides:

a. mutex locks

b. condition variables

- Non-portable extensions include:

c. read-write locks

d. spin locks
 Alternative Approaches
1. Transactional Memory

- Transactional memory is a model for controlling concurrent memory accesses in


the scope of parallel programming.
- In parallel programming, concurrency control ensures that threads running in
parallel do not update the same resources at the same time. Traditionally, the
concurrency control of shared memory data is through locks, for example, mutex
locks. A thread acquires a lock before modifying the shared data, and releases the
lock afterward. A lock-based synchronization can lead to some performance
issues because threads might need to wait to update lock-protected data.
- Transactional memory is an alternative to lock-based synchronization. It attempts
to simplify parallel programming by grouping read and write operations and
running them like a single operation. Transactional memory is like database
transactions where all shared memory accesses and their effects are either
committed all together or discarded as a group. All threads can enter the critical
region simultaneously. If there are conflicts in accessing the shared memory data,
threads try accessing the shared memory data again or are stopped without
updating the shared memory data. Therefore, transactional memory is also called a
lock-free synchronization. Transactional memory can be a competitive alternative
to lock-based synchronization.
- A transactional memory system must hold the following properties across the
entire execution of a concurrent program:
a) Atomicity
All speculative memory updates of a transaction are either committed or
discarded as a unit.
b) Consistency
The memory operations of a transaction take place in order. Transactions are
committed one transaction at a time.
c) Isolation
Memory updates are not visible outside of a transaction until the transaction
commits data

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.

Bahasa pemrograman fungsional menawarkan paradigma yang


berbeda dari bahasa prosedural karena mereka tidak
mempertahankan status. • Variabel diperlakukan sebagai tidak dapat
diubah dan tidak dapat berubah status setelah diberi nilai. • Ada
peningkatan minat dalam bahasa fungsional seperti Erlang dan Scala
untuk pendekatan mereka dalam menangani data race.

 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.

Anda mungkin juga menyukai