Spin Locks Sinkronisasi Linux

Bab 23. Deadlocks

23.1. Pendahuluan

Dalam sistem komputer, terdapat banyak sumber daya yang hanya bisa dimanfaatkan oleh satu proses pada suatu waktu. Contohnya adalah penggunaan sumber daya seperti printer, tape drives dan CD-ROM drives. Dua buah proses yang menggunakan slot yang sama pada tabel proses dapat menyebabkan kerusakan pada sistem. Untuk itu, setiap sistem operasi memiliki mekanisme yang memberikan akses eksklusif pada sumber daya. Pada kenyataannya, proses membutuhkan akses eksklusif untuk beberapa sumber daya sekaligus. Bayangkan apabila sebuah proses, sebut saja proses A, meminta sumber daya X dan mendapatkannya. Kemudian ada proses B yang meminta sumber daya Y dan mendapatkannya juga. Setelah itu, proses A meminta sumber daya Y dan proses B meminta sumber daya X. Pada situasi tersebut, kedua proses harus ter-block dan menunggu secara terus-menerus. Keadaan seperti itu dinamakan 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. Gambar 23.1. Contoh kasus deadlock pada lalu lintas di jembatan Pada contoh di atas, digambarkan ilustrasi dari kejadian deadlock pada dunia nyata, yaitu pada lalu lintas di jembatan. Dapat dilihat bahwa kedua mobil yang berada di tengah-tengah jembatan tidak dapat maju dan hanya menunggu. Penyelesaian dari masalah tersebut adalah salah satu dari mobil tersebut mundur, sehingga mobil yang lain dapat maju. Mobil pada kasus ini adalah proses, sedangkan jembatan adalah sumber daya. Kedua mobil berebut untuk menggunakan sumber daya, namun karena sumber daya tersebut hanya dapat digunakan oleh satu proses saja, maka terjadilah deadlock. Kondisi tersebut bila terjadi dalam waktu yang lama dapat menyebabkan terjadinya starvation. Gambar 23.2. Contoh kasus deadlock pada lalu lintas di persimpangan 161 Gambar di atas adalah contoh lain terjadinya deadlock pada dunia nyata. Pada gambar jelas terlihat bahwa lalu lintas terhenti dan terjadi antrian pada empat arah datangnya mobil. Tidak ada mobil yang bisa melanjutkan perjalanan dan hanya menunggu saja. Permasalahan ini dapat dipecahkan dengan cara salah satu dari antrian tersebut mundur dan memberikan kesempatan antrian lain untuk berjalan terlebih dahulu. Kasus seperti ini sangat potensial untuk terjadinya starvation. Berikut ini diberikan contoh situasi deadlock yang dideskripsikan dengan pseudocode. Contoh 23.1. TestAndSet Mutex M1, M2; Thread 1 while 1 { NonCriticalSection Mutex_lockM1; Mutex_lockM2; CriticalSection; Mutex_unlockM2; Mutex_unlockM1; } Thread 2 while 1 { NonCriticalSection Mutex_lockM2; Mutex_lockM1; CriticalSection; Mutex_unlockM1; Mutex_unlockM2; } Misalkan thread 1 berjalan dan mengunci M1. Akan tetapi sebelum ia dapat mengunci M2, ia diinterupsi. Kemudian thread 2 mulai berjalan dan mengunci M2. Ketika ia mencoba untuk mendapatkan dan mengunci M1, ia terblok karena M1 telah dikunci oleh thread 1. Selanjutnya thread 1 berjalan lagi dan mencoba untuk mendapatkan dan mengunci M2, namun terblok karena M2 telah dikunci oleh thread 2. Kedua thread terblok dan saling menunggu terjadinya sesuatu yang tak pernah akan terjadi. Kesimpulannya, terjadi deadlock yang melibatkan thread 1 dan thread 2. Pada bahasan selanjutnya kita akan membahas tentang deadlock secara lebih mendalam, yaitu tentang starvation, bagaimana deadlock dapat terjadi dan cara untuk menanganinya.

23.2. Starvation

Pada bagian pendahuluan, telah sama-sama kita ketahui mengenai pengertian dari deadlock. Di contoh lalu lintas jembatan, terlihat bahwa kejadian deadlock yang berlangsung secara terus-menerus dan tiada akhir dapat menyebabkan terjadinya starvation. Akan tetapi, deadlock bukanlah satu-satunya penyebab terjadinya starvation. Lalu lintas yang didominasi oleh kendaraan-kendaraan dari satu arah pun dapat menyebabkan terjadinya starvation. Akibat yang terjadi adalah kendaraan dari arah lain menjadi terus menunggu giliran untuk berjalan hingga akhirnya mengalami 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. 162