Akses
bebarengan untuk berbagi dua bersama dapat mengakibatkan inkosistensi data.
Pemeliharaan konsistensi data memerlukan mekanisme untuk memastikan eksekusi
dari proses kerjasama. Shared memory merupakan solusi ke masalah bounded-butter
yang mengijinkan paling banyak n-1 materi dalam buffer pada waktu yang sama.
Suatu solusi, jika semua N buffer digunakan tidaklah sederhana. Dimisalkan kita
memdifikasi producer-consumer code dengan menambahkan suatu variable counter,
dimulai dari 0 dan masing-masing waktu tambahan dari suatu item baru diberikan
kepada buffer.
Race Condition adalah situasi di mana
beberapa proses mengakses dan memanipulasi data bersama pada saat besamaan.
Nilai akhir dari data bersama tersebut tergantung pada proses yang terakhir selesai.
Untuk mencegah race condition, proses-proses yang berjalan besamaan
harus di disinkronisasi.
Dalam beberapa sistem operasi,
proses-proses yang berjalan bersamaan mungkin untuk membagi beberapa
penyimpanan umum, masing-masing dapat melakukan proses baca (read) dan
proses tulis (write). Penyimpanan bersama (shared storage)
mungkin berada di memori utama atau berupa sebuah berkas bersama, lokasi dari
memori bersama tidak merubah kealamian dari komunikasi atau masalah yang
muncul. Untuk mengetahui bagaimana komunikasi antar proses bekerja, mari kita
simak sebuah contoh sederhana, sebuah print spooler. Ketika sebuah proses ingin
mencetak sebuah berkas, proses tersebut memasukkan nama berkas ke dalam sebuah
spooler direktori yang khusus. Proses yang lain, printer daemon, secara
periodik memeriksa untuk mengetahui jika ada banyak berkas yang akan dicetak,
dan jika ada berkas yang sudah dicetak dihilangkan nama berkasnya dari
direktori.
Masalah
Critical Section
Kunci untuk mencegah masalah ini
dan di situasi yang lain yang melibatkan shared memori, shared berkas, and
shared sumber daya yang lain adalah menemukan beberapa jalan untuk mencegah
lebih dari satu proses untuk melakukan proses writing dan reading kepada shared
data pada saat yang sama. Dengan kata lain kita memutuhkan mutual
exclusion, sebuah jalan yang menjamin jika sebuah proses sedang menggunakan
shared berkas, proses lain dikeluarkan dari pekerjaan yang sama. Kesulitan yang
terjadi karena proses 2 mulai menggunakan variabel bersama sebelum proses 1
menyelesaikan tugasnya.
Masalah menghindari race
conditions dapat juga diformulasikan secara abstrak. Bagian dari
waktu, sebuah proses sedang sibuk melakukan perhitungan internal dan hal lain
yang tidak menggiring ke kondisi race conditions. Bagaimana pun
setiap kali sebuah proses mengakses shared memory atau shared berkas atau
melakukan sesuatu yang kitis akan menggiring kepada race conditions.
Bagian dari program dimana shaed memory diakses disebut Critical
Section atau Critical Region.
Walau pun dapat mencegah race
conditions, tapi tidak cukup untuk melakukan kerjasama antar proses secara
pararel dengan baik dan efisien dalam menggunakan shared data. Kita butuh 4
kondisi agar menghasilkan solusi yang baik:
Critical
Section adalah
sebuah segmen kode di mana sebuah proses yang mana sumber daya bersama diakses.
Terdiri dari:
Critical Section: Kode di mana hanya ada satu proses
yang dapat dieksekusi pada satu waktu Exit
Section: akhir dari critical section, mengizinkan proses lain Remainder Section: kode istirahat setelah masuk
ke critical section.
Solusi
ke Masalah Critical-Section
Ada
bebrapa Solusi untuk mengatasi masalah Critical Section, yaitu:
Jika
proses pi sedang mengeksekusi critical section-nya maka tidak ada proses lain
yang dapat mengeksekusi dalam critical section mereka.
Jika
tidak ada proses yang sedang dieksekusi dalam critical section dan
ada beberapa proses yang ingin masuk ke critical section mereka, maka pemilihan
proses yang akan masuk ke critical section berikutnya tidak bias ditunda.
Suatu
keterikatan harus ada pada sejumlah proses yang diijinkan masuk ke critical
section mereka, setelah adanya proses yang meminta masuk ke critical section
dan sebelum permintaan itu diterima.
a. Asumsikan
bahwa tiap proses mengeksekusi pada nonzero speed.
b. Tidak
ada asumsi mengenai kecepatan relative dan n proses.
Cara-cara
memecahkan masalah
Bakery
Algorithm
Critical
section untuk n proses:
a. Sebelum
memasuki critical Section-nya, proses menerima nomor pemilik nomor terkecil
memasuki critical section.
b. Jika
proses Pi dan Pj menerima nomor yang sama, jika i < j, maka Pi dilayani
duluan, lainnya Pj dilayani duluan (if i< j, then Pi is served first; else
Pj is served first).
c. Skema
penomoran selalu menghasilkan angka –angka yang disebutkan satu per satu, yaitu
1,2,3,3,3,3,4,5….
Semaphore
Semaphore adalah pendekatan yang
diajukan oleh Djikstra, dengan prinsip bahwa dua proses atau lebih dapat
bekerja sama dengan menggunakan penanda-penanda sederhana. Seperti proses dapat
dipaksa berhenti pada suatu saat, sampai proses mendapatkan penanda tertentu
itu. Sembarang kebutuhan koordinasi kompleks dapat dipenuhi dengan struktur
penanda yang cocok untuk kebutuhan itu. Variabel khusus untuk penanda ini
disebut semaphore.
ii. Terdapat
dua operasi terhadap semaphore, yaitu Down dan Up. Usulan asli yang disampaikan
Djikstra adalah operasi P dan V.
Operasi ini menurunkan nilai
semaphore, jika nilai semaphore menjadi non-positif maka proses yang
mengeksekusinya diblocked. Operasi
Down adalah atomic, tak dapat diinterupsi sebelaum diselesaikan.Emnurunkan
nilai, memeriksa nilai, menempatkan proses pada antrian dan memblocked sebagai
instruksi tunggal. Sejak dimulai, tak ada proses alain yang dapat mengakses
semaphore sampai operasi selesai atau diblocked.
Operasi Up menakkan nilai
semaphore. Jika satu proses atau lebih diblocked pada semaphore itu tak dapat
menyelesaikan operasi Down, maka salah satu dipilih oleh system dan
menyelesaikan operasi Down-nya. Urutan proses yang dipilih tidak ditentukan
oleh Djikstra, dapat dipilih secara acak. Adanya semaphore mempermudah persoalan mutual exclusion.
Skema penelesaian mutual exclusion mempunyai bagan sebagai berikut:
Sebelum
masuk critical section, proses melakukan Down. Bila berhasil maka
proses masuk ke critical section. Bila tidak berhasil maka proses
di-blocked atas semaphore itu. Proses yang diblocked akan dapat melanjutkan
kembali bila proses yang ada di critical section keluar dan
melakukan opersai up sehingga menjadikan proses yang diblocked ready dan
melanjutkan sehingga opersi Down-nya berhasil.
Solusi sinkronisasi ini
dikemukakan oleh Hoare pada tahun 1974. Monitor adalah kumpulan prosedur,
variabel dan struktur data di satu modul atau paket khusus. Proses dapat
memanggil prosedur-prosedur kapan pun diinginkan. Tapi proses tak dapat
mengakses struktur data internal dalam monitor secara langsung. Hanya lewat
prosedur-prosedur yang dideklarasikan minitor untuk mengakses struktur
internal.
a. Variabel-variabel
data lokal, hanya dapat diakses oleh prosedur-prosedur dala monitor dan tidak
oleh prosedur di luar monitor.
b. Hanya
satu proses yang dapat aktif di monitor pada satu saat. Kompilator harus
mengimplementasi ini(mutual exclusion).
c. Terdapat
cara agar proses yang tidak dapat berlangsung di-blocked. Menambahkan
variabel-variabel kondisi, dengan dua operasi, yaitu Wait dan Signal.
d. Wait: Ketika
prosedur monitor tidak dapat berkanjut (misal producer menemui buffer penuh)
menyebabkan proses pemanggil diblocked dan mengizinkan proses lain masuk
monitor.
e. Signal:
Proses membangunkan partner-nya yang sedang diblocked dengan signal pada
variabel kondisi yang sedang ditunggu partnernya.
g. Versi
Brinch Hansen: Setelah melakukan signal, proses segera keluar dari monitor.
Dengan memaksakan disiplin hanya
satu proses pada satu saat yang berjalan pada monitor, monitor menyediakan
fasilitas mutual exclusion. Variabel-variabel data dalam monitor hanya dapat
diakses oleh satu proses pada satu saat. Struktur data bersama dapat dilindungi
dengan menempatkannya dalam monitor. Jika data pada monitor merepresentasikan
sumber daya, maka monitor menyediakan fasilitas mutual exclusion dalam
mengakses sumber daya itu.
Tidak ada komentar:
Posting Komentar