Anda di halaman 1dari 33

Sinkronisasi dan Deadlock

Pendahuluan

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.
Solusi Race Condition

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 bersama-sama 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.
Ilustrasi Critical Section
Syarat Solusi Masalah Critical Section

• Mutual Exclusion
• Progress
• Bounded Waiting
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 proses-proses tersebut.
Dengan kata lain, tidak ada dua proses yang berada di critical section pada
saat yang bersamaan.
Mutual Exclusion

• Setiap proses harus meminta izin untuk memasuki critical section-nya.


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.
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 proses-proses 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 (bouded time)

• 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).
Solusi Untuk Memecahkan Critical Section

• Solusi Perangkat Lunak. Solusi ini menggunakan algoritma-algoritma


untuk mengatasi masalah critical section.
• Solusi Perangkat Keras. Solusi ini tergantung pada beberapa instruksi
mesin tertentu, misalnya dengan me-non-aktifkan interupsi, mengunci
suatu variabel tertentu atau menggunakan instruksi level mesin seperti tes
dan set.
Semaphore

• Adalah sebuah variabel bertipe integer yang selain saat inisialisasi, hanya dapat
diakses melalui dua operasi standar, yaitu increment dan decrement.
• Semafor digunakan untuk menyelesaikan masalah sinkronisasi secara umum.
• Berdasarkan jenisnya, semafor hanya bisa memiliki nilai 1 atau 0, atau lebih dari
sama dengan 0.
• Konsep semafor pertama kali diajukan idenya oleh Edsger Dijkstra pada tahun
1967.
Jenis Semaphore

• Binary semaphore . Semafor ini hanya memiliki nilai 1 atau 0. Sering juga
disebut sebagai semafor primitif
• Counting semaphore . Semafor ini memiliki nilai 0, 1, serta integer lainnya.
Banyak sistem operasi yang tidak secara langsung mengimplementasikan
semafor ini, tetapi dengan memanfaatkan binary semaphore
Fungsi Semaphore

• Mutual Exclusion
• Resource Controller
• Sinkronisasi antar proses
Keuntungan Semaphore

• dari segi programming, penanganan masalah sinkronisasi dengan semafor


umumnya rapi dan teratur, sehingga mudah untuk dibuktikan kebenarannya
• semafor diimplementasikan dalam hard code sehingga penggunaannya
bersifat portabel.
Deadlock

• Deadlock secara bahasa berarti buntu atau kebuntuan.


• Dalam definisi lebih lengkap, deadlock berarti suatu keadaan dimana sistem
seperti terhenti dikarenakan setiap proses memiliki sumber daya yang tidak
bisa dibagi dan menunggu untuk mendapatkan sumber daya yang sedang
dimiliki oleh proses lain.
• Keadaan seperti ini hanya dapat terjadi pada akses terhadap sumber daya
yang tidak bisa dibagi atau non-sharable.
Starvation

Starvation adalah keadaan dimana satu atau beberapa proses 'kelaparan'


karena terus dan terus menunggu kebutuhan sumber dayanya dipenuhi.
Namun, karena sumber daya tersebut tidak tersedia atau dialokasikan untuk
proses lain, akhirnya proses yang membutuhkan tidak bisa memilikinya.
Kondisi seperti ini merupakan akibat dari keadaan menunggu yang
berkepanjangan.
Penanganan Deadlock

• Pengabaian
• Pencegahan
• Penghindaran
• Pendeteksian dan Pemulihan
Pengabaian

Maksud dari pengabaian di sini adalah sistem mengabaikan terjadinya deadlock dan
pura-pura tidak tahu kalau deadlock terjadi. Dalam penanganan dengan cara ini
dikenal istilah ostrich algorithm. Pelaksanaan algoritma ini adalah sistem tidak
mendeteksi adanya deadlock dan secara otomatis mematikan proses atau program
yang mengalami deadlock. Kebanyakan sistem operasi yang ada mengadaptasi cara
ini untuk menangani keadaan deadlock. Cara penanganan dengan
mengabaikan deadlock banyak dipilih karena kasus deadlock tersebut jarang terjadi
dan relatif rumit dan kompleks untuk diselesaikan. Sehingga biasanya hanya
diabaikan oleh sistem untuk kemudian diselesaikan masalahnya oleh user dengan
cara melakukan terminasi dengan Ctrl+Alt+Del atau melakukan restartterhadap
komputer.
Pencegahan

Penanganan ini dengan cara mencegah terjadinya salah satu


karakteristik deadlock. Penanganan ini dilaksanakan pada saat deadlock belum
terjadi pada sistem. Intinya memastikan agar sistem tidak akan pernah berada
pada kondisi deadlock. Akan dibahas secara lebih mendalam pada bagian
selanjutnya.
Penghindaran

Menghindari keadaan deadlock. Bagian yang perlu diperhatikan oleh pembaca


adalah bahwa antara pencegahan dan penghindaran adalah dua hal yang
berbeda. Pencegahan lebih kepada mencegah salah satu dari empat
karakteristik deadlock terjadi, sehingga deadlock pun tidak terjadi. Sedangkan
penghindaran adalah memprediksi apakah tindakan yang diambil sistem,
dalam kaitannya dengan permintaan proses akan sumber daya, dapat
mengakibatkan terjadi deadlock. Akan dibahas secara lebih mendalam pada
bagian selanjutnya.
Pendeteksian dan Pemulihan

Pada sistem yang sedang berada pada kondisi deadlock, tindakan yang harus
diambil adalah tindakan yang bersifat represif. Tindakan tersebut adalah
dengan mendeteksi adanya deadlock, kemudian memulihkan kembali sistem.
Proses pendeteksian akan menghasilkan informasi apakah sistem
sedang deadlock atau tidak serta proses mana yang mengalami deadlock. Akan
dibahas secara lebih mendalam pada bagian selanjutnya.
Pencegahan Deadlock

