SINKRONISASI DAN DEADLOCK
PADA SISTEM OPERASI
Sinkronisasi dan deadlock merupakan permasalahan
sistem operasi. Dimana jika sinkronisasi dibutuhkan untuk menghindari
terjadinya ketidak-konsistenan data akibat adanya akses data secara konkuren.
Proses-proses disebut konkuren jika proses-proses itu ada dan berjalan pada
waktu yang sama, proses-proses konkuren ini bisa bersifat independen atau bisa
juga saling berinteraksi. Prosesproses konkuren yang saling berinteraksi
memerlukan sinkronisasi agar terkendali dan juga menghasilkan output yang
benar. Dan sedangkan deadlock suatu kondisi dimana proses tidak berjalan lagi
atau tidak ada komunikasi lagi antar proses. Deadlock disebabkan karena proses
yang satu menunggu sumber daya yang sedang dipegang oleh proses lain, proses
lain itu pun sedang menunggu sumber daya yang dipegang olehnya. Dengan kata
lain setiap proses dalam set menunggu untuk sumber yang hanya dapat dikerjakan
oleh proses lain dalam set sedang
menunggu.
1. Pengertian Sinkronisasi
Sinkronisasi merupakan suatu proses pengaturan
jalannya beberapa proses pada waktu yang bersamaan untuk menyamakan waktu dan
data supaya tidak terjadi inconsitensi (ketidak konsistenan) data akibat adanya
akses data secara konkuren agar hasilnya bagus dan sesuai dengan apa yang
diharapkan.
Sinkronisasi
diperlukan untuk menghindari terjadinya ketidak-konsistenan data akibat adanya
akses data secara konkuren. Proses-proses disebut konkuren jika proses-proses
itu ada dan berjalan pada waktu yang sama, proses-proses konkuren ini bisa
bersifat independen atau bisa juga saling berinteraksi. Proses-proses konkuren
yang saling berinteraksi memerlukan sinkronisasi agar terkendali dan juga
menghasilkan output yang benar.
1.1 Race Condition
Race
condition adalah suatu kondisi dimana dua atau lebih proses mengakses shared
memory/sumber daya pada saat yang bersamaan dan hasil akhir dari data tersebut
tergantung dari proses mana yang terakhir selesai dieksekusi sehingga hasil
akhirnya terkadang tidak sesuai dengan yang dikehendaki. Kunci untuk mencegah
masalah ini dan di situasi yang lain yang melibatkan memori bersama, berkas
bersama, dan sumber daya lain yang digunakan secara bersama-sama adalah
menemukan beberapa jalan untuk mencegah lebih dari satu proses melakukan proses
tulis dan baca kepada data yang sama pada saat yang sama. Dengan kata lain,
kita membutuhkan mutual exclusion, sebuah jalan yang menjamin jika sebuah
proses sedang menggunakan variabel atau berkas yang digunakan bersama-sama,
proses lain akan dikeluarkan dari pekerjaan yang sama. Cara untuk menghindari
race condition adalah kita harus dapat menjamin bahwa jika suatu proses sedang
menjalankan critical section, maka proses lain tidak boleh masuk ke dalam
critical section tersebut.
1.2 Critical Section
Critical
section adalah segmen kode yang mengakses data yang digunakan proses secara
bersamasama yang dapat membawa proses itu ke bahaya race condition. Biasanya
sebuah proses sibuk melakukan perhitungan internal dan hal-hal lainnya tanpa
ada bahaya yang menuju ke race condition pada sebagian besar waktu. Akan
tetapi, biasanya setiap proses memiliki segmen kode dimana proses itu dapat
mengubah variabel, meng-update suatu tabel, menulis ke suatu file, dan lain-lainnya,
yang dapat membawa proses itu ke bahaya race condition.
1.3 Prasyarat Solusi
Critical Section
1. Mutual
Exclusion. Mutual Exclusion merupakan sebuah jalan yang menjamin jika sebuah
proses sedang menggunakan variabel atau berkas yang digunakan bersama-sama,
proses lain akan dikeluarkan dari pekerjaan yang sama. Misal proses Pi sedang
menjalankan critical section (dari proses Pi), maka tidak ada proses-proses
lain yang dapat menjalankan critical section dari prosesproses tersebut. Dengan
kata lain, tidak ada dua proses yang berada di critical section pada saat yang
bersamaan.
a. do {
i.
entry section
ii.
critical section
iii.
exit section
iv.
remainder section
b. } while (1);
Setiap
proses harus meminta izin untuk memasuki critical sectionnya. Bagian dari kode
yang mengimplementasikan izin ini disebut entry section. Akhir dari critical
section itu disebut exit section. Bagian kode selanjutnya disebut remainder
section. Dari kode di atas, dapat kita lihat bahwa untuk bisa memasuki critical
section sebuah proses harus melalui entry section.
2. Terjadi
kemajuan (progress). Jika tidak ada proses yang sedang menjalankan critical
section-nya dan jika terdapat lebih dari satu proses lain yang ingin masuk ke
critical section, maka hanya prosesproses yang tidak sedang menjalankan
remainder section-nya yang dapat berpartisipasi dalam memutuskan siapa yang
berikutnya yang akan masuk ke critical section, dan pemilihan siapa yang berhak
masuk ke critical section ini tidak dapat ditunda secara tak terbatas (sehingga tidak terjadi deadlock).
Ada batas waktu tunggu
(bounded waiting). Jika seandainya ada proses yang sedang menjalankan critical
section, maka terdapat batasan waktu berapa lama suatu proses lain harus
menunggu giliran untuk mengakses critical section. Dengan adanya batas waktu tunggu
akan menjamin proses dapat mengakses ke critical section (tidak mengalami
starvation: proses seolah-olah berhenti, menunggu request akses ke critical
section diperbolehkan).
Deadlock
dalam arti sebenarnya adalah kebuntuan. Kebuntuan yang dimaksud dalam sistem
operasi adalah kebuntuan proses. Jadi deadlock ialah suatu kondisi dimana
proses tidak berjalan lagi atau tidak ada komunikasi lagi antar proses.
Deadlock disebabkan karena proses yang satu menunggu sumber daya yang sedang
dipegang oleh proses lain, proses lain itu pun sedang menunggu sumber daya yang
dipegang olehnya. Dengan kata lain setiap proses dalam set menunggu untuk
sumber yang hanya dapat dikerjakan oleh proses lain dalam set sedang menunggu. Kejadian
deadlock selalu tidak lepas dari sumber daya, bahwa hampir seluruhnya merupakan
masalah sumber daya yang digunakan bersama-sama. Oleh karena itu, kita juga
perlu tahu tentang jenis sumber daya, yaitu: sumber daya dapat digunakan lagi
berulang-ulang dan sumber daya yang dapat digunakan dan habis dipakai atau
dapat dikatakan sumber daya sekali pakai.
2.1 Faktor Penyebab
Terjadinya Deadlock
Ada
empat kondisi yang dapat menyebabkan terjadinya deadlock. Keempat kondisi
tersebut tidak dapat berdiri sendiri, namun saling mendukung.
·
Mutual exclusion. Hanya ada satu proses
yang boleh memakai sumber daya, dan proses lain yang ingin memakai sumber daya
tersebut harus menunggu hingga sumber daya tadi dilepaskan atau tidak ada
proses yang memakai sumber daya tersebut.
·
Hold and wait. Proses yang sedang
memakai sumber daya boleh meminta sumber daya lagi maksudnya menunggu hingga
benar-benar sumber daya yang diminta tidak dipakai oleh proses lain, hal ini
dapat menyebabkan kelaparan sumber daya sebab dapat saja sebuah proses tidak
mendapat sumber daya dalam waktu yang lama.
·
No preemption. Sumber daya yang ada pada
sebuah proses tidak boleh diambil begitu saja oleh proses lainnya. Untuk
mendapatkan sumber daya tersebut, maka harus dilepaskan terlebih dahulu oleh
proses yang memegangnya, selain itu seluruh proses menunggu dan mempersilahkan
hanya proses yang memiliki sumber daya yang boleh berjalan.
·
Circular wait. Kondisi seperti rantai,
yaitu sebuah proses membutuhkan sumber daya yang dipegang proses berikutnya.
Ketiga
kondisi pertama merupakan syarat perlu (necessary conditions) bagi terjadinya
deadlock. Keberadaan deadlock selalu berarti terpenuhi kondisi-kondisi diatas,
tak mungkin terjadi deadlock bila tidak ada ketiga kondisi itu. Deadlock terjadi
berarti terdapat ketiga kondisi itu, tetapi adanya ketiga kondisi itu belum berarti
terjadi deadlock. Deadlock baru benar-benar terjadi bila kondisi keempat
terpenuhi. Kondisi keempat merupakan keharusan bagi terjadinya peristiwa
deadlock. Bila salah satu saja dari kondisi tidak terpenuhi maka deadlock tidak
terjadi.
2.2 Metode Menangani
Deadlock
Terdapat
tiga metode untuk menangani permasalahan deadlock yaitu :
1. Menggunakan
protocol untuk menjamin bahwa sistem tidak pernah memasuki status deadlock.
2.
Mengijinkan sistem memasuki status
deadlock dan kemudian memperbaikinya.
3. Mengabaikan
permasalahan dan seakan-akan deadlock tidak pernah terjadi pada sistem. Model
ini yang banyak digunakan pada sistem operasi termasuk UNIX.
2.2.1 Strategi Burung
Onta
Strategi
ini mengasumsikan kejadian deadlock jarang terjadi, sehingga mengabaikan
kemungkinan deadlock. Jika terjadi deadlock, maka reboot sistem. Strategi ini
berarti sama sekali tidak berusaha mengatasi deadlock.
2.2.2Mencegah Deadlock
(Deadlock Prevention)
Metode
ini berkaitan dengan pengkondisian sistem agar menghilangkan kemungkinan
terjadinya deadlock. Pencegahan merupakan solusi yang bersih dipandang dari
sudut tercegahnya deadlock. Metode ini sering menghasilkan utilisasi sumber
daya yang buruk. Pencegahan deadlock merupakan metode yang banyak dipakai. Untuk
mencegah deadlock dilakukan dengan meniadakan salah satu dari syarat perlu
sebagai berikut :
a. Mencegah Mutual
Exclusion
Mutual
exclusion benar-benar tak dapat dihindari. Hal ini dikarenakan tidak ada sumber
daya yang dapat digunakan bersama-sama, jadi sistem harus membawa sumber daya
yang tidak dapat digunakan bersamasama.
b. Mencegah Hold and
Wait
Untuk
mencegah hold and wait, sistem harus menjamin bila suatu proses meminta sumber
daya, maka proses tersebut tidak sedang memegang sumber daya yang lain. Proses
harus meminta dan dialokasikan semua sumber daya yang diperlukan sebelum proses
memulai eksekusi atau mengijinkan proses meminta sumber daya hanya jika proses
tidak membawa sumber daya lain. Model ini mempunyai utilitas sumber daya yang
rendah dan kemungkinan terjadi starvation jika proses membutuhkan sumber daya
yang popular sehingga terjadi keadaan menunggu yang tidak terbatas karena setidaknya
satu dari sumber daya yang dibutuhkannya dialokasikan untuk proses yang lain.
c. Mencegah Non
Preemption
Peniadaan
non preemption mencegah proses-proses lain harus menunggu. Seluruh proses
menjadi preemption, sehingga tidak ada tunggu menunggu. Cara mencegah kondisi
non preemption :
·
Jika suatu proses yang membawa beberapa
sumber daya meminta sumber daya lain yang tidak dapat segera dipenuhi untuk
dialokasikan pada proses tersebut, maka semua sumber daya yang sedang dibawa
proses tersebut harus dibebaskan.
·
Proses yang sedang dalam keadaan
menunggu, sumber daya yang dibawanya ditunda dan ditambahkan pada daftar sumber
daya.
·
Proses akan di-restart hanya jika dapat
memperoleh sumber daya yang lama dan sumber daya baru yang diminta.
d. Mencegah Kondisi
Menunggu Sirkular
Sistem
mempunyai total permintaan global untuk semua tipe sumber daya. Proses dapat
meminta proses kapanpun menginginkan, tapi permintaan harus dibuat terurut secara
numerik. Setiap proses yang membutuhkan sumber daya dan memintanya maka nomor
urut akan dinaikkan. Cara ini tidak akan menimbulkan siklus. Masalah yang timbul
adalah tidak ada cara pengurutan nomor sumber daya yang memuaskan semua pihak.
2.2.3Menghindari
Deadlock (Deadlock Avoidance)
Metode
alternatif untuk menghindari deadlock adalah digunakan informasi tambahan
tentang bagaimana sumber daya diminta. Misalnya pada sistem dengan satu tape
drive dan satu printer, proses P pertama meminta tape drive dan kemudian
printer sebelum melepaskan kedua sumber daya tersebut. Sebaliknya proses Q
pertama meminta printer kemudian tape drive. Dengan mengetahui urutan
permintaan dan pelepasan sumber daya untuk setiap proses, dapat diputuskan
bahwa untuk setiap permintaan apakah proses harus menunggu atau tidak. Setiap
permintaan ke sistem harus dipertimbangkan apakah sumber daya tersedia, sumber
daya sedang dialokasikan untuk proses dan permintaan kemudian serta pelepasan
oleh proses untuk menentukan apakah permintaan dapat dipenuhi atau harus menunggu
untuk menghindari deadlock. Model yang sederhana dan sangat penting dibutuhkan
adalah setiap proses menentukan jumlah maksimum sumber daya dari setiap tipe
yang mungkin diperlukan. Algoritma deadlock avoidance secara dinamis memeriksa
status sumber daya yang dialokasikan untuk menjamin tidak pernah terjadi
kondisi menunggu sirkular. Status alokasi sumber daya ditentukan oleh jumlah
sumber daya yang tersedia dan yang dialokasikan dan maksimum permintaan oleh
prosesproses.
2.2.4. Mendeteksi
Deadlock
Jika
sistem tidak menyediakan algoritma mencegah deadlock dan menghindari deadlock,
maka terjadi deadlock. Pada lingkungan ini sistem harus menyediakan :
·
Algoritma yang menguji state sistem
untuk menentukan apakah deadlock telah
terjadi.
·
Algoritma untuk memperbaiki dari
deadlock.
2.2.5 Pemulihan
Deadlock
Terdapat dua pilihan
untuk membebaskan deadlock. Satu solusi sederhana adalah dengan menghentikan
satu atau beberapa proses untuk membebaskan kondisi menunggu sirkular. Pilihan
kedua adalah menunda beberapa sumber daya dari satu atau lebih proses yang
deadlock.