DBMS - Kilitlenme
Çok işlemli bir sistemde kilitlenme, bir sürecin başka bir işlem tarafından tutulan bir kaynağı süresiz olarak beklediği paylaşılan bir kaynak ortamında ortaya çıkan istenmeyen bir durumdur.
Örneğin, bir dizi işlemi {T 0 , T 1 , T 2 , ..., T n } varsayalım . T 0 , görevini tamamlamak için X kaynağına ihtiyaç duyar. Kaynak X, T 1 tarafından tutulur ve T 1 , T 2 tarafından tutulan bir Y kaynağını bekler . T 2 , T 0 tarafından tutulan Z kaynağını bekliyor . Böylece, tüm süreçler birbirlerinin kaynakları serbest bırakmasını bekler. Bu durumda, işlemlerin hiçbiri görevlerini tamamlayamaz. Bu durum bir çıkmaz olarak bilinir.
Kilitlenmeler bir sistem için sağlıklı değildir. Bir sistemin kilitlenme durumunda kalması durumunda, kilitlenmeye dahil olan işlemler ya geri alınır ya da yeniden başlatılır.
Kilitlenme Önleme
Sistemdeki herhangi bir kilitlenme durumunu önlemek için, DBMS, işlemlerin yürütülmek üzere olduğu tüm işlemleri agresif bir şekilde denetler. DBMS, operasyonları inceler ve bir kilitlenme durumu oluşturup yaratamayacaklarını analiz eder. Bir kilitlenme durumunun ortaya çıkabileceğini tespit ederse, bu işlemin yürütülmesine asla izin verilmez.
Bir kilitlenme durumunu önceden belirlemek için işlemlerin zaman damgası sıralama mekanizmasını kullanan kilitlenme önleme planları vardır.
Bekle-Öl Şeması
Bu şemada, bir işlem başka bir işlem tarafından çakışan bir kilitle zaten tutulan bir kaynağı (veri öğesini) kilitlemek isterse, iki olasılıktan biri ortaya çıkabilir -
Eğer TS (T i ) <TS (T j ) - T olduğunu ben bir çakışan kilidi, T daha yaşlıdır istiyor, j sonra T - i veri maddelik kullanılabilir kadar beklemek izin verilir.
Eğer TS (T i )> TS (t j ) - yani T i , T j'den gençse - o zaman T i ölür. T i daha sonra rastgele bir gecikmeyle ancak aynı zaman damgasıyla yeniden başlatılır.
Bu şema, eski işlemin beklemesine izin verir, ancak daha genç olanı öldürür.
Wound-Wait Şeması
Bu şemada, bir işlem, başka bir işlem tarafından zaten çakışan kilitle tutulan bir kaynağı (veri öğesini) kilitleme talebinde bulunursa, iki olasılıktan biri ortaya çıkabilir -
TS (T i ) <TS (T j ) ise, o zaman T i T j'yi geri alınmaya zorlar - bu T i yaraları T j'dir . T j daha sonra rastgele bir gecikmeyle ancak aynı zaman damgasıyla yeniden başlatılır.
TS (T i )> TS (T j ) ise, T i kaynak kullanılabilir olana kadar beklemeye zorlanır.
Bu şema, daha genç olan işlemin beklemesini sağlar; ancak daha eski bir işlem, daha genç bir işlemde bulunan bir öğeyi talep ettiğinde, eski işlem, küçük olanı öğeyi iptal etmeye ve serbest bırakmaya zorlar.
Her iki durumda da, sisteme daha sonraki bir aşamada giren işlem iptal edilir.
Kilitlenme Önleme
Bir işlemi iptal etmek her zaman pratik bir yaklaşım değildir. Bunun yerine, herhangi bir kilitlenme durumunu önceden tespit etmek için kilitlenme önleme mekanizmaları kullanılabilir. "Bekleme grafiği" gibi yöntemler mevcuttur, ancak bunlar yalnızca işlemlerin hafif olduğu ve daha az kaynak örneğine sahip sistemler için uygundur. Hacimli bir sistemde, kilitlenme önleme teknikleri işe yarayabilir.
Bekleme Grafiği
Bu, herhangi bir kilitlenme durumunun ortaya çıkıp çıkmayacağını izlemek için kullanılabilen basit bir yöntemdir. Sisteme giren her işlem için bir düğüm oluşturulur. Bir işlem T zaman ben bir öğe üzerinde bir kilit için istekleri, diğer bazı işlem T tarafından düzenlenen X söylemek j , yönlendirilmiş kenar T oluşturulur i T j . T j , X öğesini serbest bırakırsa , aralarındaki kenar düşer ve T i veri öğesini kilitler.
Sistem, başkaları tarafından tutulan bazı veri maddelerini bekleyen her işlem için bu bekleme grafiğini korur. Sistem, grafikte herhangi bir döngü olup olmadığını kontrol etmeye devam eder.
Burada, aşağıdaki iki yaklaşımdan herhangi birini kullanabiliriz -
İlk olarak, başka bir işlem tarafından zaten kilitlenmiş olan bir öğe için herhangi bir talebe izin vermeyin. Bu her zaman mümkün değildir ve bir işlemin süresiz olarak bir veri öğesini beklediği ve asla elde edemediği açlıktan ölmeye neden olabilir.
İkinci seçenek, işlemlerden birini geri almaktır. Eski işlemden daha önemli olabileceğinden, genç işlemi geri almak her zaman mümkün değildir. Bazı göreceli algoritmaların yardımıyla, iptal edilecek bir işlem seçilir. Bu işlem olarak bilinirvictim ve süreç olarak bilinir victim selection.