Masalah Klasik Sinkronisasi
Pengertian Sinkronisasi
Sinkronisasi ini mengacu pada salah satu dari dua proses yang berbeda tetapi saling berkaitan satu sama lainnya. Dua proses ini merupakan sinkronisasi data dan sinkronisasi proses. Inti dari permasalahan sinkronisasi ini nantinya akan mengacu pada sebuah gagasan yang di dalamnya terdapat banyak proses yang pada titik tertentu akan bertemu, bergabung dalam rangka untuk mencapai sebuah kesepakatan ataupun komitmen untuk suatu urutan tindakan tertentu. Sinkronisasi ini mengacu pada gagasan yang menjaga beberapa salinan dari dataset yang ada dalam koherensi antara satu sama lain.
Jadi sinkronisasi itu lebih jelasnya merupakan akses secara berbarengan untuk berbagi dua bersama dalam mengakibatkan inkonsistensi data. Pemeliharaan konsistensi data memerlukan mekanisme yang tepat untuk memastikan eksekusi dari proses kerjasama. Sinkronisasi ini di butuhkan ketika menemukan sebuah kasus yang menyebabkan ketidakkonsistenan data sehingga data menjadi tidak konkuren. Jadi pada proses sinkronisasi primitif biasanya yang di gunakan adalah untuk mengimplementasikan sinkronisasi data dan proses ini di lakukan oleh fungsi lain di luar sistem utama dari sistem operasi.
Beberapa contoh masalah klasik Sinkonisasi
A. Bounded Buffer
Buffer merupakan proses pertukaran pesan-pesan yang menggunakan antrean sementara sebagai suatu penyangga. Buffer itu sendiri terdari dari 3 jenis berdasarkan kapasitasnya diantaranya buffer berkapasitas 0 (kosong), buffer berkapasitas tak hingga, dan buffer berkapasitas terbatas. Penyangga berkapasitas terbatas terssebut sering disebut sebagai bounded buffer.
Salah satu contoh dari masalah klasik bounded buffer ini adalah proses di antara produsen dan konsumen. Kendala yang dari masalah ini yaitu penjadwalan (scheduling) dan mutual exclusion (mutex) seperti konsumen harus menunggu jika ada buffer kosong, produsen harus menunggu jika buffer sedang penuh, dan hanya satu buffer yang dapat memanipulasi buffer tersebut. Dengan kata lain, terdapat samber daya yang terbatas dan produsen mengisikan (write) harus produknya ke dalam sumber daya tersebut. Sedangkan, konsumen akan mengambil (read) sumber daya yang penuh tersebut dan meninggalkannya pada sumber daya yang kosong. Kompleksitas utama dari masalah tersebut adalah menjaga perhitungan jumlah ketersediaan sumber daya yang kosong ataupun penuh.
Untuk mengatasi masalah tersebut, dibutuhkan semaphore yang berfungsi sebagai penjaga agar produsen tidak mengakses sumber daya saat buffer sedang penuh. Sebaliknya, semaphore juga akan menghalangi konsumen saat buffer kosong. Sedangkan, semaphore biner digunakan untuk menjamin mutex ketika buffer sedang diakses. Semaphore yang tidak penuh akan ditandakan oleh konsumen dan semaphore yang penuh akan diisyaratkan oleh produsen.
B. Readers and Writers
Dalam masalah sinkronisasi ini terdapat dua macam proses, yaitu pembaca (reader) dan penulis (writer). Permasalahan ini muncul saat ada beberapa pembaca dan penulis yang berbagi data yang sama atau berbagi sumber daya penyimpanan yang sama. Data yang diakses dapat berupa buffer, file, ataupun objek dari suatu program. Dalam permasalahan ini, di setiap proses yang berjalan, penulis yang melakukan kegiatan menulis hanya diperbolehkan satu penulis saja. Jika sedang ada penulis yang melakukan proses menulis, maka tidak boleh ada proses membaca. Dalam permasalahan ini diperbolehkan ada lebih dari satu pembaca yang mengakses berkas, namun jika ada penulis yang sedang mengakses berkas maka tidak boleh ada siapapun (pembaca dan penulis lain) yang mengakses berkas tersebut.
Untuk mengatasi permasalahan ini, terdapat 3 solusi yang dapat dilakukan. Pertama, solusi dengan memprioritaskan pembaca. Solusi ini tepat digunakan jika tujuan yang ingin dicapai adalah memperoleh throughput semaksimal mungkin. Solusi ini bekerja dengan lebih memprioritaskan pembaca meskipun sudah banyak writer yang mengantri. Dengan adanya solusi ini, penulis mungkin saja berada dalam antrian untuk waktu yang tak terbatas. Kedua, solusi dengan memprioritaskan penulis. Pada solusi ini, jika tidak ada yang mengaksess berkas maka penulis akan mengakses berkas dan pembaca akan dibiiarkan mengantri sampai semua penulis menyelesaikan tugasnya. Keuntungan solusi ini adalah pembaca dapat memperoleh informasi yang selau up-to-date. Namun, kedua solusi tersebut tidak memenuhi syarat bahwa setiap thread tidak boleh dibiarkan menunggu untuk waktu yang tidak terbatas. Solusi yang ketiga adalah pembaca dan penulis memperoleh prioritas yang sama secara bergantian. Pada solusi ini, penulis dan pembaca diberi giliran yang adil dalam hal pengaksesan berkas. Jika tidak ada thread pembaca yang sedang mengakses berkas, maka penulis dapat mengaksesnya. Dan jika selesai maka akan memberikan giliran pada pembaca untuk mengakses berkas. Dengan solusi ini, tidak ada thread yang menunggu dalam waktu yang tidak terbatas maka cara ini merupakan cara yang tepat untuk menyelesaikan masalah konkurensi.
C. Dining Philosopher
Dining Philosopher adalah salah satu masalah klasik sinkronisasi. Dining Philosopher digambarkan dengan 5 orang filsuf yang duduk mengelilingi sebuah meja bundar. Masing-masing filsuf memiliki 1 piring dan diantara setiap piring terdapat 1 sumpit. Di tengah meja bundar tersebut, terdapat 1 mangkuk berisi spageti. Kehidupan para filsuf terdiri dari 2 periode, yaitu makan atau berpikir. Untuk makan, seorang filsuf harus mengambil 2 sumpit di sisi kiri dan kanan dari piring yang berada di depannya, kemudian mengambil spageti di tengah meja dan memakannya. Setelah selesai makan, filsuf tersebut akan meletakkan masing-masing sumpit di tempat ia mengambilnya dan akan mulai untuk berpikir.
Masalahnya, dapatkah kita membuat program untuk masing-masing filsuf yang akan melakukan apa yang harus mereka lakukan tanpa mengalami deadlock. Jika semua filsuf mengecek secara bersamaan apakah di sisi kirinya terdapat sumpit, dan jika ada ia akan mengambil sumpit tersebut, kemudian ia akan mengecek apakah di sisi kanannya terdapat sumpit, dan jika ada ia akan mengambil sumpit tersebut. Namun karena mereka melakukannya secara bersamaan, dapat dipastikan tidak ada filsuf yang akan mendapatkan sumpit di sisi kanannya.
Solusinya adalah dengan membuat 1 filsuf yang melakukan hal yang berbeda dari filsuf lainnya. Filsuf tersebut akan memulai mengecek sumpit yang terletak disisi kanannya terlebih dahulu, jika ada maka filsuf tersebut akan mengambil sumpit di sisi kanannya dan kemudian mengecek sisi kirinya. Dengan cara ini, maka tidak akan terjadi deadlock. Solusi lain yang dapat dilakukan adalah dengan mengeluarkan 1 filsuf dari meja tersebut, sehingga dalam 1 meja akan terdapat 5 sumpit dan 4 filsuf. Namun solusi ini masih memungkinkan untuk terjadinya starvation. Kondisi ini dapat terjadi jika program memungkinkan filsuf untuk makan berulang kali yang akan menyebabkan filsuf lain tidak dapat menggunakan sumpit.
Sumber :
https://nyomanchandra.blogspot.com/2018/01/masalah-klasik-sinkronisasi-yang-kerap.html
https://www.idjurnal.com/2016/04/pengertian-sinkronisasi-sistem-operasi.html
Komentar
Posting Komentar