DISUSUN OLEH :
- NURSAKINAH MUHARROMMI
- SULVIA RIZKY
- VISNU CHANDRA
- MARLIANI
- DERI EKO SULISTIO
Sinkronisasi
Pengertian Sinkronisai
Sinkronisasi adalah Akses bebarengan untuk berbagi dua bersama dapat mengakibatkan
inkosistensi data. Pemeliharaan konsistensi data memerlukan mekanisme untuk
memastikan eksekusi dari proses kerjasama. Tujuan dari sinkronisasi itu sendiri
ialah untuk menghindari terjadinya inkonsitensi data karena pengaksesan oleh beberapa
proses yang berbeda serta untuk mengatur urutan jalannya proses-proses sehingga dapat
berjalan dengan baik dan sesuai apa yang di harapkan.
Manfaat Sinkronisasi
Akses - akses yang dilakukan secara bersama-sama ke data yang sama, dapat
menyebabkan data menjadi tidak konsisten.
Untuk menjaga agar data tetap konsisten, dibutuhkan mekanisme-mekanisme untuk
memastikan pemintaan ekseskusi dari proses yang bekerja.
Race Condition: Situasi dimana beberapa proses mengakses dan memanipulasi data
secara bersamaan. Nilai terakhir dari data bergantung dari proses mana yang selesai
terakhir.
Untuk menghindari Race Condition, proses-proses secara bersamaan harus
disinkronisasikan.
Perangkat Sinkronisasi
Instruksi Test and Set. Instruksi Atomik yang dapat digunakan untuk menangani
masalah critical section.
Semaphore sebuah variabel yang hanya dapat diakses oleh dua buah operasi standard
yaitu increment dan decrement
Ada dua jenis semaphore yaitu Binary Semaphore dan Counting Semaphore.
Semaphore berfungsi untuk menangani Critical Section, Alokasi Resource,
Sinkronisasi Antar Proses Monitor digunakan untuk menangani masalah yang muncul
karena pemakainan semaphore. Monitor menjamin Mutual Exclusion. Untuk
menangani masalah sinkronisasi yang lebih rumit monitor menyediakan condition
variable, JVM mengimplementasikan monitor. Monitor JVM bekerja dengn object
locking dan method – method wait() serta notify(). Monitor JVM dapat diunakan
dengan keyword synchronized.
Ada tiga hal yang selalu memjadi masalah pada proses sinkronisasi:
Problem Bounded buffer.
Problem Reades and Writer.
Problem Dining Philosophers.
Bounded buffer merupakan suatu struktur data yang mampu untuk menyimpan beberapa
nilai dan mengeluarkannya kembali ketika diperlukan . Jika dianalogikan bounded buffer
ini akan mirip dengan sebuah tumpukan piring. Kita menaruh piring dan menaruh lagi
sebuah piring, ketika ingin mengambil piring maka tumpukan yang paling atas yang akan
terambil.Jadi piring terakhir yang dimasukan akan pertama kali diambil. Solusi Bounded
– Buffer : Solusi Shared Memory untuk Bounded – Buffer, mengijinkan (n-1) items di
dalam buffer untuk suatu waktu tertentu.
Problem Readers-Writers
Problem lain yang terkenal adalah readers-writer problem yang memodelkan proses yang
mengakses database. Sebagai contoh sebuah sistem pemesanan sebuah perusahaan
penerbangan, dimana banyak proses berkompetisi berharap untuk membaca (read) dan
menulis (write). Hal ini dapat diterima bahwa banyak proses membaca database pada
saat yang sama, tetapi jika suatu proses sedang menulis database, tidak boleh ada proses
lain yang mengakses database tersebut, termasuk membaca database tersebut.
Solusi Readers and Writers Problem
Pembaca di prioritaskan
Reader tidak akan menunggu reader(s) lain yang sedang membaca, walaupun ada writer
yang sedang menunggu. Dengan katalain, Jika ada reader yang datang ketika reader lain
sedang membaca dan sebuah writer sedang menunggu, maka reader yang baru datang
tersebut akan langsung mendapat giliran untuk membaca.Writer akan ditunda
pengerjaannya.
Penulis di prioritaskan
Di mana suatu writer sedang dijalankan oleh sistem, maka tidak boleh ada reader yang
memulai untuk membaca data.
Kedua jenis proses mempunyai prioritas yang sama. Tidak ada prioritas khusus yang
diberikan kepada kedua jenis proses
Problem Dining Philosopers
Pada tahun 1965, Djikstra menyelesaikan sebuah masalah sinkronisasi yang
beliau sebut dengan dining philisophers problem. Dining philosophers dapat diuraikan
sebagai berikut: Lima orang filosuf duduk mengelilingi sebuah meja bundar. Masing-
masing filosof mempunyai sepiring spageti. Spageti-spageti tersebut sangat licin dan
membutuhkan dua garpu untuk memakannya. Diantara sepiring spageti terdapat satu
garpu. Kehidupan para filosof terdiri dari dua periode, yaitu makan atau berpikir. Ketika
seorang filosof lapar, dia berusaha untuk mendapatkan garpu kiri dan garpu kanan
sekaligus. Jika sukses dalam mengambil dua garpu, filosof tersebut makan untuk
sementara waktu, kemudian meletakkan kedua garpu dan melanjutkan berpikir.
Pertanyaan kuncinya adalah, dapatkah anda menulis program untuk masing-masing
filosof yang melakukan apa yang harus mereka lakukan dan tidak pernah mengalami
kebuntuan. Prosedur take-fork menunggu sampai garpu-garpu yang sesuai didapatkan
dan kemudian menggunakannya. Sayangnya dari solusi ini ternyata salah. Seharusnya
lima orang filosof mengambil garpu kirinya secara bersamaan. Tidak akan mungkin
mereka mengambil garpu kanan mereka, dan akan terjadi deadlock.
Solusi Waiter
Solusi Hirarki Resource: resources (garpu) di meja makan telah diberi susunan hirarki.
Setiap permintaan orang terhadap sebuah garpu harus dilakukan pada susunan tertentu,
dan dikembalikan pada susunan sebaliknya. Dalam hal ini, setiap orang dapat mengambil
garpu dimanapun diatas meja misalkan setiap garpu diberi nomor sebagai tingkat hirarki
dari 1 sampai 5, seseorang hanya dapat mengambil garpu dengan nomor yang paling
rendah, kemudian mengambil garpu yang setingkat lebih tinggi. Ketika ia hendak
mengembalikannya, orang itu harus meletakkan garpu dengan nomor yang lebih tinggi
terlebih dahulu, lalu yang rendah.
Critical Section adalah sebuah segmen kode di mana sebuah proses yang mana
sumber daya bersama diakses.
Bagaimana pun setiap kali sebuah proses mengakses shared memory atau shared berkas
atau melakukan sesuatu yang kitis akan menggiring kepada race conditions. Bagian dari
program dimana shared memory diakses disebut Critical Section atau Critical Region.
Walau pun dapat mencegah race conditions, tapi tidak cukup untuk melakukan kerjasama
antar proses secara pararel dengan baik dan efisien dalam menggunakan shared data, kita
butuh 4 kondisi agar menghasilkan solusi yang baik yakni :
Tidak ada dua proses secara bersamaan masuk ke dalam citical section.
Tidak ada asumsi mengenai kecepatan atau jumlah cpu
Tidak ada proses yang berjalan di luar critical secion yang dapat mengeblok proses
lain
Tidak ada proses yang menunggu selamamya untuk masuk critical section
Penyebab Deadlock
Mutual Exclusion : Suatu kondisi dimana setiap sumber daya diberikan tepat pada
satu proses pada suatu waktu.
Hold and Wait : Kondisi yang menyatakan proses-proses yang sedang memakai
suatu sumber daya dapat meminta sumber daya yang lain.
Circular Waiting : Kondisi yang menyatakan bahwa adanya rantai saling meminta
sumber daya yang dimiliki oleh suatu proses oleh proses lainnya.
No Preemptive : Kondisi dimana suatu sumber daya yang sedang berada pada
suatu proses tidak dapat diambil secara paksa dari proses tersebut sampai proses itu
melepaskannya.
Apabila ada salah satu dari antara 4 syarat diatas yang tidak terpenuhi,maka tidak
bisa disebut dengan Deadlock.
Cara Mengatasi Deadlock
Mengabaikan adanya deadlock.
Memastikan bahwa deadlock tidak akan pernah ada, baik dengan metode
Pencegahan, dengan mencegah empat kondisi deadlock agar tidak akan pernah
terjadi. Metode Menghindari deadlock, yaitu mengizinkan empat kondisi deadlock,
tetapi menghentikan setiap proses yang kemungkinan mencapai deadlock.
Membiarkan deadlock untuk terjadi, ini membutuhkan dua metode yang saling
mendukung, yaitu: Pendeteksian deadlock, untuk mengidentifikasi
ketika deadlock terjadi. Dan pemulihan deadlock, mengembalikan kembali sumber
daya yang dibutuhkan pada proses yang memintanya.
Pendekatan yang paling sederhana untuk mengatasi deadlock adalah dengan
menggunakan strategi burung unta: masukkan kepala dalam pasir dan seolah-olah
tidak pernah ada masalah sama sekali. Beragam pendapat muncul berkaitan dengan
strategi ini. Menurut para ahli Matematika, cara ini sama sekali tidak dapat
diterima dan semua keadaan deadlock harus ditangani. Sementara menurut para
ahli Teknik, jika komputer lebih sering mengalami kerusakkan disebabkan oleh
kegagalan hardware, error pada kompilator atau bugs pada sistem operasi. Maka
ongkos yang dibayar untuk melakukan penanganan deadlock sangatlah besar dan
lebih baik mengabaikan keadaan deadlock tersebut. Metode ini diterapkan pada
sistem operasi UNIX dan MINIX.
Cara Lain untuk mengatasi Deadlock :
Prevention : memastikan paling sedikit satu penyebab Deadlock tidak berlaku
Mutual Exclusion : membuat file spool untuk resource yang digunakan bersama
sama
Hold and Wait : memaksa sebuah proses untuk melepaskan resource
yangdimilikinya ketika meminta resource baru
Circular Waiting : memberikan penamaan resource berdasarkan urutan atau level
No Preemption : membolehkan adanya preemption
Avoidance : sistem menolak request terhadap resource yang berpotensi deadlock,
Algoritma, Banker
Resource manager menolak proses yang meminta resource yang berpotensi
deadlock
Jika ada permintaan resource yang maksimum digunakan, maka proses tersebut
akan dipaksa untuk melepaskan resource yang sudah dimiliknya.
Detection and Recovery : membiarkan Deadlock terjadi, lalu mendeteksinya,
kemudian melakukan recovery, Algoritma Ostrich
Membiarkan deadlock terjadi lalu mendeteksinya kemudian melakukan tindakan
recovery seperlunya
Algoritma yang paling dikenal adalah algoritma Ostrich
Tindakan recovery yang dilakukan adalah : melakukan preemption, membuat
checkpoint untuk rollback lalu membunuh proses yang prioritasnya kecil.
Cara Menghindari Deadlock
Kondisi Aman ( Safe State ) : Suatu keadaan dapat dinyatakan sebagai safe
state jika tidak terjadi deadlock dan terdapat cara untuk memenuhi semua
permintaan sumber daya yang ditunda tanpa menghasilkan deadlock. Dengan cara
mengikuti urutan tertentu.
Kondisi Tak Aman (Unsafe state) : Suatu state dinyatakan sebagai unsafe state
jika tidak terdapat cara untuk memenuhi semua permintaaan yang saat ini ditunda
dengan menjalankan proses-proses dengan suatu urutan
Deadlock di Linux
Linux dengan kernel versi 2.4 mengalami deadlock pada sistem dengan prosesor
lebih dari 2 unit. Deadlock ini pada umumnya terjadi bila akses melalui Ethernet
dilakukan, terutama bila melakukan teaming pada jaringan. Proses akan terblock
dan saling menunggu resource Ethernet tersebut bebas. Beberapa kasus deadlock
juga terjadi ketika OS Linux dijalankan dari kondisi sleep, proses yang mengakses
USB device akan mengalami deadlock hal ini disebabkan fungsi scheduler pada
kernel yang digunakan tidak menyimpan state sebelum sleep, sehingga ketika
kernel dijalankan kembali, Proses-proses yang mengakses USB device tersebut
menunggu giliran mengakses, sementara scheduler belum menjadwalkan masing-
masing proses. Penundaan penjadwalan sebuah proses selama tak terhingga
sementara sistem mengadakan alokasi sumber daya untuk proses yang lain.
Penyebabnya adalah prioritas. Cara mengatasinya dengan “aging” yaitu prioritaas
naik dengan bertambahnya waktu.
Model Deadlock
Urutan kejadian pengoperasian perangkat I/O adalah
meminta / request : meminta palayanan I/O
memakai / use : memakai perangkat I/O
melepaskan / release : melepaskan pamakaian perangkat I/O
Model deadlock dua proses dan dua sumber daya deadlock dapat
digambarkan sebagai graph.
Misalnya :
dua proses, P0 dan P1
dua sumber daya kritis, R0 dan R1
proses P0 dan P1 harus mengakses kedua sumber daya tersebut