• Mutual Exclusion
• Hold and Wait
• No Preemption
• Circular Wait
Pencegahan Kondisi Mutual Exclusion

Kondisi mutual exclusion pada sumber daya adalah sesuatu yang wajar terjadi,
yaitu pada sumber daya yang tidak dapat dibagi (non-sharable). Sedangkan
pada sumber daya yang bisa dibagi tidak ada istilah mutual exclusive. Jadi,
pencegahan kondisi yang pertama ini sulit karena memang sifat dasar dari
sumber daya yang tidak dapat dibagi.
Pencegahan Kondisi Hold and Wait

Untuk kondisi yang kedua, sistem perlu memastikan bahwa setiap kali proses
meminta sumber daya, ia tidak sedang memiliki sumber daya lain. Atau bisa
dengan proses meminta dan mendapatkan sumber daya yang dimilikinya
sebelum melakukan eksekusi, sehingga tidak perlu menunggu.
Pencegahan Kondisi No Preemption

Pencegahan kondisi ini dengan cara membolehkan terjadinya preemption.


Maksudnya bila ada proses yang sedang memiliki sumber daya dan ingin
mendapatkan sumber daya tambahan, namun tidak bisa langsung
dialokasikan, maka akan preempted. Sumber daya yang dimiliki proses tadi
akan diberikan pada proses lain yang membutuhkan dan sedang menunggu.
Proses akan mengulang kembali eksekusinya setelah mendapatkan semua
sumber daya yang dibutuhkannya, termasuk sumber daya yang dimintanya
terakhir.
Pencegahan Kondisi Circular Wait

Kondisi 'lingkaran setan' ini dapat 'diputus' dengan jalan menentukan total
kebutuhan terhadap semua tipe sumber daya yang ada. Selain itu, digunakan
pula mekanisme enumerasi terhadap tipe-tipe sumber daya yang ada. Setiap
proses yang akan meminta sumber daya harus meminta sumber daya dengan
urutan yang menaik. Misalkan sumber daya printer memiliki nomor 1
sedangkan CD-ROM memiliki nomor 3. Proses boleh melakukan permintaan
terhadap printer dan kemudian CD-ROM, namun tidak boleh sebaliknya.
Penghindaran Deaclock

• Tiap proses memberitahu jumlah kebutuhan maksimum untuk setiap tipe sumber daya
yang ada.
• Terdapat deadlock-avoidance algorithm yang secara rutin memeriksa state dari sistem
untuk memastikan tidak adanya kondisi circular wait serta sistem berada pada kondisi safe
state. Safe state adalah suatu kondisi dimana semua proses mendapatkan sumber daya
yang dimintanya dengan sumber daya yang tersedia. Apabila tidak bisa langsung, ia harus
menunggu selama waktu tertentu, kemudian mendapatkan sumber daya yang diinginkan,
melakukan eksekusi, dan terakhir melepas kembali sumber daya tersebut.
• Terdapat dua jenis algoritma penghindaran yaitu resource-allocation graph untuk single
instances resources serta banker's algorithm untukmultiple instances resources.
Pendeteksian Deadlock

Mekanisme pendeteksian adalah dengan menggunakan detection


algorithm yang akan memberitahu sistem mengenai proses mana saja yang
terkena deadlock. Setelah diketahui proses mana saja yang terlibat
dalam deadlock, selanjutnya adalah dengan menjalankan mekanisme
pemulihan sistem yang akan dibahas pada bagian selanjutnya.
Pemulihan Deadlock

• Terminasi Proses
• Rollback and Restart
Terminasi Proses

Pemulihan sistem dapat dilakukan dengan cara melalukan terminasi terhadap semua proses
yang terlibat dalam deadlock. Dapat pula dilakukan terminasi terhadap proses yang terlibat
dalam deadlock secara satu per satu sampai 'lingkaran setan' atau circular wait hilang. Seperti
diketahui bahwa circular wait adalah salah satu karakteristik terjadinya deadlock dan
merupakan kesatuan dengan tiga karakteristik yang lain. Untuk itu, dengan menghilangkan
kondisi circular wait dapat memulihkan sistem dari deadlock.Dalam melakukan terminasi
terhadap proses yang deadlock, terdapat beberapa faktor yang menentukan proses mana
yang akan diterminasi. Faktor pertama adalah prioritas dari proses-proses yang
terlibat deadlock. Faktor kedua adalah berapa lama waktu yang dibutuhkan untuk eksekusi
dan waktu proses menunggu sumber daya. Faktor ketiga adalah berapa banyak sumber daya
yang telah dihabiskan dan yang masih dibutuhkan. Terakhir, faktor utilitas dari proses pun
menjadi pertimbangan sistem untuk melakukan terminasi pada suatu proses.
Rollback and Restart

Dalam memulihkan keadaan sistem yang deadlock, dapat dilakukan dengan


cara sistem melakukan preempt terhadap sebuah proses dan kembali
ke state yang aman. Pada keadaan safe state tersebut, proses masih berjalan
dengan normal, sehingga sistem dapat memulai proses dari posisi aman
tersebut. Untuk menentukan pada saat apa proses akan rollback, tentunya ada
faktor yang menentukan. Diusahakan untuk meminimalisasi kerugian yang
timbul akibat memilih suatu proses menjadi korban. Harus pula dihindari
keadaan dimana proses yang sama selalu menjadi korban, sehingga proses
tersebut tidak akan pernah sukses menjalankan eksekusi.

Anda mungkin juga menyukai