Anda di halaman 1dari 4

Sinkronisasi & Deadlock

Sinkronisasi
Sinkronisasi merupakan akses bersama yang mengakibatkan inkosistensi data
yang memerlukan mekanisme untuk memastikan eksekusi dari proses kerjasama.
Sinkronisasi diperlukan untuk menghindari terjadinya ketidak-konsistenan data
akibat adanya akses data secara konkuren. Proses-proses disebut konkuren jika
proses-proses itu ada dan berjalan pada waktu yang sama, proses-proses
konkuren ini bisa bersifat independen atau bisa juga saling berinteraksi. Proses-
proses konkuren yang saling berinteraksi memerlukan sinkronisasi agar
terkendali dan juga menghasilkan output yang benar. Solusi masalah bounded-
buffer ini adalah shared memory yang mengijinkan maksimum n-1 materi dalam
buffer pada waktu yang sama. Bila semua N buffer digunakan tidak sederhana,
misal untuk memodifikasi producer-consumer code dengan menambah suatu
variable counter dimulai dari 0 dan masing-masing waktu tambahan dari suatu
item baru diberikan kepada buffer.

Tujuan utama dari sinkronisasi ini untuk menghindari terjadinya inkonsitensi data
karena pengaksesan oleh beberapa proses yang berbeda (mutual exclusion) serta
untuk mengatur urutan jalannya proses-proses sehingga dapat berjalan dengan
lancar dan terhindar dari deadlock dan starvation. Sinkronisasi umumnya
dilakukan dengan bantuan perangkat sinkronisasi. Penyelesaian terhadap masalah
ini sangat penting karena perkembangan teknologi sistem komputer menuju ke
sistem multiprocessing, terdistribusi dan paralel yang mengharuskan adanya
proses-proses kongkuren.

Sinkronisasi sederhananya adalah saling bertukar data agar memiliki jumlah


data yang sama. Tujuan utama mungkin lebih condong ke arah back-up (membuat
cadangan) tapi ada pula sinkronisasi jadwal kerja (kalender) untuk menciptakan
suatu event yang tepat secara bersamaan diantara pelaku sinkronisasi.
Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi. Nilai
akhir counter akan mengikuti eksekusi terakhir yang dilakukan komputer. Untuk
itu dibutuhkan sinkronisasi yang merupakan salah satu upaya yang dilakukan agar
proses salimg bekerja sama dieksekusi secara beraturan untuk mencegah
keadaan race condition (situasi dimana beberpapa proses mengakses dan
memanipulasi data pada waktu yang bersamaan).
Ada tiga hal yang selalu menjadi masalah klasik pada proses sinkronisasi, yaitu :

1. Problem Bounded buffer : merupakan suatu struktur data yang mampu


untuk menyimpan beberapa nilai dan mengeluarkannya kembali ketika
diperlukan
2. Problem Reades and Writer :merupakan salah satu masalah sinkronisasi
klasik yang sering digunakan untuk mendiskusikan dan membandingkan
berbagai cara untuk menyelesaikan masalah sinkronisasi
3. Problem Dining Philosophers : Masalah ini memodelkan masalah enkapsulasi
dari ketergantungan mesin dan masalah portabilitas. Dalam masalah Dining
Philosophers, diketahui sejumlah (N) filusuf yang hanya memiliki tiga
status, berpikir, lapar, dan makan. Semua filusuf berada di sebuah meja
makan bundar yang ditata sehingga di depan setiap filusuf ada sebuah
piring berisi mie dan di antara dua piring yang bersebelahan terdapat
sebuah sumpit.Salah satu solusi yang mungkin langsung terlihat adalah
dengan menggunakan semafor. Setiap sumpit mewakili sebuah semafor.
Kemudian, ketika seorang filusuf lapar, maka dia akan mencoba mengambil
sumpit di kiri dan di kanannya, atau dengan kata lain dia akan menunggu
sampai kedua sumpit tersebut dapat ia gunakan. Setelah selesai makan,
sumpit diletakkan kembali dan sinyal diberikan ke semafor sehingga
filusuf lain yang membutuhkan dapat menggunakan sumpitnya.

