A. Sinkronisasi
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.
1. Race Condition
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.
2. 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:
3. 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
4. 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….
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 Down
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
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.
6. Problem Klasik pada Sinkronisasi
7. Monitors
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.
B. Deadlock
Deadlock yang
mungkin dapat terjadi pada suatu proses disebabkan proses itu menunggu suatu
kejadian tertentu yang tidak akan pernah terjadi. Dua atau lebih proses
dikatakan berada dalam kondisi deadlock,
bila setiap proses yang ada menunggu suatu kejadian yang hanya dapat dilakukan
oleh proses lain dalam himpunan tersebut. Terdapat kaitan
antara overhead dari mekanisme
koreksi dan manfaat dari koreksi deadlock
itu sendiri. Pada beberapa kasus, overhead
atau ongkos yang harus dibayar untuk membuat sistem bebas deadlock menjadi hal
yang terlalu mahal dibandingkan jika mengabaikannya. Sementara pada kasus lain,
seperti pada real-time process control,
mengizinkan deadlock akan membuat
sistem menjadi kacau dan membuat sistem tersebut tidak berguna.
Contoh
berikut ini terjadi pada sebuah persimpangan jalan. Beberapa hal yang dapat
membuat deadlock pada suatu
persimpangan, yaitu:
· Sangat
memungkinkan untuk terjadinya starvation
(kondisi proses tak akan mendapatkan sumber daya).
1. Peranan Deadlock
Menurut Coffman dalam bukunya "Operating System" menyebutkan
empat syarat bagi terjadinya deadlock,
yaitu:
d. Kondisi
yang menyatakan proses-proses yang sedang memakai suatu sumber daya dapat
meminta sumber daya yang lain.
f. Kondisi
dimana suatu sumber daya yang sedang berada pada suatu proses tidak dapat
diambil secara paksa dari proses tersebut,sampai proses itu melepaskannya.
h. Kondisi
yang menyatakan bahwa adanya rantai saling meminta sumber daya yang dimiliki
oleh suatu proses oleh proses lainnya.
2. Resources-Allocation Graph
G = (V, E)
Graf berisi node and edge. Node V terdiri dari proses-proses = {P1,
P2, P3, ...} dan jenis resource. {R1,
R2, ...} Edge E adalah (Pi, Rj) atau
(Ri, Pj)
Sebuah
panah dari process ke resource menandakan proses meminta resource. Sebuah panah dari resource ke process menunjukkan sebuah instance
dari resource telah dtempatkan ke
proses. Process adalah lingkaran, resource adalah kotak; titik-titik
merepresentasikan jumlah instance
dari resource Dalam tipe. Meminta
poin-poin ke kotak, perintah datang dari titik.
Jika graf tidak berisi lingkaran, maka tidak ada proses yang deadlock. Jika
membentuk lingkaran, maka:
3. Strategi menghadapi Deadlock
b.
Memastikan bahwa deadlock tidak akan pernah ada, baik dengan metode Pencegahan,
dengan mencegah empat kondisi deadlock
agar tidak akan pernah terjadi. Metode Menghindari deadlock, yaitu mengizinkan empat kondisi deadlock, tetapi menghentikan setiap proses yang kemungkinan
mencapai deadlock.
c.
Membiarkan deadlock
untuk terjadi, pendekatan ini membutuhkan dua metode yang saling mendukung,
yaitu:
· Pemulihan
deadlock, mengembalikan kembali
sumber daya yang dibutuhkan pada proses yang memintanya.
4. Strategi Ostrich
Pendekatan
yang paling sederhana adalah dengan menggunakan strategi burung unta: masukkan
kepala dalam pasir dan seolah-olah tidak pernah ada masalah sama sekali.
Beragam pendapat muncul berkaitan dengan strategi ini. Menurut para ahli
Matematika, cara ini sama sekali tidak dapat diterima dan semua keadaan deadlock harus ditangani. Sementara
menurut para ahli Teknik, jika komputer lebih sering mengalami kerusakkan
disebabkan oleh kegagalan hardware, error pada kompilator atau bugs pada sistem operasi. Maka ongkos
yang dibayar untuk melakukan penanganan deadlock
sangatlah besar dan lebih baik mengabaikan keadaan deadlock tersebut. Metode ini diterapkan pada sistem operasi UNIX
dan MINIX.
5. Mencegah Deadlock
Metode ini
merupakan metode yang paling sering digunakan. Metode Pencegahan dianggap
sebagai solusi yang bersih dipandang dari sudut tercegahnya deadlock. Tetapi pencgahan akan
mengakibatkan kinerja utilisasi sumber daya yang buruk.
Metode
pencegahan menggunakan pendekatan dengan cara meniadakan empat syarat yang
dapat menyebabkan deadlock terjadi pada saat eksekusi Coffman (1971).
Syarat
pertama yang akan dapat ditiadakan adalah Mutual
Exclusion, jika tidak ada sumber daya yang secara khusus diperuntukkan bagi
suatu proses maka tidak akan pernah terjadi deadlock.
Namun jika membiarkan ada dua atau lebih proses mengakses sebuah sumber daya
yang sama akan menyebabkan chaos.
Langkah yang digunakan adalah dengan spooling
sumber daya, yaitu dengan mengantrikan job-job
pada antrian dan akan dilayani satu-satu.
Hal inilah yang menyebabkan mengapa syarat pertama tidak
dapat ditiadakan, jadi mutual exclusion
benar-benar tidak dapat dihilangkan.
Cara kedua
dengan meniadakan kondisi hold and wait
terlihat lebih menjanjikan. Jika suatu proses yang sedang menggunakan sumber
daya dapat dicegah agar tidak dapat menunggu sumber daya yang lain, maka deadlock dapat dicegah. Langkah yang
digunakan adalah dengan membuat proses agar meminta sumber daya yang mereka
butuhkan pada awal proses sehingga dapat dialokasikan sumber daya yang
dibutuhkan. Namun jika terdapat sumber daya yang sedang terpakai maka proses
tersebut tidak dapat memulai prosesnya.
ii. Tidak
optimalnya pengunaan sumber daya jika ada sumber daya yang digunakan hanya
beberapa waktu dan tidak digunakan tapi tetap dimiliki oleh suatu proses yang
telah memintanya dari awal.
Meniadakan syarat ketiga non
preemptive ternyata tidak lebih menjanjikan dari meniadakan syarat kedua,
karena dengan meniadakan syarat ketiga maka suatu proses dapat dihentikan
ditengah jalan. Hal ini tidak dimungkinkan karena hasil dari suatu proses yang
dihentikan menjadi tidak baik.
Cara
terakhir adalah dengan meniadakan syarat keempat circular wait. Terdapat dua pendekatan, yaitu:
i. Mengatur
agar setiap proses hanya dapat menggunakan sebuah sumber daya pada suatu waktu,
jika menginginkan sumber daya lain maka sumber daya yang dimiliki harus
dilepas.
ii. Membuat
penomoran pada proses-proses yang mengakses sumber daya. Suatu proses
dimungkinkan untuk dapat meminta sumber daya kapan pun, tetapi permintaannya
harus dibuat terurut.
Masalah
yang mungkin terjadi dengan mengatur bahwa setiap proses hanya dapat memiliki
satu proses adalah bahwa tidak semua proses hanya membutuhkan satu sumber daya,
untuk suatu proses yang kompleks dibutuhkan banyak sumber daya pada saat yang
bersamaan. Sedangkan dengan penomoran masalah yang dihadapi adalah tidak
terdapatnya suatu penomoran yang dapat memuaskan semua pihak.
Secara
ringkas pendekatan yang digunakan pada metode pencegahan deadlock dan
masalah-masalah yang menghambatnya, terangkum dalam tabel dibawah ini.
Syarat
|
Langkah
|
Kelemahan
|
Mutual Exclusion
|
Spooling sumber daya
|
Dapat menyebabkan chaos
|
Hold and Wait
|
Meminta sumber daya di awal
|
Sulit memperkirakan di awal
dan tidak optimal
|
No Pre-emptive
|
Mengambil sumber daya di
tengah proses
|
Hasil proses tidak akan
baik
|
Circular Wait
|
Penomoran permintaan sumber
daya
|
Tidak ada penomoran yang
memuaskan semua pihak
|
6. Menghindari Deadlock
Pendekatan
metode ini adalah dengan hanya memberi kesempatan ke permintaan sumber daya
yang tidak mungkin akan menyebabkan deadlock.
Metode ini memeriksa dampak pemberian akses pada suatu proses, jika pemberian
akses tidak mungkin menuju kepada deadlock,
maka sumber daya akan diberikan pada proses yang meminta. Jika tidak aman,
proses yang meminta akan di-suspend
sampai suatu waktu permintaannya aman untuk diberikan. Kondisi ini terjadi
ketika setelah sumber daya yang sebelumnya dipegang oleh proses lain telah
dilepaskan.
Kondisi
aman yang dimaksudkan selanjutnya disebut sebagai safe-state, sedangkan keadaan yang tidak memungkinkan untuk
diberikan sumber daya yang diminta disebut unsafe-state.
7. Kondisi Aman (Safe state)
Suatu
keadaan dapat dinyatakan sebagai safe
state jika tidak terjadi deadlock
dan terdapat cara untuk memenuhi semua permintaan sumber daya yang ditunda
tanpa menghasilkan deadlock. Dengan
cara mengikuti urutan tertentu.
8. Kondisi Tak Aman (Unsafe state)
Suatu state dinyatakan sebagai state tak selamat (unsafe state) jika tidak terdapat cara untuk memenuhi semua
permintaaan yang saat ini ditunda dengan menjalankan proses-proses dengan suatu
urutan.
9. Algoritma Bankir
Algoritma
penjadualan ini diungkapkan oleh Dijkstra (1965) lebih dikenal dengan nama
Algoritma Bankir. Model ini menggunakan suatu kota kecil sebagai percontohan
dengan suatu bank sebagai sistem operasi, pinjaman sebagai sumber daya dan
peminjam sebagai proses yang membutuhkan sumber daya. Deadlock akan terjadi
apabila terdapat seorang peminjam yang belum mengembalikan uangnya dan ingin
meminjam kembali, padahal uang yang belum dikembalikan tadi dibutuhkan oleh
peminjam lain yang juga belum mengembalikan uang pinjamannya.
Beberapa
kelemahan algoritma Bankir Tanenbaum (1992), Stallings (1995) dan Deitel (1990)
adalah sebagai berikut:
10. Mendeteksi Deadlock dan Memulihkan Deadlock
Metode ini
mengunakan pendekatan dengan teknik untuk menentukan apakah deadlock sedang terjadi serta
proses-proses dan sumber daya yang terlibat dalam deadlock tersebut. Setelah
kondisi deadlock dapat dideteksi,
maka langkah pemulihan dari kondisi deadlock
dapat segera dilakukan. Langkah pemulihan tersebut adalah dengan memperoleh
sumber daya yang diperlukan oleh proses-proses yang membutuhkannya. Beberapa
cara digunakan untuk mendapatkan sumber daya yang diperlukan, yaitu dengan
terminasi proses dan pre-emption
(mundur) suatu proses. Metode ini banyak digunakan pada komputer mainframe berukuran besar.
C. Kesimpulan
Untuk
mengatasi problem critical section dapat digunakan berbagai solusi software.
Namun masalah yang akan timbul dengan solusi software adalah solusi software
tidak mampu menangani masalah yang lebih berat dari critical section. Tetapi
Semaphores mampu menanganinya, terlebih jika hardware yang digunakan mendukung
maka akan memudahkan dalam menghadapi problem sinkronisasi. Berbagai
contoh klasik problem sinkronisasi berguna untuk mengecek setiap skema baru
sinkronisasi. Monitor termasuk ke dalam level tertinggi mekanisme sinkronisasi
yang berguna untuk mengkoordinir aktivitas dari banyak thread ketika mengakses
data melalui pernyataan yang telah disinkronisasi. Kondisi
deadlock akan dapat terjadi jika
terdapat dua atau lebih proses yang akan mengakses sumber daya yang sedang
dipakai oleh proses yang lainnya. Pendekatan untuk mengatasi deadlock dipakai tiga buah pendekatan,
yaitu:
Dari ketiga pendekatan diatas, dapat diturunkan menjadi empat
buah metode untuk mengatasi deadlock,
yaitu:
Namun
pada sebagian besar Sistem Operasi dewasa ini mereka lebih condong menggunakan
pendekatan untuk mengabaikan semua deadlock
yang terjadi. Silberschatz (1994) merumuskan sebuah
strategi penanggulangan deadlock terpadu yang dapat disesuaikan dengan kondisi
dan situasi yang berbeda, strateginya sendiri berbunyi:
3. Gunakan
algoritma yang paling cocok untuk suatu kelas sumber daya yang berbeda satu
dengan yang lain.
Tidak ada komentar:
Posting Komentar