Pengertian
Sinkronisasi adalah proses pengaturan jalannya beberapa
proses pada saat yang bersamaan. tujuan utama sinkronisasi adalah menghindari
terjadinya inkonsitensi data karena pengaksesan oleh beberapa proses yang
berbeda (mutual exclusion) serta untuk mengatur urutan jalannya proses-proses
sehingga komunikasi 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.
Prinsip Kerja Call Sleep Dan Call Wake Up Pada Kasus
Produser Dan Consumer
Dua proses berbagi sebuah buffer dengan ukuran yang
tetap. Salah satunya produser, meletakkan informasi ke buffer yang lainnya.
Konsumen mengambil informasi dari buffer. Ini juga dapat digeneralisasi untuk
masalah yang memiliki m buah produsen dan n buah konsumen, tetapi kita hanya
akan memfokuskan kasus dengan satu produsen dan satu konsumen karena
diasumsikan dapat menyederhanakan solusi.
Masalah akan timbul ketika produsen ingin menaruh barang
yang baru tetapi buffer sudah penuh. Solusi untuk produsen adalah istirahat
(sleep) dan akan dibangunkan ketika konsumen telah mengambil satu atau lebih
barang dari buffer. Biasanya jika konsumen ingin mengambil barang dari buffer
dan melihat bahwa buffer sedang kosong, maka konsumen istirahat (sleep) sampai
produsen meletakkan barang pada buffer dan membangunkan (wake up) consumer.
Untuk mengetahui jumlah barang di buffer, kita
membutuhkan sebuah variabel kita namakan count. Jika jumlah maksimum dairi
barang yang dapat ditampung buffer adalah N, kode produser pertama kali akan
mencoba untuk mengetahui apakah nilai count sama dengan nilai N. Jika itu
terjadi maka produsen akan istirahat (sleep), tetapi jika nilai count tidak
sama dengan N, produsen akan terus menambahkan barang dan menaikkan nilai
count.
Sekarang mari kita kembali ke permasalahan race
condition. Ini dapat terjadi karena akses ke count tidak dipaksakan. Situasi
seperti itu mungkin dapat terjadi. Buffer sedang kosong dan konsumen baru saja
membaca count untuk melihat apakah count bernilai 0. Pada saat itu, penjadual
memutuskan untuk mengentikan proses konsumen sementara dan menjalakan produsen.
Produsen memasukkan barang ke buffer, menaikkan nilai count, dan memberitahukan
bahwa count sekarang bernilai 1. Pemikiran bahwa count baru saja bernilai 0
sehingga konsumen harus istirahat (sleep). Produsen memanggil fungsi wake up
untuk membangkitkan konsumen.
Kemungkinan
Sinkronisasi Gagal
Sayangnya, konsumen secara logika belum istirahat. Jadi
sinyal untuk membangkitkan konsumen, tidak dapat ditangkap oleh konsumen.
Ketika konsumen bekerja berikutnya, konsumen akan memeriksa nilai count yang
dibaca sebelumnya, dan mendapatkan nilai 0, kemudian konsumen istirahat (sleep)
lagi. Cepat atau lambat produsen akan mengisi buffer dan juga pergi istirahat
(sleep). Keduanya akan istirahat selamanya.
Inti permasalahannya disini adalah pesan untuk
membangkitkan sebuah proses tidak tersampaikan. Jika pesan/ sinyal ini
tersampaikan dengan baik, segalanya akan berjalan lancar.
No comments:
Post a Comment