İşletim Sistemleri -7 Deadlock Kavramı

DEADLOCK

  • Starvation ile bir Process ihtiyaç duyduğu bir kaynağa erişememektedir. İşlemci,Memory,Network,Disk olabilir. Process ilerleyemiyor. Ve bu nedenle açlıktan ölüyor.
  • Starvation olayında Process ve işletim sistemi başabaştır.
  • Process dediğimiz herşey aslında Thread olarak adlandırılabilir.
  • İki Process karşılıklı olarak birbirlerini dışarıdan müdahele olmadığı sürece sonsuza kadar devam edecek bir bekleme işlemi gerçekleştirebilirler.Çünkü karşılıklı kullanmaları gereken kaynakları tutmaktadırlar. O nedenle Deadlock ve Starvation bu noktada birbirinden ayrılıyor.
  • Deadlock Starvation’u oluşturabilir. Deadlock olmadan da Starvation olabilir.
  • Sistemdeki herşey bir kaynaktır. Çoğu zaman bu kaynaklar birden fazla olabilir.  Her kaynağın x kadar kopyası olabilir. Bir kaynağın birden fazla kopyası olması aslında güzel birşeydir. Sadece bir kopyası var ise Deadlock’a düşmesi daha kolaydır
  • Tek işlemci olduğunu düşünelim; Preemtive Scheduling uygulanmıyor. Process’te bir programlama hatası olsun ve sonsuz döngüye girdi; bu nedenle işlemciyi bırakamıyor. O nedenle diğer Processler çalışamaz. Otomatik olarak Starvation vardır. Aynı zamanda diğer processlerle ; işlemciyi bırakmayan Processler arasında da bir ilişki olmuştur. Çünkü biri bitmediği için diğerleri de devreye girememektedir. Bu nedenle aralarında Deadlock da bulunmaktadır.
  • Bütün kaynakların kullanımı bir protokole bağlıdır. Öncelikle kaynağın talep edilmesi gerekir. İş bittikten sonra kaynağın iade edilmesi gerekir. Kaynakların zorla alındığı durumuna Preemption adı verilmektedir.
  • 4 tane şart olsun. Deadlock oluşması için 4 şartın 4’nünde aynı anda sağlanması gerekir. Bu şartlardan herhangi bir tanesi geçersiz ise Deadlock oluşamaz. Bu şartlar biri Mutual Exclusiondur. Herhangi bir kaynağın sadece bir process tarafından kullanılmasıdır. Eğer birden fazla process tarafından kullanılırsa bu Shared Resource olarak adlandırılır. İkinci şart; Hold and Wait durumudur.  Çoğu zaman bir processin çalışması için birden fazla kaynağa ihtiyaç duyulur. Hold and Wait kısmında ; Bir kaynağı elinizde tutarken; diğer kaynak veya kaynakları bekliyor(İşin devam edebilmesi için.) . Şu şekilde örnek verilebilir. Bir dosya yazdırılmak istendiğinde; eğer yazıcı açık değilse; dosyayı da kapatmaz. Dosya açık kalır. Ya da yazıcı açıktır ancak dosya açık değildir; dosya açık olmadığı için yazıcı kapanmaz. Üçüncü Şart : No Preemtion’dur.  Tahsis edilen bir kaynağın zoraki olarak geri alınması işlemidir. Bu şekilde bir kaynak geri alınıyor ise; ve tekrar tahsis etme durumu var ise aldığımız andaki durumu kaydetmemiz ; tekrar tahsis ederken bu durumu tekrar oluşturmamız lazımdır. Scheduler A dosyasından B dosyasına geçmek istendiğinde; A dosyasındaki tüm belgeleri PCB’ye kaydediyoruz. B dosyasının PCB’sindeki bilgileri ise işlemciye gönderiyoruz. Aslında bu durum Context Switch olarak adlandırılabilir. 4. Şart Circular Wait’tir. Birinci Process birinci File’yı açmıştır. Printer beklemektedir. İkinci Process, Printer’ı atmış ,birinci File’yı açmayı bekliyor . Aralarında kapalı bir döngü oluşmuştur. Birincisi File’yı kapat döngüsü; ikincisi Printer’ı kapatmadığı sürece loop’a giriyor.Bunu çözebilmek için ; Hold and Wait’in olması gerekiyor.
  • Process’ler daire ile temsil edilir. Kaynaklar ise Dikdörtgen ile temsil edilir. Process’ten kaynağa doğru bir akış var ise okun yönü bu şekilde ise ; o Process’in o kaynağı istediğini yani request aşamasında olduğunu gösterir. Eğer okun yönü kaynaktan  processe doğru ise ; o kaynağın o anda  o process tarafından kullanıldığını göstermektedir.  Bu durum Resource-Allocation’un özelliğini belirtmektir.
  • Üç tane Process var;4 tane Process var. R4 kaynağının Process’le bağlantılı herhangi bir yapısı yok. Kenarda durmaktadır . Geriye R1,R2 ve R3 kaynakları vardır. R2’nin bir kopyasını P1 diğer kopyasını kullanıyor. P1İN ÇAlışmaya devam edebilmesi için R1 ei htiyacı  var. P2nin çalışmaya devam edebilmesi için R3’e ihtiyacı var. P3 ‘ün çalışmak için birşeye ihtiyacı yoktur. P3 çalışmasını bitireceği zaman R3 boşa çıkacak ve R3 ‘e assign edilecektir.  P2  R1 ,R2 ve R3 ü kullanarak çalışmaya devam edecektir. İşini bitirdiyse R1 boşa çıkacağı için P1 çalışmaya devam edecektir. Graph’ların oklarını yönüne dikkat ederek süreci takip edebiliyorsak; Deadlock yok demektir.
  • Resource Allocation Graph’da okların yönüne dikkat ederek süreci takip edemiyorsak; Deadlock var demektir.
  • Deadlock’ın sonucunda Starvation olabilir. Starvation olabilmesi için Process’e ihtiyaç duyulan kaynağın verilmemesi gerekir.
  • Bir sistemin ; hiçbir şekilde Deadlock’a girmesine izin verilmemesi gerekir. Bunu iki yöntem ile gerçekleştirebilirim. Deadlock Prevention ve Deadlock Avodience.
  • Deadlock Prevention Deadlock’u doğrudan engeller.  Avodience ise; savuşturma ve kaçınma işlemidir.
  • Diğer yöntem ise ; Deadlock’a izin ver , Deadlock olduğunu bil ancak bunu çözmeye çalış.
  • Gerçek hayatta bu sistemlerde kullanıcı processleri arasında oluşabilecek Deadlock’I bu yöntemlerle çözmek mümkün değildir. Eğer iki veya daha fazla kullanıcı Process’I deadlock içerisinde ise bu işlemin kesilmesi ve düzenlenmesi gerekir. Bu durumdaki Processler öldürülüyor. Zaten ilerleyemecekleri , ve çalıştırmaları mümkün olmadığı için öldürme yöntemine gidilmektedir.
  • Prevantion oluşturmak için Deadlock’u sağlayan 4 şarttan birini engellemek yeterli olacaktır. Ancak bunu gerçekleştirmek zordur.
  • İhtiyaç duyulmayan Mutual Exclusion’lardan kaçınmak gerekmektedir.
  • Eğer unsafe bir process ise tahsis işlemi gerçekleştirilmez. Waiting durumuna gönderilir. Sonrasında kaynaklar boşa çıktığında Process Waitin’den Ready’e alınıp uyandırılır.
  • İki tane algoritma mevcuttur. Eğer her kaynaktan tek bir kopya var ise Resource Allocation çıkarılacak. Deadlock Avoidance Algorithm kullanılacaktır.
  • İkinci kullanılan Algoritma ise Banker’s Algoritmasıdır. Bu algoritmanın mantığı şu şekildedir ; Bankaların temel işlemlerinden bir tanesi kredidir. Bankalar kredi verirken verdiği krediyi belirli bir zaman diliminde verilmesi gerekir ve ya belli bir kredi skorunda olması gerekiyor. Bu iki kriteri kontrol etmesi gerekir. Tüm şartlar uyduğu takdirde kredi verilir.
  • Banker’s Algoritmasındaki püf nokta şudur ;her bir kaynak tipinden ne kadar istendiği bir seferde söylenir. Toplam sistem kaynaklarından Banker’s algoritmasının istediği kadar düşülüyor. İstenenlerden herhangi bir tanesi karşılanamaz ise; (hold and wait) kenarına bir; ihtiyaç hanesi açıyor. Process’i beklemeye alıyor.(Waiting.) Bu ihtiyaç listesinden ara ara üstünden geçiyor ve ihtiyaçları karşılanıyor.
  • Wait for Graphları oluşturmak çok kolaydır. Aradaki Resourceler kaldırılıyor ve oklar birleştirliyor.  Ok nereyi gösteriyor ise ; gösterdiği Process bekleniyor demektir. Okun çıktığı taraftaki Process okun gösterdiği taraftaki Process’i bekliyor anlamına gelmektedir.

Ders : İşletim Sistemleri( Doç. Dr. Ali Gökhan Yavuz )

Yıldız Teknik Ünviersitesi Bilgisayar Mühendisliği Bilgi Teknolojileri Programı

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir