Ölümcül Kilitlenme- Deadlock İşletim Sistemleri Bu Haftada ne Göreceğiz? Bir kilitlenme nedir? Güvenli Kalmak: kilitlenme önlenmesi ve kaçınmak Tehlikeli Yaşam: kilitlenme, ne o zaman olacağının tespiti ve kurtarmak Kilitlenme (Deadlock) İki veya daha fazla işlem bloklanmışlarsa, yani, her işlem bir kaynağı kullanıyor (allocate) iken diğerinin kullandığı bu kaynağı istiyor (request) olursa ölümcül kilitlenme meydana gelir. Gerçek Yaşam Örnekleri: Para kazanmak için para al. Para almak için de para kazanman lazım. Tecrübesi olmayan iş bulamaz, bir işe sahip olmadan da deneyimli olmazsınız. Trafik kilitlenmeleri-i Hareket edebilmek için Kamyon A, kamyon B beklemek zorunda Kilitlenme-Deadlock Daha ölümcül kitilenmedi.. Sadece tek yön trafik mevcut. Yolun her bölümü, bir kaynak olarak görülebilir. 1
Graph Kilitlenme-Deadlock Ve Gerçek Kilitlenme Basit Mantık Sistem güvenli durumda(safe) ise kilitlenme yoktur. Güvenli, Güvensiz, Kilitlnme Durumları Sistem güvenli olmayan(unsafe) bir durumda ise olasılıkla kilitlenme mevcuttur. Kilitlenmeden Kaçınmak asla, bir sistemi hiçbir zaman güvensiz durumuna girmemesini sağlamak Tekrar Kullanabilinir Kaynaklar İşlemciler, I / O kanalları, ana ve ikincil bellekler, veri tabanları, veri yapıları, semaforlar ve cihazlar gibi kaynaklar; Sadece bir işlem tarafından kullanan kaynak, bir seferde tükenmiş bir kaynak değildir. Süreçler, diğer processlerinde bu kaynağı tekrar kullanabilmesi için serbest bırakırlar. Eğer process, bir kaynak tutarken ve diğer kaynaklar için talepte bulunursa kilitlenme oluşur. Tekrar Kullanım-Kilitlenme 2
Kullanılabilir Kaynak Bellek-Kaynak Kilitlenmesi Bellekte 200Kbytes kullanılabilir bir alan için, aşağıdaki olaylar dizisi meydana gelir P1 Request 80 Kbytes; Request 60 Kbytes; P2 Request 70 Kbytes; Request 80 Kbytes; Eğer her iki işlemde, bir sonraki işlem için ikinci bir istekte bulunursa, kilitlenme oluşur Kilitlenme YOK Saf Kaynaklar Oluşturulma (üretilen) ve yok (tüketilen) Kesmeler, sinyalleri, mesajları, ve I / O tampon bilgileri Bir Receive-Alma mesajı engelleme ise kilitlenme oluşabilir. Kilitlenme örneği : Resource-Allocation Graph Kaynak Tahsisi (Resource-Allocation) metodu, Kaynak ve süreçlerin durumlarının grafiksel gösterim şeklini tanımlar Paylaşma R1 İstek Resource Allocation Graphs P1 P2 İstek R2 Paylaşma P1 işlemi R1 kaynağını kullanıyor (allocate etmiş) iken R2 kaynağını istiyor. P2 işlemi R2 kaynağını kullanıyor iken R1 kaynağını istiyor. 3
Sistem Kilitlenmesi nedir? Process Kilitlenme - Eğer process asla olmayacak bir olay bekliyorsa, o zaman process-işlem ölümcül kilitlenir. Sistem Kilitlenme - Bir veya daha fazla process kilitlenmişse sistemde ölümcül kilitlenmede olur. Processler Arası KİLİTLENME Process-Görevlerin her birinin bekler olması ve çalışabilmek için bir diğerinin işletilmesinin gerekmesi durumu, görevlerin hiçbir zaman gerçekleşmeyecek bir koşulu beklemeleri sonucunu doğurur. 20 Kilitlenme Örneği Eğer istekler bloklanırsa, kilitlenme olur Receive(P2); P1 Send(P2, M1); Receive(P1); P2 Send(P1, M2); Görevler arası kilitlenmeyi ortaya çıkaran koşullar 1. Karşılıklı Dışlama: Bir kaynağın aynı anda yalnız bir görev tarafından kullanılabilmesi 2. İstem üzerine kaynak atama: Görevin gereksediği kaynakları, teker teker, işletim aşamasında elde etmesi. 3. Geri Bekleme: Atanan kaynakların, görevler serbest bırakmadıkça geri alınamaması. 4. Döngüsel Bekleme: Bir görevin elinde tuttuğu kaynaklardan bir yada daha çoğunun, diğer görevlerce de istenmesi. 22 Ölümcül Kilitlenme Oluşmaması Bu dördü birden aynı anda olmadıkça, kilitlenme gibi bir sorun olmaz. Eğer gerekli kilitlenme koşullardan en az biri önleyebilir ise, o zaman bir ölümcül kilitlenmedeadlock olmaz. Kilitlenmeyi Kontrol etme yolları Kilitlenmenin Algılanması Kilitlenmeyi Önleme Kilitlenmeden Kaçınma Kilitlenmeden Kurtarma 4
Kilitlenmenin algılanması Eğer graph ta dairesel bir ilişki yoksa ölümcül kilitlenme da yoktur. Eğer graphta döngü varsa: Eğer her kaynağın (resource) bir örneği (instance) varsa kilitlenme olur. Birden fazla örneği varsa kilitlenme olma olasılığı yüksektir. Kilitlenmelerden Korunma Kilitlenmeler, sistem kaynaklarının işlemler arasında paylaşım zorunluluğundan doğar. Kilitlenmelerin önlenmesi için: Birlikte çalışan işlemler programlanırken tüm işlemler birlikte düşünülerek kaynak atamalarını buna göre yapılmalıdır. İşletim sisteminde kilitlenmelerden koruma ve kilitlenmeleri çözme algoritmalarının olması gerekir 26 Devekuşu-Ostrich Algoritması Sorun yok gibi davran, eğer ; -kilitlenme çok nadiren ortaya çıkıyorsa, çünkü, bunu önlemenin maliyeti yüksektir. UNIX ve Windows bu yaklaşım kullanırlar. Unutmamak gerekir ki, bu arada aşağıdaki ifadelerde bir ters orantı vardır -kolaylık -doğruluğu Kilitlenmeyi Önleme Dört gerekli koşullardan biri inkar ederek meydana gelen kilitlenme olasılığını ortadan kaldırmak: -Karşılıklı Dışlama (biz her şeyi paylaşır mısınız?) -Tut ve bekle -Önceden satınalma bloklamaya hayır -Dairesel Bekle Tut ve Bekle yi inkar etmek Uygulama Bir processe BÜTÜNÜ veya HİÇBİRİ" mantığı ile istediği kaynaklarını verilir. Ya bir process, TÜM onun gerekli kaynakları ve diğer ihtiyaçlarını alır, ya da bunların hiçbiri alamaz ve ta ki bütün kaynakları alabilecek duruma gelinceye kadar bekler. Avantajları İşe yarar Kodunu yazmak oldukça kolay Sorunları Kaynakların israfını Açlık olasılığı 5
Önceden blok satın almaya hayır Uygulama Bir process bir kaynak alma isteğini reddettiği zaman, bu process tuttuğu diğer tüm kaynakları serbest bırakmak ZORUNLUDIR. Process kaynakları kullanma süreci bitmeden, onlardan ayrılabilmelidir. Avantajları İşe yarıyor Muhtemelen daha iyi kaynak kullanımına neden olur Sorunları Bir processin kaynaklarının kaldırma maliyeti Bu processin yaptığı ve yapacağını işleri kaybetme olasılığı. (Ne kadar sıklıkla bu meydana gelir?) Açlık olasılığı Dairesel Bekle Uygulama Kaynakları sayılı ise Processler sadece doğrusal artan sırayla kaynakları talep edebilirler. Böylece de meydana gelecek olan dairesel bekleme önlenmesi sağlanır. Avantajları İşe yarıyor Bazı işletim sistemleri tarafından uygulanmıştır Sorunları Kaynaklara ihtiyaç olarak değil de, kaynak sayısı olarak ihtiyaç duyulacak talep diye istekte bulunulmaktadır. Kaynak numaralandırmadır, bunun içinde de işletim sistemine ek görev verilmelidir. Oturup sadece kod yazmak zor. İşletim sistemini ve kaynak paylaşımını iyi analiz etmek gerekmektedir. Kilitlenmeden Kaçınma Eğer, kilitlenme şansı ortaya çıkıyorsa, kilitlenmeye izin ver. Ama kilitlenmeyi önlemek içinde gerekli olanları yapmaya çalış, Bir sonraki durumda, (sistem değişimi) bir kilitlenme durumu sona erdirip erdiremediğini kontrol et. Dijkstra's Banker s Algoritması Çok örnekli Her süreç bir priori iddia maksimum kullanımı gerekir? Bir process bir kaynak isteği oladuğu zaman, bunun için beklemesi gerekebilir. Bir process tüm kaynaklarını aldığı zaman,bunları sınırlı zaman içinde geri dönmelidir. 6
Algoritma 1. Kalan kaynakların mevcut numarasını kullanarak, elindeki kaynakları yeterli olan bir process ara (yani, geçici olarak vermek) 2. Varsayalım ki, böyle bir process istekte bulunursa o zaman ödünç kaynakları geri dönecektir. 3. Kalan kaynak sayısını güncelleme 4. Tüm işlemler için 1-3 adımları tekrarlayıp ve işaretleyin Müsteri c1 c2 Banker s Problem Max. Gerekli 800 600 Mevcut 410 210 Claim 390 390 Farz et ki bankanın elindeki miktar 1000TL Hazır olan nakit: 1000- (410+210) = 380 TL Dijkstra's Banker's Algoritması Tanımlar Her proces KREDİ, MAX GEREKLİLİK, TALEP KREDİ: tutulan kaynakların mevcut sayısı MAX GEREKLİLİK : işlevi tamamlamak için gereken toplam kaynaklar TALEP = (MAXIMUM - KREDİ) Varsayımlar Her proces için bir KREDİ tavanı (MAX GEREKLİLİK) tanımlanması MAX GEREKLİLİK < mevcut kaynakların toplam sayısı (yani, sermaye) Bir süreç için toplam kredi MAX GEREKLİLİK e eşit veya daha az olmalıdır. Ödünç kaynakların sınırlı zaman içinde geri iade edilmelidir. Kilitlenmeden Kaçınma Mantığı Banker s Kilitlenmeden Kaçınma Mantığı Banker s completion 7
Avantajları İşe yarıyor Bir önleme algoritması çalışmadığı zaman işin devam etmesine izin verir Sorunları Kaynakların sabit bir sayıda olmasını ister. Bir kaynak aşağı giderse ne olur? Proceess çalışma sürecince kendi MAX GEREKLİĞİnin değiştirmesine izin vermez Kilitlenme Tespiti Birçok yöntem ile kilitlenme oluşması, ilgili işlem ve kaynakları da tespit edilir. Genellikle bu yöntemler dairesel bir bekleme ile kilitlenmeyi algılamaya çalışır. Algılama maliyeti herzaman dikkate alınmalıdır Bir yöntem biri, kaynak tahsis grafikleri Kilitlenme Durumundan Kurtulma Soruna neden olan processleri kaldırarak kilitlenme durumdan kurtarılır. Bir processin kaldırılması ile yapılan bir işi de kaybedebilirsiniz. Bir Kaynak Tahsisi için Grafiksel Örnek Kaynak R, bir işleme tahsis Process B talep/bekliyor posisyonu ile kaynak S i tutuyor Process C ve D, kaynak T ve U üzerinde kilitlendi. Problemler Çoğu sistemde bir süreçin çıkarılması ve sonra yeniden başlaması desteklemez. Bazı süreçler kaldırılması mümkün değildir. Hatta onlarca veya yüzlerce process içeren kilitlenme olması mümkündür. Uygulama -Süreçleri sadece (sonsuza kadar kayıp ise) tamamen öldürülür. -Genellikle bir çeşit öldürmek için öncelik sırası vardır. Destek için Askıya / devam (Geri alma) -Bazı sistemler ile gelen denetim noktası / yeniden başlatma özellikleri Geliştiriciler, bir yazılım tasarlarken uygulamaları görmek için bir dizi kontrol noktaları oluşturular. -Yani, bir süreç sadece son kontrol noktasında geri almak yerine yeniden başlangıça dönmek gibi 8
Soru: bir kilitlenme kurtarmak için en basit ve en çok kullanılan yöntemi nedir? Kilitlenme algılama algoritması 9
Kilitlenmeden Kaçınma Geçerli kaynak ayırma isteği ilgili bir karar verildiği takdirde, bunun potansiyel bir kilitlenme olup olmadığı dinamik olarak tanımlanır. Gelecekteki sürecin istekleri hakkında bilgi gerektirir. Kilitlenme Kaçınma Maksimum kaynak ihtiyacı önceden belirtilmelidir Kontrol süreçleri bağımsız olmalıdır, herhangi bir senkronizasyon gereksinimleri yoktur. Tahsis kaynakları sabit sayıda olmalıdır. Kaynakları tutarken hiçbir işlem sonlandırılmamalıdır. Kilitlenme Kaçınma ile ilgili İki Yaklaşım Eğeri talepler kilitlenme yol olabilecekse, processi başlatmayın. Eğer, istenilecek tahsis kilitlenme neden olabilecekse, bu process için artan bir kaynak isteği yerine getirmeyin. Kilitlenme Tespit Edilince Bütün kilitlenmiş processleri iptal et, Bazı önceden tanımlanmış kontrol noktasında her çıkmaza süreci için processleri yedekleyin ve tüm süreci yeniden başlatın. Orijinal kilitlenme oluşabilir Kilitlenme Tespit Edilince Kilitlenme çıkmazına girdince, kilitlenme yok oluncaya kadar art arda süreçleri iptal et, Kilitlenme yok oluncaya kadar, art arda kaynakları serbest bırak 10
Filozofların Akşam Yemeği Beş filozof, bir yuvarlak masanın etrafına dizilerek pirinç pilavı yemektedir. Buna göre pirinç yemek için iki adet yemek sopası (chopstick) gerekmektedir. Maalesef her filozofa bir sopa düşüyor ve yemeğe hepsi aynı anda başlıyorlar. Bu yüzden hepsinin elinde birer tane sopa olmasına rağmen, hepsi diğer sopayı bekliyor ve hiçbiri yemek yiyemiyorlar. Böylece sonsuza kadar aç kalıyorlar! Filozofların Akşam Yemeği Filozofların Akşam Yemeği Tipik bir kilitlenme olduğunu anlayabiliriz. Bir sopayı iki filozofun aynı anda kullanamaması karşılıklı dışlama, Elinde bir sopa olması ve onu bırakmayıp diğer sopayı istemekte ısrar etmesi de çoklu bağımsız istekleri yerine getiriyor. Boşaltılamazlığı da, dışarıdan birinin gidip, herhangi bir filozoftan sopasını alıp başka bir filozofa verememe. Son olarak dairesel bekleme de, bariz bir şekilde masanın etrafında filozofların oluşturduğu çember :) Çözümler 1. Rastgele süre çözümü (Random Solution) 2. Garson çözümü (Conductor Solution) 3. Monitör Çözümü (Monitor Solution) 4. Chandy Misra Çözümü (Chandy Misra Solution) Dining Philosophers Problem Dining Philosophers Problem 11
Dining Philosophers Problem Dining Philosophers Problem 12