Deadlock
Deadlock atau pada beberapa buku disebut Deadly Embrace merupakan keadaan
dimana dua atau lebih proses saling menunggu meminta resources untuk waktu
yang tidak terbatas lamanya. Analoginya seperti pada kondisi jalan raya dimana
terjadi kemacetan parah. Deadlock adalah efek samping dari sinkronisasi, dimana
satu variabel digunakan oleh dua proses. Tidak ada yang dapat melanjutkan
proses masing-masing sampai program yang lain memberikan sumber dayanya,
tetapi tidak ada yang mengalah

Deadlock yang mungkin dapat terjadi pada suatu proses disebabkan proses itu
menunggu suatu kejadian tertentu yang tidak akan pernah terjadi. Dua atau lebih
proses dikatakan berada dalam kondisi deadlock, bila setiap proses yang ada
menunggu suatu kejadian yang hanya dapat dilakukan oleh proses lain dalam
himpunan tersebut. Kejadian Deadlock sendiri selalu tidak lepas dari sumber
daya, bahwa hampir seluruhnya merupakan masalah sumber daya yang digunakan
bersama-sama.

Menurut Coffman dalam bukunya “Operating System” menyebutkan empat syarat


bagi terjadinya deadlock, yaitu:

1. Mutual Exclusion

Suatu kondisi dimana setiap sumber daya diberikan tepat pada satu proses pada
suatu waktu.

2. Hold and Wait

Kondisi yang menyatakan proses-proses yang sedang memakai suatu sumber daya
dapat meminta sumber daya yang lain.

3. Non-pre-emptive

Kondisi dimana suatu sumber daya yang sedang berada pada suatu proses tidak
dapat diambil secara paksa dari proses tersebut,sampai proses itu
melepaskannya/selesai.

4. Circular Wait

Kondisi yang menyatakan bahwa adanya rantai saling meminta sumber daya yang
dimiliki oleh suatu proses oleh proses lainnya.

Untuk mencegah terjadinya deadlock ini dapat dilakukan dengan beberapa cara,
salah satunya adalah dengan menghinari empat syarat diatas.

Setiap masalah pasti ada cara mengatasinya. Berikut adalah beberapa cara
mengatasi masalah deadlock:
1. Cara pencegahan (prevention), yaitu mencegah terjadinya deadlock. Dalam hal
ini, penyebab deadlock harus diketahui sebelumnya kemudian memastikan bahwa
slah satu keadaan yang penting tidak akan meninmbulkan deadlock.
2. Cara penolakan/menghindari (avoidance), yaitu melakukan pendataan terhadap
proses-proses yang kira-kira akan menghabiskan sumberdaya.
3. Detection and Recovery, yaitu mendeteksi dan memperbaiki. Mendeteksi
sistem apa saja yang terlibat jika terjadi deadlock, setelah mendeteksi, sistem
diperbaiki.
4. Mengabaikan deadlock, yaitu membiarkan deadlock seolah tidak terjadi apa-
apa dan membiarkan deadlock tersebut mematikan program. Hal ini merupakan
algoritma Ostrich untuk menangani deadlock.
Pada sistem kebanyakan permintaan terhadap sumber daya dilakukan sebanyak
sekali saja. Sistem sudah harus dapat mengenali bahwa sumber daya itu aman
atau tidak (tidak terkena deadlock), setelah itu baru dialokasikan. Ada dua cara
yaitu:

1. Jangan memulai proses apa pun jika proses tersebut akan membawanya pada
kondisi deadlock, sehingga tidak mungkin terjadi deadlock karena pada saat akan
menuju deadlock, proses sudah dicegah.

2. Jangan memberi kesempatan pada suatu proses untuk meminta sumber daya
lagi jika penambahan ini akan membawa kita pada suatu keadaan deadlock. Jadi
diadakan dua kali penjagaan, yaitu saat pengalokasian awal, dijaga agar tidak
deadlock dan ditambah dengan penjagaan kedua saat suatu proses meminta
sumber daya, dijaga agar jangan sampai terjadi deadlock. Pada sistem deadlock
avoidance (penghindaran) dilakukan dengan cara memastikan bahwa program
memiliki maksimum permintaan

Anda mungkin juga menyukai