Assalamu'alaikum wr.wb.
Disini saya akan membahas tentang Perbedaan Tiga Masalah klasik dalam Siknronisasi Sistem Operasi, perbedaan ketiga maslaah klasik tersebut dapat dilihat dari 3 aspek, yakni :
1. Definisi
2. Jenis Masalah
3. Solusi Masalah
1. Definisi
A. Bounded-Buffer
Secara umum bounded-buffer adalah sebuah tempat penampungan data, yang ukurannya terbatas. Bounded-buffer digambarkan sebagai array yang melingkar.
Penunjuk masuk menunjuk
pada posisi kosong selanjutnya pada array. Data yang baru dihasilkan akan
dimasukkan ke dalam array yang ditunjuk oleh masuk. Sedangkan
penunjuk keluar menunjuk pada posisi penuh pertama pada array. Jika ada data yang akan dikeluarkan
dari buffer, maka data
yang akan dikeluarkan itu merupakan isi dari array yang ditunjuk oleh keluar.
B. Readers and Writers
Jika bounded-buffer adalah sebuah tempat penampungan data yang ukurannya terbatas, Sedangkan Readers and Writers Problem adalah problem yang memodelkan proses yang mengakses database. Masalah ini timbul ketika ada dua proses atau lebihberbagi data yang sama, data yang dimaksud disini bisa berbentuk buffer, file atau objek dari suatu program
C. Dining Philosopher
Sementara Dining Philosopher adalah yang memodelkan masalah enkapsulasi dari ketergantungan mesin dan masalah portabilitas.
Secara umum bounded-buffer adalah sebuah tempat penampungan data, yang ukurannya terbatas. Bounded-buffer digambarkan sebagai array yang melingkar.
Ilustrasi dari bounded-buffer
Jika bounded-buffer adalah sebuah tempat penampungan data yang ukurannya terbatas, Sedangkan Readers and Writers Problem adalah problem yang memodelkan proses yang mengakses database. Masalah ini timbul ketika ada dua proses atau lebihberbagi data yang sama, data yang dimaksud disini bisa berbentuk buffer, file atau objek dari suatu program
Sementara Dining Philosopher adalah yang memodelkan masalah enkapsulasi dari ketergantungan mesin dan masalah portabilitas.
2. Jenis Masalah
A. Bounded-Buffer
Masalah dari Bounded-Buffer sendiri tidak jauh dari penampungan data, Pada bagian ini akan dicontohkan masalah produsen dan konsumen. Hal yang dikerjakan oleh produsen adalah menghasilkan data, kemudian data itu akan ditaruh pada buffer. Karena buffer yang tersedia memiliki ukuran yang terbatas, maka akan ada kemungkinan buffer itu penuh. Ketika buffer tersebut penuh, produsen tidak dapat menaruh data pada buffer, oleh karena itu produsen akan berhenti menghasilkan data. Produsen akan menunggu sampai konsumen mengkonsumsi data dari buffer, sehingga ada array kosong bagi produsen untuk meletakkan data yang dihasilkannya. Data yang dihasilkan oleh produsen diletakkan pada array yang ditunjuk oleh masuk.
Hal yang dikerjakan oleh konsumen adalah mengkonsumsi data yang ada pada buffer. Pada suatu saat, ada kemungkinan tidak terdapat data pada buffer, sehingga konsumen tidak dapat mengkonsumsi data. Konsumen akan berhenti mengkonsumsi, dan akan menunggu sampai produsen menaruh data pada buffer. Data yang dikonsumsi oleh konsumen adalah data yang terletak pada array yang ditunjuk oleh keluar.
Jadi tugas dari produsen adalah menghasilkan data yang akan dikonsumsi oleh konsumen, sedangkan tugas dari konsumen adalah mengkonsumsi data yang dihasilkan oleh produsen.
Buffer dalam kondisi penuh ketika nilai in sama dengan nilai keluar (masuk == keluar). Buffer dalam kondisi kosong ketika ((masuk + 1) % UKURAN_BUFFER == keluar.
B. Readers and Writer
Secara singkat, masalah ini terjadi ketika ada beberapa pembaca dan penulis ingin mengakses suatu berkas pada saat bersamaan. 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. Sekiranya 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.
Kembali kepada masalah Readers/Writers, seperti yang telah dikatakan di atas bahwa inti dari permasalahan ini adalah adanya beberapa pembaca dan penulis yang ingin mengakses suatu berkas secara simultan. Sebagai syarat bahwa data yang terkandung dalam berkas tersebut tetap konsisten, maka setiap kali berkas tersebut ditulis, maka hanya ada boleh maksimal satu penulis yang menulisnya. Untuk pembaca, hal ini tidak perlu dikhawatirkan sebab membaca suatu berkas tidak mengubah isinya. Dengan kata lain, pada suatu saat diperbolehkan untuk beberapa pembaca untuk membaca berkas tersebut. Akan tetapi, ketika ada yang sedang menulis, tidak boleh ada satupun yang membaca. Ini berarti bahwa thread penulis menjalankan tugasnya secara eksklusif.
C. Dining Philosopher
A. Bounded-Buffer
Masalah dari Bounded-Buffer sendiri tidak jauh dari penampungan data, Pada bagian ini akan dicontohkan masalah produsen dan konsumen. Hal yang dikerjakan oleh produsen adalah menghasilkan data, kemudian data itu akan ditaruh pada buffer. Karena buffer yang tersedia memiliki ukuran yang terbatas, maka akan ada kemungkinan buffer itu penuh. Ketika buffer tersebut penuh, produsen tidak dapat menaruh data pada buffer, oleh karena itu produsen akan berhenti menghasilkan data. Produsen akan menunggu sampai konsumen mengkonsumsi data dari buffer, sehingga ada array kosong bagi produsen untuk meletakkan data yang dihasilkannya. Data yang dihasilkan oleh produsen diletakkan pada array yang ditunjuk oleh masuk.
Hal yang dikerjakan oleh konsumen adalah mengkonsumsi data yang ada pada buffer. Pada suatu saat, ada kemungkinan tidak terdapat data pada buffer, sehingga konsumen tidak dapat mengkonsumsi data. Konsumen akan berhenti mengkonsumsi, dan akan menunggu sampai produsen menaruh data pada buffer. Data yang dikonsumsi oleh konsumen adalah data yang terletak pada array yang ditunjuk oleh keluar.
Jadi tugas dari produsen adalah menghasilkan data yang akan dikonsumsi oleh konsumen, sedangkan tugas dari konsumen adalah mengkonsumsi data yang dihasilkan oleh produsen.
Buffer dalam kondisi penuh ketika nilai in sama dengan nilai keluar (masuk == keluar). Buffer dalam kondisi kosong ketika ((masuk + 1) % UKURAN_BUFFER == keluar.
Secara singkat, masalah ini terjadi ketika ada beberapa pembaca dan penulis ingin mengakses suatu berkas pada saat bersamaan. 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. Sekiranya 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.
Kembali kepada masalah Readers/Writers, seperti yang telah dikatakan di atas bahwa inti dari permasalahan ini adalah adanya beberapa pembaca dan penulis yang ingin mengakses suatu berkas secara simultan. Sebagai syarat bahwa data yang terkandung dalam berkas tersebut tetap konsisten, maka setiap kali berkas tersebut ditulis, maka hanya ada boleh maksimal satu penulis yang menulisnya. Untuk pembaca, hal ini tidak perlu dikhawatirkan sebab membaca suatu berkas tidak mengubah isinya. Dengan kata lain, pada suatu saat diperbolehkan untuk beberapa pembaca untuk membaca berkas tersebut. Akan tetapi, ketika ada yang sedang menulis, tidak boleh ada satupun yang membaca. Ini berarti bahwa thread penulis menjalankan tugasnya secara eksklusif.
C. Dining Philosopher
Dalam masalah Dining Philosophers,
diketahui sejumlah (N) filusuf yang hanya memiliki tiga status, berpikir,
lapar, dan makan. Semua filusuf berada di sebuah meja makan bundar yang ditata
sehingga di depan setiap filusuf ada sebuah piring berisi mie dan di antara dua
piring yang bersebelahan terdapat sebuah sumpit.
Pada awalnya, semua filusuf akan berpikir
selama waktu yang tidak tentu. Setelah berpikir lama, filusuf akan merasa
lapar. Pada saat lapar, ia berusaha untuk mengambil 2 buah sumpit yang ada di
kanan dan di kirinya untuk makan. Dia mengambil sumpitnya satu per satu. Begitu
ia mendapat sebuah sumpit, ia tidak akan melepaskannya. Jika ia hanya berhasil
mengambil kurang dari 2 sumpit, maka ia akan menunggu sampai 2 sumpit diambil.
Begitu dia mendapatkan 2 sumpit, maka dia akan makan mienya untuk sementara
waktu dan kemudian meletakkan kedua sumpitnya. Kedua sumpit ini kemudian dapat
digunakan oleh filusuf-filusuf yang lain.
Posisi meja Filsuf dengan menggunakan semafor. Setiap
sumpit mewakili sebuah semafor. Kemudian, ketika seorang filsuf lapar, maka dia
akan mencoba mengambil sumpit di kiri dan dikananya atau dengan kata lain dia
akan menunggu sampai kedua sumpit itu dapat digunakan. Setelah selesai
makan,sumpit diletakan kembali dan sinyal diberikan ke semafor sehingga filusuf
lain yang membutuhkan dapat menggunakan sumpitnya. Dan dia sendiri kemudian
kembali berpikir.
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 ke semafor sehingga
filusuf lain yang membutuhkan dapat menggunakan sumpitnya
3. Solusi Masalah
A. Bounded-Buffer
Hal yang harus diperhatikan pada proses produsen dan konsumen adalah ketika kedua proses tersebut mengakses variabel yang sama, yaitu variabel hitung. Jika diakses secara bersamaan, maka ada kemungkinan variabel hitung akan memiliki nilai yang tidak benar. Oleh karena itu harus ada sinkronisasi bagi produsen dan konsumen dalam mengakses variabel hitung.
Kita memakai 3 buah semafor untuk mensinkronisasi proses produsen dan konsumen. Semafor yang pertama adalah semafor bufferPenuh, yang menyatakan jumlah buffer yang terisi. Semafor yang kedua adalah semafor bufferKosong, yang menyatakan jumlah buffer yang masih kosong. Sedangkan semafor terakhir yang kita pakai adalah semafor mutex (mutual exclussion). Semafor mutex dipakai untuk menjamin bahwa hanya ada satu proses pada satu waktu yang dapat mengakses buffer.
Untuk buffer berukuran n, kita inisialisasi semafor bufferPenuh = 0, semafor bufferKosong = n (ukuran buffer)dan semafor mutex = 1.
Produsen menaruh item pada buffer dengan memanggil method taruh ( ), konsumen memindahkan item dari buffer dengan memanggil method ambil ( ).
B. Readers and Writers
Solusi Readers and Writers Problem untuk mengatasi masalah tersebut, ada tiga macam solusi,
yaitu :
1. Solusi dengan pembaca diprioritaskan
2. Solusi dengan penulis yang diprioritaskan
3. Solusi dengan pembaca dan penulis saling bergantian
Dari ketiga solusi tersebut, saya akan membahas solusi yang ketiga, yaitu Solusi dengan pembaca dan penulis saling bergantian(sama-sama menjadi prioritas), karena saya rasa solusi tersebut yang paling baik.
Pada solusi ini diusahakan sebuah metode yang mengakomodasi kedua belah pihak. Cara untuk melakukan ini cukup mudah yaitu dengan menerapkan metode gilir-menggilir. Sebuah penulis dapat mengakses berkas jika tidak ada thread pembaca yang sedang mengakses. Setelah selesai, thread ini memberikan giliran ke thread pembaca. Sebuah pembaca dapat mengakses berkas yang ada jika tidak ada penulis yang menunggu atau bila pada saat itu adalah giliran pembaca. Pembaca pertama yang pertama selesai mengakses berkas kemudian mengganti giliran sekarang menjadi giliran penulis.
Dengan metode giliran ini, tidak ada thread yang tertunda tanpa batas. Karena setiap syarat dari penyelesaian critical section yang baik dipenuhi, maka cara seperti ini merupakan cara yang baik untuk menyelesaikan masalah konkurensi.
C. Dining Philosopher
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.
Sekian, penjelasan tentang perbedaan Tiga Masalah klasik dalam Sinkronisasi Sistem Operasi. Sampai jumpa di postan selanjutnya.
Wassalamu'alaikum wr.wb.
A. Bounded-Buffer
Hal yang harus diperhatikan pada proses produsen dan konsumen adalah ketika kedua proses tersebut mengakses variabel yang sama, yaitu variabel hitung. Jika diakses secara bersamaan, maka ada kemungkinan variabel hitung akan memiliki nilai yang tidak benar. Oleh karena itu harus ada sinkronisasi bagi produsen dan konsumen dalam mengakses variabel hitung.
Kita memakai 3 buah semafor untuk mensinkronisasi proses produsen dan konsumen. Semafor yang pertama adalah semafor bufferPenuh, yang menyatakan jumlah buffer yang terisi. Semafor yang kedua adalah semafor bufferKosong, yang menyatakan jumlah buffer yang masih kosong. Sedangkan semafor terakhir yang kita pakai adalah semafor mutex (mutual exclussion). Semafor mutex dipakai untuk menjamin bahwa hanya ada satu proses pada satu waktu yang dapat mengakses buffer.
Untuk buffer berukuran n, kita inisialisasi semafor bufferPenuh = 0, semafor bufferKosong = n (ukuran buffer)dan semafor mutex = 1.
Produsen menaruh item pada buffer dengan memanggil method taruh ( ), konsumen memindahkan item dari buffer dengan memanggil method ambil ( ).
B. Readers and Writers
Solusi Readers and Writers Problem untuk mengatasi masalah tersebut, ada tiga macam solusi,
yaitu :
1. Solusi dengan pembaca diprioritaskan
2. Solusi dengan penulis yang diprioritaskan
3. Solusi dengan pembaca dan penulis saling bergantian
Dari ketiga solusi tersebut, saya akan membahas solusi yang ketiga, yaitu Solusi dengan pembaca dan penulis saling bergantian(sama-sama menjadi prioritas), karena saya rasa solusi tersebut yang paling baik.
Pada solusi ini diusahakan sebuah metode yang mengakomodasi kedua belah pihak. Cara untuk melakukan ini cukup mudah yaitu dengan menerapkan metode gilir-menggilir. Sebuah penulis dapat mengakses berkas jika tidak ada thread pembaca yang sedang mengakses. Setelah selesai, thread ini memberikan giliran ke thread pembaca. Sebuah pembaca dapat mengakses berkas yang ada jika tidak ada penulis yang menunggu atau bila pada saat itu adalah giliran pembaca. Pembaca pertama yang pertama selesai mengakses berkas kemudian mengganti giliran sekarang menjadi giliran penulis.
Dengan metode giliran ini, tidak ada thread yang tertunda tanpa batas. Karena setiap syarat dari penyelesaian critical section yang baik dipenuhi, maka cara seperti ini merupakan cara yang baik untuk menyelesaikan masalah konkurensi.
C. Dining Philosopher
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.
Sekian, penjelasan tentang perbedaan Tiga Masalah klasik dalam Sinkronisasi Sistem Operasi. Sampai jumpa di postan selanjutnya.
Wassalamu'alaikum wr.wb.
Tidak ada komentar:
Posting Komentar