Permasalahan klasik dalam sinkronsai
1. Bounded-Buffer Problem
Bounded-Buffer (Producer-Consumer) Problem atau Masalah Bounded Buffer adalah suatu struktur data untuk menampung (buffer) suatu nilai dimana kapasitasnya tertentu/terbatas (bounded). Masalah bounded buffer merupakan salah satu masalah yang menerangkan sinkronisasi antara proses-proses yang berjalan secara konkuren untuk mengakses data yang sama. Oleh karena itu kita banyak mengulang konsep sinkronisasi dalam membahas masalah bounded buffer ini. 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 tersebut. 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.
Ada beberapa batasan yang harus dipenuhi, antara lain :
- Barang yang dihasilkan oleh produsen terbatas
- Barang yang dipakai konsumen terbatas
- Konsumen hanya boleh menggunakan barang yang dimaksud setelah produsen menghasilkan barang dalam jumlah tertentu
- Produsen hanya boleh memproduksi barang jika konsumen sudah kehabisan barang.
Solusi untuk produsen adalah baik pergi tidur atau membuang data jika buffer penuh. Lain kali konsumen menghapus item dari buffer, itu akan memberitahu produser, yang mulai mengisi buffer lagi. Dengan cara yang sama, konsumen bisa tidur jika menemukan buffer kosong. Lain kali produser menempatkan data ke dalam buffer, itu bangun yang tidur konsumen. solusi dapat dicapai dengan sarana komunikasi antar-proses, biasanya menggunakan Semaphore. Sebuah solusi yang tidak memadai bisa mengakibatkan kebuntuan di mana kedua proses sedang menunggu untuk dibangunkan. Masalahnya juga dapat digeneralisasi untu memiliki beberapa produsen dan konsumen. Kita dapat menerapkan konsep semaphore untuk menyelesaikan masalah tersebut. Disini kita menggunakan tiga buah semaphore yaitu mutex, full dan empty. Mutex digunakan untuk menjamin hanya boleh satu proses yang berjalan mengakses buffer pada suatu waktu, awalnya dinisialisasi sebesar satu (1). Full digunakan untuk menghitung jumlah buffer yang berisi, yang pada awalnya diinisialisasi sebesar nol (0). Sedangkan empty digunakan untuk menghitung jumlah buffer yang kosong, yang awalnya dinisialisasi sebesar ukuran buffer. Berikut variabel umum :semaphore full, empty, mutex; Inisialisasi untuk variable di atas, full = 0, empty = n, mutex = 1.
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.
2. Dining-Philosophers Problem
Dining Philosophers Problem yang ditulis dan diselesaikan oleh Djikstra dapat diilustrasikan sebagai berikut, terdapat lima orang filsuf yang sedang duduk mengelilingi sebuah meja. 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. Permasalahannya adalah pada waktu yang sama, kelima filsuf tersebut dalam keadaan lapar, dan masing-masing mengambil sumpit yang ada di sebelah kanannya. Pada saat kelima filsuf tersebut ingin mengambil sumpit yang di sebelah kiri, sumpit tersebut telah digunakan oleh filsuf lainnya. Setiap filsuf saling menunggu filsuf lain untuk melepaskan sumpit, maka terjadilah deadlock.
Solusi Dining – Philosophers Problem ada dua, yakni :
A.Solusi Waiter
Solusi Waiter : solusi sederhana ini dilakukan dengan mengadakan seorang waiter yang senantiasa mengawasi penggunaan sumpit di meja makan. Ketika empat buah (dua pasang) sumpit sedang dipakai, filsuf berikutnya yang ingin memakai sumpit harus meminta izin kepada sang waiter, yang hanya dapat diberi ketika salah satu sumpit telah selesai terpakai.
B.Solusi Hierarki Resource
Solusi Hirarki Resource: resources (sumpit) di meja makan telah diberi susunan hirarki. Setiap permintaan filsuf terhadap sebuah sumpit harus dilakukan pada susunan tertentu, dan dikembalikan pada susunan sebaliknya. Dalam hal ini, setiap filsuf dapat mengambil sumpit dimanapun diatas meja. Misalkan setiap sumpit diberi nomor sebagai tingkat hirarki dari 1 sampai 5, satu filsuf hanya dapat mengambil sumpit dengan nomor yang paling rendah, kemudian mengambil sumpit yang setingkat lebih tinggi. Ketika ia hendak mengembalikannya, filsuf itu harus meletakkan sumpit dengan nomor yang lebih tinggi terlebih dahulu, lalu yang rendah.
Contoh Kasus Dining – Philosophers Problem :
Pada sebuah computer tentunya terdapat aplikasi-aplikasi yang dapat memudahkan kita untuk melakukan suatu pekerjaan. Namun disamping kemudahan yang diberikan, terdapat ancaman negative yang dapat aplikasi-aplikasi itu berikan pada computer kita jika kita tidak menggunakannya dengan benar. Suatu contoh ketika kita mengerjakan suatu tugas. Kita membuka dan menjalankan beberapa aplikasi secara bersamaan. Aplikasi yang kita gunakan misalnya ms. Word (membuka 6 file word sebagai sumber tugas), winamp untuk memainkan lagu, firefox untuk browsing internet, pidgin untuk sesekali chating, sementara itu aplikasi start up yang berjalan juga banyak dan RAM yang tersedia tidak begitu besar sehingga hal ini akan membuat computer menjalankan aplikasi itu terus-menerus jika kita tidak mematikannya. Hal ini akan membuat computer berjalan semakin lambat dan memungkinkan terjadinya starvation atau deadlock dalam beberapa waktu kemudian.
3. Readers and Writers Problem
![Readers Writers Problem using Semaphores - ProjectsGeek](https://images.projectsgeek.com/2011/04/Readers-Writers-Problem-using-Semaphores.gif)
Solusi pada permasalahan ini adalah:
- Jika terdapat satu proses menulis (mengubah) basis data, proses lain tidak boleh mengakses basis data, baik membaca atau menulis. Pada masalah ini, writers memiliki prioritas yang lebih tinggi dari pada readers. Jika ada writer yang sedang menunggu, maka tidak boleh ada reader lain yang bekerja. Writer akan memblok semua proses reading oleh readers dan melakukan proses writing. Ketika proses writing selesai, maka proses reading dapat dilanjutkan kembali oleh reader.
- Jika ada reader yang datang ketika reader lain sedang membaca dan sebuah writer sedang menunggu, maka reader yang baru datang tersebut akan langsung mendapat giliran untuk membaca. Writer akan ditunda pengerjaannya
Mungkin sekian penjelasan saya tentang masalah klasik dalam sinkronisasi, jika ada salah-salah kata dalam tulisan di atas mohon di maafkan.
Terima kasih
Video tentang penjelasan permasalahan klasik ini :
DAFTAR PUSTAKA
Komentar
Posting Komentar