critical section adalah sebuah protokol yang di
disain supaya proses-proses dapat menggunakannya secara bersama-sama. Setiap
proses harus memesan waktu untuk memasuki critical section-nya.
Yang disebut entry section. dan Akhir dari critical section itu
disebut exit section. Dan setelah itu ada remainder section.
Solusi dari masalah critical
section harus memenuhi tiga syarat berikut:
1. Mutual Exclusion.
Jika suatu proses sedang menjalankan critical
section-nya, maka proses-proses lain tidak dapat menjalankan critical
section mereka. Tidak ada
dua proses yang berada di critical section pada saat yang
bersamaan.
2. Terjadi kemajuan (progress).
Jika tidak ada proses yang sedang
menjalankan critical section-nya dan ada proses-proses lain yang
ingin masuk ke critical section, maka hanya proses-proses yang yang
sedang berada dalam entry section saja yang dapat berkompetisi
untuk mengerjakan critical section.
3. Ada batas waktu tunggu (bounded waiting).
Jika ada suatu proses yang sedang
menjalankan critical section, maka proses lain memiliki waktu
tunggu yang ada batasnya untuk menjalankan critical section -nya,
sehingga dapat dipastikan bahwa proses tersebut dapat mengakses critical
section-nya (tidak mengalami starvation: proses seolah-olah
berhenti, menunggu request akses ke critical section diperbolehkan).
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.
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.
1.
Mendeteksi dan Memperbaiki
Caranya ialah dengan cara mendeteksi jika terjadi deadlock pada suatu proses
maka dideteks system mana yg terlibat di dalamnya. Setelah diketahui sistem
mana saja yang terlibat maka dilakukan proses untuk memperbaiki dan menjadikan
sistem berjalan kembali. Jika sebuah sistem tidak memastikan deadlock akan
terjadi, dan juga tidak didukung dengan pendeteksian deadlock serta
pencegahannya, maka kita akan sampai pada kondisi deadlock yang dapat
berpengaruh terhadap performance sistem karena sumber daya tidak dapat
digunakan oleh proses sehingga proses-proses yang lain juga terganggu.
Akhirnya sistem akan berhenti dan harus direstart.
Hal-hal yang terjadi dalam mendeteksi adanya Deadlock adalah:
• Permintaan sumber daya dikabulkan selama memungkinkan.
• Sistem operasi memeriksa adakah kondisi circular wait secara periodik.
• Pemeriksaan adanya deadlock dapat dilakukan setiap ada sumber daya yang hendak digunakan
oleh sebuah proses.
• Memeriksa dengan algoritma tertentu.
Ada beberapa jalan untuk kembali dari Deadlock, yaitu:
1.
Lewat Preemption
Dengan cara
untuk sementara waktu menjauhkan sumber daya dari pemakainya, dan memberikannya
pada proses yang lain. Ide untuk memberi pada proses lain tanpa diketahui oleh
pemilik dari sumber daya tersebut tergantung dari sifat sumber daya itu
sendiri. Perbaikan dengan cara ini
sangat sulit atau dapat dikatakan tidak mungkin. Cara ini dapat dilakukan
dengan memilih korban yang akan dikorbankan atau diambil sumber dayanya untuk
sementara, tentu saja harus dengan perhitungan yang cukup agar waktu yang
dikorbankan seminimal mungkin. Setelah kita melakukan preemption dilakukan
pengkondisian proses tersebut dalam kondisi aman. Setelah itu proses dilakukan
lagi dalam kondisi aman.
1.
Lewat Melacak Kembali
Setelah
melakukan beberapa langkah preemption, maka proses utama yang diambil sumber
dayanya akan berhenti dan tidak dapat melanjutkan kegiatannya, oleh karena itu
dibutuhkan langkah untuk kembali pada keadaan aman dimana proses masih berjalan
dan memulai proses lagi dari situ. Tetapi untuk beberapa keadaan sangat sulit
menentukan kondisi aman tersebut, oleh karena itu umumnya dilakukan cara
mematikan program tersebut lalu memulai kembali proses. Meski pun sebenarnya
lebih efektif jika hanya mundur beberapa langkah saja sampai deadlock tidak
terjadi lagi. Untuk beberapa sistem mencoba dengan cara mengadakan pengecekan
beberapa kali secara periodik dan menandai tempat terakhir kali menulis ke
disk, sehingga saat terjadi deadlock dapat mulai dari tempat terakhir
penandaannya berada.
1.
Lewat mematikan proses yang menyebabkan Deadlock
Cara yang
paling umum ialah mematikan semua proses yang mengalami deadlock. Cara ini
paling umum dilakukan dan dilakukan oleh hampir semua sistem operasi. Namun,
untuk beberapa sistem, kita juga dapat mematikan beberapa proses saja dalam
siklus deadlock untuk menghindari deadlock dan mempersilahkan proses lainnya
kembali berjalan. Atau dipilih salah satu korban untuk melepaskan sumber
dayanya, dengan cara ini maka masalah pemilihan korban menjadi lebih selektif,
sebab telah diperhitungkan beberapa kemungkinan jika si proses harus melepaskan
sumber dayanya.
Kriteria
pemilihan korban :
• Yang paling jarang memakai prosesor
• Yang paling sedikit hasil programnya
• Yang paling banyak memakai sumber daya sampai saat ini
• Yang alokasi sumber daya totalnya tersedkit
• Yang memiliki prioritas terkecil
• Yang paling jarang memakai prosesor
• Yang paling sedikit hasil programnya
• Yang paling banyak memakai sumber daya sampai saat ini
• Yang alokasi sumber daya totalnya tersedkit
• Yang memiliki prioritas terkecil
Selain itu juga ada kondisi yang hampir
dapat dikatakan mirip dengan deadlock adalah livelock. Hanya saja livelock ini
secara umum dapat dikatakan bahwa proses tidak berjalan. Livelock ini merupakan
kasus khusus dalam source starvation. Kondisi yang dapat menggambarkan livelock
ini adalah ketika dua orang bertemu di sebuah koridor yang sempit, dan
masing-masing mencoba untuk bersikap sopan dengan menggerakkan badan ke samping
untuk membiarkan lewat yang lain, tetapi mereka akhirnya bergoyang dari sisi ke
sisi lain tanpa membuat kemajuan karena mereka berdua berulang kali pindah
dengan cara yang sama pada waktu yang sama.
Livelock sendiri merupakan risiko dari beberapa algoritma yang mendeteksi dan memulihkan dari deadlock. Jika lebih dari satu proses mengambil tindakan, pendeteksian oleh algoritma berulang kali dapat memicu deadlock. Hal ini dapat dihindari dengan memastikan bahwa hanya satu proses (dipilih secara acak atau dengan prioritas) yang mengambil tindakan.
Livelock sendiri merupakan risiko dari beberapa algoritma yang mendeteksi dan memulihkan dari deadlock. Jika lebih dari satu proses mengambil tindakan, pendeteksian oleh algoritma berulang kali dapat memicu deadlock. Hal ini dapat dihindari dengan memastikan bahwa hanya satu proses (dipilih secara acak atau dengan prioritas) yang mengambil tindakan.