Bölüm 7: Kilitlenme (Deadlocks) Mehmet Demirci tarafından çevrilmiştir. Silberschatz, Galvin and Gagne 2013
Bölüm 7: Kilitlenme (Deadlocks) Sistem modeli Kilitlenme Belirleme Kilitlenme Yönetim Yöntemleri Kilitlenmeyi Önleme Kilitlenme Tespiti Kilitlenmeden Kurtulma 7.2 Silberschatz, Galvin and Gagne 2013
Bölüm Hedefleri Eşzamanlı çalışan süreçlerin işlerini bitirmesini engelleyen kilitlenme durumunu tanımlamak Kilitlenmeyi önlemek için kullanılan yöntemleri sunmak 7.3 Silberschatz, Galvin and Gagne 2013
Sistem Modeli Sistem kaynaklardan oluşur Kaynak türleri: R 1, R 2,..., R m CPU döngüleri, bellek alanı, I/O cihazları Her kaynak türü R i için W i tane örnek Bir süreç bir kaynağı şöyle kullanır: İste (request) Kullan (use) Bırak (release) 7.4 Silberschatz, Galvin and Gagne 2013
Kilitlenme Neden Oluşur? Kilitlenme (deadlock), aşağıdaki dört şart aynı anda sağlanırsa gerçekleşebilir. Karşılıklı dışlama (Mutual exclusion): herhangi bir zamanda sadece bir süreç kaynağı kullanabiliyor. Tutup bekleme (Hold and wait): en az bir kaynağı tutan bir süreç, başka süreçlerin tuttuğunu kaynakları bekliyor. Preemption yok: kaynak ancak onu tutan süreç tarafından işi bitince gönüllü olarak bırakılabiliyor. Dairesel bekleme (Circular wait): Bekleyen süreçlerden oluşan bir {P 0, P 1,, P n } kümesi vardır ki P 0 P 1 in elindeki bir kaynağı, P 1 P 2 nin elindeki bir kaynağı,, P n 1 P n in elindeki bir kaynağı ve P n de P 0 ın elindeki bir kaynağı bekliyor. 7.5 Silberschatz, Galvin and Gagne 2013
Mutex Kilitleriyle Kilitlenme Kilitlenmeler sistem çağrıları, kilitler vb. nedenlerle oluşabilir. Mutex kilitlenmesi için kitapta Sayfa 318 7.6 Silberschatz, Galvin and Gagne 2013
Kaynak Ayırma Çizgesi Köşeler kümesi V ile kenarlar kümesi E. V iki türe ayrılır: P = {P 1, P 2,, P n }, sistemdeki süreçler kümesi R = {R 1, R 2,, R m }, sistemdeki kaynaklar kümesi İstek kenarı yönlü kenar P i R j Atama kenarı yönlü kenar R j P i 7.7 Silberschatz, Galvin and Gagne 2013
Kaynak Ayırma Çizgesi Süreç 4 örnekli kaynak türü P i istiyor R j P i P i tutuyor R j R j P i R j 7.8 Silberschatz, Galvin and Gagne 2013
Kaynak Ayırma Çizgesi Örneği 7.9 Silberschatz, Galvin and Gagne 2013
Kaynak Ayırma Çizgesinde Kilitlenme 7.10 Silberschatz, Galvin and Gagne 2013
Döngü Var ama Kilitlenme Yok 7.11 Silberschatz, Galvin and Gagne 2013
Temel Gerçekler Çizgede döngü yoksa kilitlenme yok Çizgede döngü varsa Her kaynak türünden bir örnek varsa, kilitlenme var Her kaynak türünden birkaç örnek varsa, kilitlenme olabilir 7.12 Silberschatz, Galvin and Gagne 2013
Kilitlenme Yönetim Yöntemleri Sistemin asla kilitlenme durumuna düşmemesini sağlamak için: Kilitlenmeyi önleme (prevention) Kilitlenmeden sakınma (avoidance) Sistemin kilitlenme durumuna girmesine izin verip sonra kurtarmak Sorunu görmezden gelip sistemde kilitlenme olmayacağını varsaymak; UNIX dahil birçok OS tarafından kullanılır. 7.13 Silberschatz, Galvin and Gagne 2013
Kilitlenme Örneği /* thread one runs in this function */ void *do_work_one(void *param) { } pthread_mutex_lock(&first_mutex); pthread_mutex_lock(&second_mutex); /** * Do some work */ pthread_mutex_unlock(&second_mutex); pthread_mutex_unlock(&first_mutex); pthread_exit(0); /* thread two runs in this function */ void *do_work_two(void *param) { } pthread_mutex_lock(&second_mutex); pthread_mutex_lock(&first_mutex); /** * Do some work */ pthread_mutex_unlock(&first_mutex); pthread_mutex_unlock(&second_mutex); pthread_exit(0); 7.14 Silberschatz, Galvin and Gagne 2013
Kilitlenmeyi Önleme İstek yapma yollarını kısıtlayarak Karşılıklı Dışlama paylaşılabilir kaynaklar için karşılıklı dışlama şartı olmasın (örn., salt okunur dosyalar) Genel çözüm olamaz çünkü bazı kaynakların paylaşılması mümkün değil, karşılıklı dışlama şart Tutup Bekleme süreç kaynak istediğinde başka kaynak tutmadığı garanti edilsin Süreç çalışmaya başlamadan önce bütün kaynaklarını alsın, veya ancak kendinde hiçbir kaynak yoksa isteyebilsin. Sorun: Düşük kaynak kullanımı; açlık mümkün 7.15 Silberschatz, Galvin and Gagne 2013
Kilitlenmeyi Önleme Preemption Yok Bazı kaynakları tutan bir süreç başka kaynak ister ama hemen alamazsa, tuttuğu bütün kaynakları bırakmak zorunda kalsın. Elinden alınan kaynaklar beklediklerinin arasına eklenir. Süreç ancak hepsini (eskileri ve yenileri) alabildiğinde yeniden başlar. Dairesel Bekleme bütün kaynak türlerine bir sıra verilsin, her süreç kaynakları artan sırada istemek zorunda olsun. Süreç önce R i sonra R j istiyorsa, F(R i ) < F(R j ) 7.16 Silberschatz, Galvin and Gagne 2013
Kilitlenmeden Sakınma Sistemin önceden bazı bilgilere sahip olması gerekir. En basit ve kullanışlı modelde her süreç her tür kaynaktan en çok kaç tane isteyebileceğini bildirmek zorundadır. Kilitlenmeden sakınma algoritması kaynak paylaşım durumunu dinamik olarak inceler ve dairesel bekleme olmayacağından emin olur. Kaynak paylaşım durumu: boşta ve verilmiş olan kaynak sayısı, süreçlerin maksimum talepleri 7.18 Silberschatz, Galvin and Gagne 2013
Güvenli Durum Bir süreç boştaki bir kaynağı istediğinde, kaynağın hemen verilmesi halinde güvenli durum korunacak mı diye sistemin bakması gerekir. Sistemin güvenli durumda olması için, bütün süreçlerin en az bir <P 1, P 2,, P n > sıralaması var olmalı ki, her P i için, P i tarafından istenebilecek kaynaklar ya boşta olsun veya j < i şartını sağlayan P j süreçleri tarafından tutuluyor olsun. Bu durumda: P i istediği tüm kaynakları alamıyorsa, j < i şartını sağlayan bütün P j ler bitene kadar bekler. Sonra, P i gerekli kaynakları alır, çalışır, kaynakları geri verir, ve sonlanır. P i sonlanınca, P i +1 istediği kaynakları alabilir, 7.19 Silberschatz, Galvin and Gagne 2013
Temel Gerçekler Sistem güvenli durumdaysa kilitlenme yok Sistem güvensiz durumdaysa kilitlenme olabilir Sakınma Sistemin hiçbir zaman güvensiz duruma girmemesini sağlama 7.20 Silberschatz, Galvin and Gagne 2013
Güvenli, Güvensiz, Kilitlenme Durumları 7.21 Silberschatz, Galvin and Gagne 2013
Sakınma Algoritmaları Kaynak türünden tek örnek Kaynak ayırma çizgesi kullan Kaynak türünden çok örnek Banker algoritmasını kullan 7.22 Silberschatz, Galvin and Gagne 2013
Kaynak Ayırma Çizge Şeması Talep kenarı (Claim edge) P i R j gösterir ki P j süreci R j kaynağını ileride isteyebilir (kesikli çizgiyle gösterilir) Talep kenarı, süreç kaynağı isteyince istek kenarına dönüşür. İstek kenarı, sürece kaynak ataması yapılınca atama kenarına dönüşür. Süreç kaynağı bırakınca atama kenarı talep kenarına dönüşür. Kaynak talepleri sistemde önceden yapılır. 7.23 Silberschatz, Galvin and Gagne 2013
Kaynak Ayırma Çizgesi 7.24 Silberschatz, Galvin and Gagne 2013
Kaynak Ayırma Çizgesinde Güvensiz Durum 7.25 Silberschatz, Galvin and Gagne 2013
Kaynak Ayırma Çizgesi Algoritması P i süreci R j kaynağını istiyor. İstek, ancak istek kenarını atama kenarına dönüştürmek çizgede döngü oluşturmuyorsa karşılanabilir. 7.26 Silberschatz, Galvin and Gagne 2013
Banker s Algorithm Kaynakların birden fazla kopyası var. Her süreç önceden en fazla kullanımını belirleyip kaynak talep etmeli. Süreç kaynak istediğinde beklemek zorunda kalabilir. Süreç istediği bütün kaynakları aldıktan sonra sonlu sürede geri vermeli. 7.27 Silberschatz, Galvin and Gagne 2013
Banker s Algorithm Veri Yapıları n = süreç sayısı, m = kaynak türü sayısı Boşta: m uzunluğunda vektör. Eğer Boşta[j] = k ise, R j kaynak türünden k tane kaynak boştadır. Max: n x m matris. Eğer Max[i,j] = k ise, süreç P i, R j türündeki kaynaktan en fazla k tane isteyebilir. Atama: n x m matris. Eğer Atama[i,j] = k ise, P i şu anda R j türündeki kaynaktan k tanesini almıştır. İhtiyaç: n x m matris. Eğer İhtiyaç[i,j] = k ise, P i ileride R j türündeki kaynaktan k tanesine daha ihtiyaç duyabilir. İhtiyaç[i,j] = Max[i,j] Atama[i,j] 7.28 Silberschatz, Galvin and Gagne 2013
Güvenlik Algoritması 1. İş ve Bitiş vektörleri m ve n uzunluğunda olsun. Başlangıçta: İş = Boşta Bitiş[i] = false for i = 0, 1,, n- 1 2. Şu iki şartı birlikte sağlayan i bul: (a) Bitiş[i] = false (b) İhtiyaç i İş Öyle bir i yoksa, 4. adıma git. 3. İş = İş + Atama i Bitiş[i] = true 2. adıma git 4. Eğer her i için Bitiş[i] == true ise, sistem güvenli durumdadır. 7.29 Silberschatz, Galvin and Gagne 2013
P i Süreci için Kaynak İsteme Algoritması İstek i = P i sürecinin istek vektörü. Eğer İstek i [j] = k ise, P i süreci R j türündeki kaynaktan k tane istiyor. 1. Eğer İstek i İhtiyaç i ise 2. adıma git. Değilse, hata ver, çünkü süreç talep sınırını aştı. 2. Eğer İstek i Boşta ise 3. adıma git. Değilse, P i beklemeli, çünkü boşta yeterli kaynak yok. 3. P i sürecine kaynak atamayı dene yani şunları yap: Boşta = Boşta İstek i ; Atama i = Atama i + İstek i ; İhtiyaç i = İhtiyaç i İstek i ; Eğer güvenliyse kaynakları P i ye ata. Eğer güvensizse P i beklemeli, yukarıdaki değişiklikleri geri al. 7.30 Silberschatz, Galvin and Gagne 2013
Banker s Algorithm Örneği 5 süreç: P 0 P 4 3 kaynak türü: A (10 tane), B (5 tane), ve C (7 tane) T 0 zamanındaki durum: Atama Max Boşta A B C A B C A B C P 0 0 1 0 7 5 3 3 3 2 P 1 2 0 0 3 2 2 P 2 3 0 2 9 0 2 P 3 2 1 1 2 2 2 P 4 0 0 2 4 3 3 7.31 Silberschatz, Galvin and Gagne 2013
Banker s Algorithm Örneği İhtiyaç matrisi tanıma göre Max Atama İhtiyaç A B C P 0 7 4 3 P 1 1 2 2 P 2 6 0 0 P 3 0 1 1 P 4 4 3 1 Sistem güvenli durumda çünkü < P 1, P 3, P 4, P 2, P 0 > sıralaması güvenlik kriterlerini sağlıyor. 7.32 Silberschatz, Galvin and Gagne 2013
Örnek: P 1 İster (1,0,2) İstek Boşta olduğunu kontrol et (yani, (1,0,2) (3,3,2) true) Atama İhtiyaç Boşta A B C A B C A B C P 0 0 1 0 7 4 3 2 3 0 P 1 3 0 2 0 2 0 P 2 3 0 2 6 0 0 P 3 2 1 1 0 1 1 P 4 0 0 2 4 3 1 Güvenlik algoritmasına göre < P 1, P 3, P 4, P 0, P 2 > sıralaması güvenlik şartını sağlıyor. P 4 (3,3,0) isterse verebilir miyiz? P 0 (0,2,0) isterse verebilir miyiz? 7.33 Silberschatz, Galvin and Gagne 2013
Kilitlenme Tespiti Sistemin kilitlenme durumuna girmesine izin ver Tespit algoritması Düzeltme yolu 7.34 Silberschatz, Galvin and Gagne 2013
Her Kaynak Türünden Tek Örnek Bekleme (wait-for) çizgesi Düğümler süreçlerdir. P i P j eğer P i bekliyor P j ise Periyodik olarak çizgede döngü ara. Döngü varsa kilitlenme var demektir. Çizgede döngü bulma algoritması O(n 2 ) işlem gerektirir, n çizgedeki düğüm sayısıdır. 7.35 Silberschatz, Galvin and Gagne 2013
Kaynak Ayırma Çizgesi ve Bekleme Çizgesi Resource-Allocation Graph Corresponding wait-for graph 7.36 Silberschatz, Galvin and Gagne 2013
Her Kaynak Türünden Çok Örnek Boşta: m uzunluğunda vektör, her kaynak türünden kaç tane boşta Atama: n x m matris, her kaynak türünden her sürece kaç tane atanmış İstek: n x m matris, her sürecin isteklerini gösterir. Eğer İstek[i][j] = k ise, P i süreci R j kaynağından k tane daha istiyor. 7.37 Silberschatz, Galvin and Gagne 2013
Tespit Algoritması 1. İş ve Bitiş vektörleri m ve n uzunluğunda olsun. Başlangıçta: (a) İş = Boşta (b) i = 1,2,, n için, eğer Atama i 0 ise Bitiş[i] = false; yoksa, Bitiş[i] = true 2. Aşağıdaki iki şartı sağlayan i bul: (a) Bitiş[i] == false (b) İstek i İş Eğer öyle i yoksa, 4. adıma git. 7.38 Silberschatz, Galvin and Gagne 2013
Tespit Algoritması 3. İş = İş + Atama i Bitiş[i] = true 2. Adıma git 4. Eğer en az bir i, 1 i n, için Bitiş[i] == false ise, o zaman sistem kilitlenme halindedir. Bitiş[i] == false eşitliğini sağlayan P i süreci kilitlenmiştir. Algoritma O(m x n 2 ) işlem gerektirir. 7.39 Silberschatz, Galvin and Gagne 2013
Tespit Algoritması Örneği Beş süreç P 0 P 4 ; üç kaynak türü A (7 tane), B (2 tane), ve C (6 tane) T 0 zamanındaki durum: Atama İstek Boşta A B C A B C A B C P 0 0 1 0 0 0 0 0 0 0 P 1 2 0 0 2 0 2 P 2 3 0 3 0 0 0 P 3 2 1 1 1 0 0 P 4 0 0 2 0 0 2 <P 0, P 2, P 3, P 1, P 4 > sıralamasında Finish[i] = true for all i 7.40 Silberschatz, Galvin and Gagne 2013
Tespit Algoritması Örneği P 2 C den bir tane daha istiyor. İstek A B C P 0 0 0 0 P 1 2 0 2 P 2 0 0 1 P 3 1 0 0 P 4 0 0 2 Sistemin durumu? P 0 dan kaynaklar alınabilir ancak diğerlerinin isteklerine yetmez. Kilitlenme var, P 1, P 2, P 3, ve P 4 7.41 Silberschatz, Galvin and Gagne 2013
Tespit Algoritması Kullanımı Ne zaman ve ne sıklıkla kullanacağımızı şunlara göre belirleriz: Kilitlenmenin ne sıklıkla olması muhtemel? Kaç sürecin kaynakları geri alınacak? Bağımsız her döngü için bir tane Hemen karşılanamayan her kaynak isteğinde çağrılabilir. Tespit algoritması rastgele çağrılırsa, kaynak çizgesinde birçok döngü bulunabilir ve kilitlenmiş süreçlerden hangisinin kilitlenmeye yol açtığı bilinemez. 7.42 Silberschatz, Galvin and Gagne 2013
Kilitlenmeyi Düzeltme: Süreç Sonlandırma Kilitlenenlerin hepsini bitir (abort) Kilitlenme döngüsü yok edilene kadar birer birer bitir Hangi sırada bitirmeliyiz? 1. Süreç önceliği 2. Ne zamandır çalışıyor, bitmesine ne kadar var 3. Kullandığı kaynakların miktarları ve türleri 4. İhtiyacı olan kaynaklar 5. Kaç süreç sonlanacak 6. Etkileşimli mi değil mi 7.43 Silberschatz, Galvin and Gagne 2013
Kilitlenmeyi Düzeltme: Kaynakları Geri Alma Kurban seç maliyeti minimize ederek Rollback (geri sar) Güvenli bir duruma dön, o durum için süreci yeniden başlat Açlık hep aynı süreci kurban seçersek gerçekleşir, bunu önlemek için geri sarma sayısını maliyete dahil et 7.44 Silberschatz, Galvin and Gagne 2013
Bölüm 7 Sonu Silberschatz, Galvin and Gagne 2013