Rabu, 03 Mei 2017

Classic Problem Synchronization (Masalah Klasik dalam Sinkronisasi)


Dalam menjalankan fungsinya sebagai sistem operasi, dibutuhkan interaksi antara beberapa proses yang berbeda. Interaksi tersebut bertujuan agar terjadi kesinambungan antar proses yang terjadi sehingga sistem operasi dapat berjalan sebagaimana mestinya. Interaksi tersebut dapat melalui sistem berbagi memori atau dengan cara saling berkirim pesan. Terkadang, beberapa pesan yang dikirim tidak dapat diterima seluruhnya oleh penerima dan menyebabkan informasi yang lain menjadi tidak valid, maka dibutuhkanlah sebuah mekanisme sinkronasi yang akan mengatur penerimaan dan pengiriman pesan sehingga kesalahan penerimaan pesan dapat diperkecil. Pesan yang dikirim dapat ditampung dalam penyangga sebelum diterima oleh penerima.
Terdapat 3 masalah klasik pada sinkronisasi, yaitu :
1.      Bounded Buffer problem
2.      Reader-writer problem
3.      Dining Philosopher
Untuk mengimplementasikan permasalahan sinkronisasi dapat menggunakan model yang digunakan untuk menyelesaikan ketiga permasalahan tersebut, yang akan dijelaskan di bawah ini.

Bounded Buffer Problem
Pengertian bounded buffer sendiri adalah suatu struktur data yang mampu menyimpan beberapa nilai dan mengeluarkannya kembali ketika diperlukan. Jika dianalogikan, bounded buffer ini akan mirip dengan sebuah tumpukan piring. Kita meletakkan beberapa piring menjadi sebuah tumpukan, ketika ingin mengambil kembali piring yang telah diletakkan tadi, maka tumpukan yang paling atas yang akan terambil terlebih dahulu. Jadi piring terakhir yang akan diambil adalah piring yang diletakkan pertama kali. Mirip sekali seperti Last In-First Out.
Bounded buffer problem merupakan salah satu masalah yang menerangkan sinkronisasi antara proses-proses yang berjalan secara konkuren untuk mengakses data yang sama. Dalam komputasi, masalah produsen-konsumen (juga dikenal sebagai masalah dibatasi-buffer) adalah contoh klasik dari masalah sinkronisasi multi-proses.
Masalah ini menjelaskan dua proses, produsen dan konsumen, yang berbagi umum, tetap ukuran buffer digunakan sebagai antrian. Tugas produser adalah untuk menghasilkan data, memasukkannya ke dalam buffer, dan mulai lagi. Pada saat yang bersamaan, konsumen mengkonsumsi data (yaitu mengeluarkannya dari buffer), satu bagian pada suatu waktu. Yang menjadi pokok pembahasan utama dalam masalah bounded buffer adalah bagaimana jika ada dua proses berbeda yang berusaha mengakses buffer tersebut. Salah satu proses akan memberi nilai pada buffer dan mengisi buffer. Proses yang lain akan membaca nilai dan mengosongkan buffer tersebut. Proses yang pertama biasa disebut producer sedangkan yang kedua disebut consumer. Produsen menghasilkan barang dan konsumen yang akan menggunakannya.
Jadi dapat disimpulkan bahwa pokok permasalahan bounded buffer adalah bagaimana mengatur sinkronisasi dari beberapa proses yang secara konkuren ingin mengakses buffer (mengisi dan mengosongkan buffer). Pengaturan itu dilakukan dengan menerapkan konsep semaphore yang menjamin hanya ada satu proses dalam suatu waktu yang boleh mengakses buffer sehingga tidak terjadi race condition.

Reader-Writer Problem
Masalah Readers/Writers adalah salah satu masalah sinkronisasi klasik yang sering digunakan untuk mendiskusikan dan membandingkan berbagai cara untuk menyelesaikan masalah sinkronisasi. Secara singkat, masalah ini terjadi ketika ada beberapa pembaca dan penulis ingin mengakses suatu berkas pada saat bersamaan.
Jika reader sedang mengakses data, reader-reader yang lain boleh ikut mengakses data, tapi writer harus menunggu sampai data tidak diakses oleh siapapun. Jika writer sedang mengakses data, tidak boleh ada thread lain yang mengakses data.
Salah satu contoh konkret dari permasalahan ini adalah masalah pemesanan tiket pesawat terbang. Ketika seseorang memesan tiket pesawat, dia pertama-tama harus mengecek apakah masih ada tempat yang tersisa. Apabila prosedur pemesanan tiket tersebut tidak ditangani secara hati-hati, bisa terjadi masalah ketika dia memesan tiket. Misalkan, sebelum proses pemesanan tiket selesai, ada orang lain yang memesan tiket yang sama dan lebih cepat menyelesaikan proses pemesanan tiket. Dengan demikian, tiket yang seharusnya menjadi miliknya tanpa perlu usaha berlebih, sekarang harus dia perebutkan dengan orang lain yang kebetulan mendaftar pada saat yang bersamaan. 

Dining Philosopers Problem
Dining Philosophers Problem merupakan salah satu masalah klasik dalam sinkronisasi. Dining Philosohers Problem dapat diilustrasikan sebagai berikut, terdapat lima orang filsuf yang sedang duduk mengelilingi sebuah meja makan. Terdapat lima mangkuk mie di depan masing-masing filsuf dan satu sumpit di antara masing-masing filsuf. Para filsuf menghabiskan waktu dengan berpikir (ketika kenyang) dan makan (ketika lapar). Ketika lapar, filsuf akan mengambil dua buah sumpit (di tangan kiri dan tangan kanan) dan makan. Namun adakalanya, hanya diambil satu sumpit saja. Jika ada filsuf yang mengambil dua buah sumpit, maka dua filsuf di samping filsuf yang sedang makan harus menunggu sampai sumpit ditaruh kembali. Hal ini dapat diimplementasikan dengan wait dan signal.
Tujuan dari masalah ini adalah untuk mencari cara sehingga para filusuf tidak akan pernah mati kelaparan. Hal ini juga merupakan salah satu representasi dari pengalokasian source komputer yang terbatas dengan beberapa proses sehingga dapat mengakibatkan deadlock dan starvation.
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 kepada semafor sehingga filusuf lain yang membutuhkan dapat menggunakan sumpitnya.
 
Itulah beberapa masalah yang dapat terjadi dalam proses sinkronisasi sebuah sistem operasi.

Tidak ada komentar:

Posting Komentar