Deadlock. Deadlock adalah suatu kondisi dimana dua proses atau lebih saling menunggu proses

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

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

18.5. Critical Section dalam Kernel

Problem untuk kernel muncul karena berbagai tasks mungkin mencoba untuk mengakses data yang sama. Jika hanya satu kernel task ditengah pengaksesan data ketika interrupt service routine dieksekusi, maka service routine tidak dapat mengakses atau merubah data yang sama tanpa resiko mendapatkan data yang rusak. Fakta ini berkaitan dengan ide dari critical section sebagai hasilnya. Saat sepotong kernel code mulai dijalankan, akan terjamin bahwa itu adalah satu-satunya kernel code yang dijalankan sampai salah satu dari aksi dibawah ini muncul:

1. Interupsi. Interupsi adalah suatu masalah bila mengandung critical section-nya sendiri. Timer

interrupt tidak secara langsung menyebabkan terjadinya penjadwalan ulang suatu proses; hanya meminta suatu jadwal untuk dilakukan kemudian, jadi kedatangan suatu interupsi tidak mempengaruhi urutan eksekusi dari kernel code. Sekali interrupt service selesai, eksekusi akan menjadi lebih simpel untuk kembali ke kernel code yang sedang dijalankan ketika interupsi mengambil alih.

2. Page Fault. Page faults adalah suatu masalah yang potensial; jika sebuah kernel routine

mencoba untuk membaca atau menulis ke user memory, akan menyebabkan terjadinya page fault yang membutuhkan MK, dan proses yang berjalan akan di tunda sampai MK selesai. Pada kasus yang hampir sama, jika system call service routine memanggil penjadwalan ketika sedang berada di mode kernel, mungkin secara eksplisit dengan membuat direct call pada code penjadwalan atau secara implisit dengan memanggil sebuah fungsi untuk menunggu MK selesai, setelah itu proses akan menunggu dan penjadwalan ulang akan muncul. Ketika proses jalan kembali, proses tersebut akan melanjutkan untuk mengeksekusi dengan mode kernel, melanjutkan intruksi setelah pemanggilan ke penjadwalan.

3. Kernel code memanggil fungsi penjadwalan sendiri. setiap waktu banyak proses yang berjalan

dalam kernel mode,akibatnya sangat mungkin untuk terjadi race condition ,contoh, dalam kernel mode terdapat struktur data yang menyimpan list file yang terbuka, list tersebut termodifikasi bila ada data file yang baru dibuka atau ditutup,dengan menambah atau menghapus dari list , race condition timbul ketika ada dua file yang dibuka dan ditutup bersamaan, untuk mengatasi hal tersebut kernel mempunyai metode yaitu: a. Preemptive kernel. pada mode ini proses yang sedang dieksekusi dalam kernel diizinkan untuk diinterupsi oleh proses lain yang memenuhi syarat, akibatnya mode ini juga rentan terkena race condition. Keuntungannya adalah mode ini amat efektif untuk digunakan dalam real time programming, namun mode ini lebih sulit diimplementasikan dari pada mode non preemptive kernel. Mode ini diimplementasikan oleh Linux versi 2.6 dan versi komersial Linux lainnya.

b. Non preemptive kernel. mode yang tidak memperbolehkan suatu proses yang berjalan

dalam kernel mode diinterupsi oleh proses lain, proses lain hanya bisa dijalankan setelah proses yang ada dalam kernel selesai dieksekusi, implementasinya memang lebih mudah dibandingkan dengan preemptive kernel, mode ini diimplementasikan lewat Windows XP dan Windows 2000.

18.6. Rangkuman

Suatu proses yang bekerja bersama-sama dan saling berbagi data dapat mengakibatkan race condition atau pengaksesan data secara bersama-sama. Critical section adalah suatu segmen kode dari proses-proses itu yang yang memungkinkan terjadinya race condition. Untuk mengatasi masalah critical section ini, suatu data yang sedang diproses tidak boleh diganggu proses lain. Solusi prasyarat critical section: 126

1. Mutual Exclusion. 2. Terjadi kemajuan progress .

3. Ada batas waktu tunggu bounded waiting.

Critical section dalam kernel: 1. Interupsi.

2. Page Fault. 3. Kernel code memanggil fungsi penjadwalan sendiri.

Rujukan [Silberschatz2005] Avi Silberschatz, Peter Galvin, dan Grag Gagne. 2005. Operating Systems Concepts. Seventh Edition. John Wiley Sons. [Stallings2001] William Stallings. 2001. Operating Systems: Internal and Design Principles. Fourth Edition. Edisi Keempat. Prentice-Hall International. New Jersey. [Tanenbaum1997] Andrew S Tanenbaum dan Albert S Woodhull. 1997. Operating Systems Design and Implementation. Second Edition. Prentice-Hall. [WEBFSF1991a] Free Software Foundation. 1991. – http:gnui.vLSM.org licenses gpl.txt . Diakses 7 April 2007. 127