Sinkronisasi dan deadlock
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.
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.
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.
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.
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
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.
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.
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.
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.
Mencegah 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.
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.
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.
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.
Menghindari 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.
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.
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.
TUGAS
SINKRONISASI DAN DEADLOCK
DI SUSUSN OLEH :
NAMA : YUSEP MOCH.
YUSUP
NIM : 1606069
KELAS : INFORMATIKA A
SEKOLAH TINGGI
TEKNOLOGI GARUT (STTG)
Tidak ada komentar:
Posting Komentar