Sabtu, 02 Mei 2015

CRITICAL SECTION


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.
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

   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.