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.