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.
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.
1. Mutual Exclusion
Suatu kondisi dimana setiap sumber daya diberikan tepat pada satu proses pada
suatu waktu.
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