Problem Klasik pada
Sinkronisasi
Sinkronisasi adalah proses pengaturan
jalannya beberapa proses pada saat yang
bersamaan. Tujuan utama sinkronisasi adalah lebih condong ke arah back-up
(membuat cadangan, tapi ada pula sinkronisasi jadwal kerja (kalender untuk
menciptakan suatu event yang tepat secara bersamaan diantara pelaku
sinkronisasi. Sinkronisasi umumnya dilakukan dengan bantuan perangkat sinkronisasi.
Problem
Klasik Sinkronisasi dapat dibedakan menjadi 3 :
1.
Bounded –Buffer Problem
Proses kooperatif
adalah proses yang saling mempengaruhi satu sama lain. Proses kooperatif ini
dapat berbagi sumber daya secara langsung atau berbagi data melalui pertukaran
pesan. Dengan demikian perlu dilakukan sinkronisasi untuk mencegah timbulnya
data yang tidak konsisten akibat akses data secara konkuren oleh lebih dari 1
proses.
Pesan-pesan yang
dipertukarkan antar proses membutuhkan antrian sementara yang sering kita sebut
sebagai penyangga atau buffer. Buffer dapat dibagi menjadi 3
jenis sesuai kapasitasnya, yaitu buffer yang kapasitasnya
0; bufferyang kapasitasnya tak hingga; sertabuffer yang kapasitasnya
dibatasi sebanyak n. Buffer dengan kapasitas terbatas inilah yang
disebut sebagaibounded-buffer.
Bounded
buffer merupakan suatu struktur data yang mampu untuk menyimpan beberapa
nilai dan mengeluarkannya kembali ketika diperlukan . Jika dianalogikan bounded
buffer ini akan mirip dengan sebuah tumpukan piring. Kita menaruh piring dan
menaruh lagi sebuah piring, ketika ingin mengambil piring maka tumpukan yang
paling atas yang akan terambil.Jadi piring terakhir yang dimasukan akan pertama
kali diambil.
Contoh Kasus Bounded - Buffer
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.
Karena ada dua proses yang bekerja, maka harus dihindari adanya race condition. Race condition adalah situasi dimana beberapa proses mengakses dan memanipulasi data secara bersamaan. Jika hal ini terjadi maka producer akan menghasilkan dan mengisi buffer terus menerus meskipun buffer sudah penuh dan belum sempat untuk dibaca oleh consumer. Untuk menghindari race condition, kita harus dapat mesinkronisasikan proses tersebut, dengan memberikan perintah tertentu supaya hanya ada satu proses yang berjalan.
Karena ada dua proses yang bekerja, maka harus dihindari adanya race condition. Race condition adalah situasi dimana beberapa proses mengakses dan memanipulasi data secara bersamaan. Jika hal ini terjadi maka producer akan menghasilkan dan mengisi buffer terus menerus meskipun buffer sudah penuh dan belum sempat untuk dibaca oleh consumer. Untuk menghindari race condition, kita harus dapat mesinkronisasikan proses tersebut, dengan memberikan perintah tertentu supaya hanya ada satu proses yang berjalan.
Solusi Bounded – Buffer Problem
Solusi shared-memory pada problem bounded buffer memungkinkan paling banyak n-1
item dalam buffer pada waktu yang sama. Jadi, ketika buffer kosong, producer
akan mengisi buffer hingga paling banyak n-1 item dalam buffer. Jika buffer
tersebut sudah terisi n-1 item, akan terjadi proses switch sehingga consumer
akan mengosongkan buffer tersebut. Selama consumer bekerja, producer tidak
melakukan apa-apa dan menunggu hingga buffer tersebut kosong lagi. Jika buffer
tersebut sudah kosong, maka akan terjadi proses switch lagi, sementara consumer
tidak melakukan apa-apa dan menunggu hingga buffer tersebut diisi oleh
producer.
2. Readers and Writers Problem
Problem
lain yang terkenal adalah readers-writer problem yang memodelkan proses yang
mengakses database. Sebagai contoh sebuah sistem pemesanan sebuah perusahaan
penerbangan, dimana banyak proses berkompetisi berharap untuk membaca (read)
dan menulis (write). Hal ini dapat diterima bahwa banyak proses membaca
database pada saat yang sama, tetapi jika suatu proses sedang menulis database,
tidak boleh ada proses lain yang mengakses database tersebut, termasuk membaca
database tersebut.
Solusi
Readers and Writers Problem
a. Pembaca di prioritaskan
Reader
tidak akan menunggu reader(s) lain yang sedang membaca, walaupun ada writer
yang sedang menunggu. Dengan katalain, 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.
b.
Penulis di prioritaskan
Di
mana suatu writer sedang dijalankan oleh sistem, maka tidak boleh ada reader
yang memulai untuk membaca data.
c.
Kedua jenis proses mempunyai prioritas
yang sama.
Tidak ada prioritas
khusus yang diberikan kepada kedua jenis proses
3. Dining-Philosopers Problem
Pada
tahun 1965, Djikstra menyelesaikan sebuah masalah sinkronisasi yang beliau sebut
dengan dining philisophers problem. Dining philosophers dapat diuraikan sebagai
berikut: Lima orang filosuf duduk mengelilingi sebuah meja bundar.
Masing-masing filosof mempunyai sepiring spageti. Spageti-spageti tersebut
sangat licin dan membutuhkan dua garpu untuk memakannya. Diantara sepiring
spageti terdapat satu garpu. Kehidupan para filosof terdiri dari dua periode,
yaitu makan atau berpikir. Ketika seorang filosof lapar, dia berusaha untuk
mendapatkan garpu kiri dan garpu kanan sekaligus. Jika sukses dalam mengambil
dua garpu, filosof tersebut makan untuk sementara waktu, kemudian meletakkan
kedua garpu dan melanjutkan berpikir. Pertanyaan kuncinya adalah, dapatkah anda
menulis program untuk masing-masing filosof yang melakukan apa yang harus mereka
lakukan dan tidak pernah mengalami kebuntuan. Prosedur take-fork menunggu
sampai garpu-garpu yang sesuaididapatkan dan kemudian menggunakannya. Sayangnya
dari solusi ini ternyata salah. Seharusnya lima orang filosof mengambil garpu
kirinya secara bersamaan. Tidak akan mungkin mereka mengambil garpu kanan
mereka, dan akan terjadi deadlock.
Kita
dapat memodifikasi program sehingga setelah mengambil garpu kiri, program
memeriksa apakah garpu kanan meungkinkan untuk diambil. Jika garpu kanan tidak
mungkin diambil, filosof tersebut meletakkan kembali garpu kirinya, menunggu
untuk beberapa waktu, kemudia mengulangi proses yang sama. Usulan tersebut juga
salah, walau pun dengan alasan yang berbeda. Dengan sedikit nasib buruk, semua
filosof dapat memulai algoritma secara bersamaan, mengambil garpu kiri mereka,
melihat garpu kanan mereka yang tidak mungkin untuk diambil, meletakkan kembali
garpu kiri mereka, menunggu, mengambil garpu kiri mereka lagi secara bersamaan,
dan begitu seterusnya. Situasi seperti ini dimana semua program terus berjalan
secara tidak terbatas tetapi tidak ada perubahan/kemajuan yang dihasilkan
disebut starvation.
Sekarang
anda dapat berpikir “jika filosof dapat saja menunggu sebuah waktu acak sebagai
pengganti waktu yang sama setelah tidak dapat mengambil garpu kiri dan kanan,
kesempatan bahwa segala sesuatau akan berlanjut dalam kemandegan untuk beberapa
jam adalah sangat kecil.” Pemikiran seperti itu adalah benar,tapi beberapa
aplikasi mengirimkan sebuah solusi yang selalu bekerja dan tidak ada kesalahan
tidak seperti hsk nomor acak yang selalu berubah. Sebelum mulai mengambil
garpu, seorang filosof melakukan DOWN di mutex. Setelah menggantikan garpu dia
harus melakukan UP di mutex. Dari segi teori, solusi ini cukup memadai. Dari
segi praktek, solusi ini tetap memiliki masalah. Hanya ada satu filosof yang
dapat makan spageti dalam berbagai kesempatan. Dengan lima buah garpu,
seharusnya kita bisa menyaksikan dua orang filosof makan spageti pada saat
bersamaan.
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,orang 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 orang terhadap sebuah sumpit harus dilakukan pada susunan tertentu,
dan dikembalikan pada susunan sebaliknya. Dalam hal ini, setiap orang dapat
mengambil sumpit dimanapun diatas meja misalkan setiap sumpit diberi nomor
sebagai tingkat hirarki dari 1 sampai 5, seseorang hanya dapat mengambil sumpit
dengan nomor yang paling rendah, kemudian mengambil sumpit yang setingkat lebih
tinggi. Ketika ia hendak mengembalikannya, orang itu harus meletakkan sumpit
dengan nomor yang lebih tinggi terlebih dahulu, lalu yang rendah.
Tidak ada komentar:
Posting Komentar