Bölüm 7: Kilitlenme

İşletim Sistemleri · Çalışma Soruları
Tanım ve Coffman KoşullarıKaynak Tahsis ÇizgesiKaçınma ve Bankacı AlgoritmasıTespit ve KurtarmaCanlılık ve Kodda Kilitlenme
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Nasıl Çalışalım?

1 · Önce çözünHer slaytta bir soru var. Cevabı açmadan önce kâğıda kendi cevabınızı ve gerekçenizi yazın.
2 · Sonra açın“Cevabı göster” kutusu doğru seçeneği ve kısa bir açıklamayı verir. Yanlış seçeneklerin neden yanlış olduğunu da düşünün.
3 · Adım adım izleyinHesap ve kod sorularından sonra gelen “Adım Adım Çözüm” slaytında ‹ › düğmeleriyle çözümü ilerletin.

Kaynak tahsis çizgesinde süreçler daire, kaynak türleri kutu; kutudaki her nokta bir örnektir. İstek kenarı süreçten kaynağa (kesikli), atama kenarı kaynak örneğinden sürece çizilir. Vektörler (A B C) sırasıyla üç kaynak türünün adetleridir.

Soru 1 · Tanım ve Coffman Koşulları

Hangisi Koşul Değil?

Çoktan seçmeli

Aşağıdakilerden hangisi kilitlenmenin oluşması için aynı anda sağlanması gereken dört koşuldan biri değildir?

  1. Karşılıklı dışlama
  2. Tut ve bekle
  3. Kesme yok (kaynak zorla geri alınamaz)
  4. Döngüsel bekleme
  5. Kaynakların artan numara sırasıyla istenmesi
Cevabı göster

Doğru cevap: E) Kaynakların artan numara sırasıyla istenmesi

Kaynakları artan sırayla istemek bir koşul değil, tam tersine döngüsel beklemeyi kıran önleme kuralıdır. Coffman’ın dört koşulu: karşılıklı dışlama, tut ve bekle, kesme yok, döngüsel bekleme.

Soru 2 · Tanım ve Coffman Koşulları

Dört Koşul, Bir Kütüphane

Açık uçlu

Kilitlenmenin dört koşulunu yazın ve her birini aynı günlük senaryo üzerinden örnekleyin: iki öğrenci aynı ödev için kütüphaneden “Kitap X” ve “Kitap Y”nin tek kopyalarını ödünç almak istiyor.

Cevabı göster
  • Karşılıklı dışlama: Bir kitabın tek kopyası aynı anda yalnızca bir öğrencide olabilir.
  • Tut ve bekle: Ali X’i elinde tutarken Y’yi bekler; Ayşe Y’yi tutarken X’i bekler.
  • Kesme yok: Kütüphane bir kitabı öğrencinin elinden zorla alamaz; ancak öğrenci kendisi iade eder.
  • Döngüsel bekleme: Ali → Y (Ayşe’de) → Ayşe → X (Ali’de) → Ali: kapalı bir bekleme zinciri.

Dördü birlikte sağlandığı için ikisi de ödevi bitiremez; biri bozulursa kilitlenme olmaz.

Soru 3 · Tanım ve Coffman Koşulları

Her Koşulu Kırmak

Açık uçlu

Dört koşulun her biri için onu ortadan kaldıran bir önleme stratejisi ve bu stratejinin bedelini yazın.

Cevabı göster
KoşulÖnleme stratejisiBedeli
Karşılıklı dışlamaKaynağı paylaşılabilir yapmak (ör. yazıcı için biriktirme/spooling)Çoğu kaynak (kilit, kayıt) paylaşılamaz
Tut ve bekleTüm kaynakları başta tek seferde istemek ya da istemeden önce elindekileri bırakmakKaynaklar boşta tutulur; açlık
Kesme yokİsteği karşılanamayan süreçten kaynakları geri almak (kesme)Yalnız durumu kaydedilebilen kaynaklarda (CPU, bellek)
Döngüsel beklemeKaynaklara numara verip yalnızca artan sırada istemekProgramcıya sıra disiplini; sıra bazen doğal değil

Soru 4 · Tanım ve Coffman Koşulları

Hangi Koşul Kırıldı?

Çoktan seçmeli

Bir sistemde kural şu: süreç yeni bir kaynak istemeden önce elindeki bütün kaynakları bırakmak, sonra hepsini birlikte yeniden istemek zorunda. Bu kural hangi koşulu ortadan kaldırır?

  1. Karşılıklı dışlama
  2. Tut ve bekle
  3. Kesme yok
  4. Döngüsel bekleme
  5. Hiçbirini; yalnızca açlığı önler
Cevabı göster

Doğru cevap: B) Tut ve bekle

Süreç hiçbir zaman bir kaynağı tutarken başka bir kaynağı beklemez; tut ve bekle koşulu sağlanamaz. Bedel: kaynakların gereksiz bırakılıp alınması ve büyük istekleri olan süreçlerin açlığı.

Soru 5 · Tanım ve Coffman Koşulları

Yazıcı Biriktirme

Çoktan seçmeli

Süreçler yazıcıya doğrudan erişmek yerine çıktılarını diskteki bir biriktirme (spool) dizinine yazıyor; yazıcıyı yalnızca biriktirme daemon’u kullanıyor. Bu tasarım, yazıcı için hangi koşulu ortadan kaldırır?

  1. Karşılıklı dışlama
  2. Tut ve bekle
  3. Kesme yok
  4. Döngüsel bekleme
  5. Sınırlı bekleme
Cevabı göster

Doğru cevap: A) Karşılıklı dışlama

Süreçler açısından yazıcı artık paylaşılabilir bir kaynaktır: herkes aynı anda iş bırakabilir, gerçek aygıtı tek bir daemon kullanır. Not: biriktirme alanı (disk) dolarsa yine çekişme doğabilir.

Soru 6 · Tanım ve Coffman Koşulları

Gerçek Önleme Tekniği

Çoktan seçmeli

Aşağıdakilerden hangisi bir kilitlenme önleme (prevention) tekniğidir?

  1. Kaynak tahsis çizgesinde düzenli olarak döngü aramak
  2. Bankacı algoritmasıyla her isteği güvenlik testinden geçirmek
  3. İsteği karşılanamayan sürecin elindeki kaynakları zorla geri almak (kesme)
  4. Kilitlenme olunca süreçleri teker teker sonlandırmak
  5. Kilitlenme seyrek olduğu için sorunu görmezden gelmek
Cevabı göster

Doğru cevap: C) İsteği karşılanamayan sürecin elindeki kaynakları zorla geri almak (kesme)

Önleme, dört koşuldan birini yapısal olarak imkânsız kılar; kaynakların geri alınabilmesi “kesme yok” koşulunu kırar. Döngü arama tespittir, Bankacı kaçınmadır, sonlandırma kurtarmadır, görmezden gelmek devekuşu yaklaşımıdır.

Soru 7 · Kaynak Tahsis Çizgesi

Çizge Çiz: Döngü Yok

Çizim ve analiz

Her kaynak türünden bir örnek var. P1, R1’i tutuyor ve R3’ü istiyor. P2, R2’yi tutuyor ve R1’i istiyor. P3, R3’ü tutuyor ve başka bir şey istemiyor. Kaynak tahsis çizgesini çizin. Kilitlenme var mı? Varsa hangi sırayla bitebilirler?

Cevabı göster

Kenarlar: R1 → P1, P1 → R3, R2 → P2, P2 → R1, R3 → P3. Çizgede döngü yok, dolayısıyla kilitlenme yok. Zincir P2 → R1 → P1 → R3 → P3’te biter: P3 çalışıp R3’ü bırakır; R3 P1’e verilir, P1 bitip R1’i bırakır; sonra P2 biter. Sıra: P3, P1, P2.

Soru 7 · Çözüm

Adım Adım Çözüm

Kesikli ok: istek. Düz ok: atama (kaynak örneği → süreç).

R2R1R3P2P1P3

Çizge: P2 → R1 → P1 → R3 → P3 zinciri ve R2 → P2. Hiçbir kenar zinciri başa dönmüyor.

R2R1R3P2P1P3

P3 hiçbir şey beklemiyor; işini bitirip R3’ü bırakır. R3 bekleyen P1’e atanır.

R2R1R3P2P1P3

P1 artık R1 ve R3’e sahip; biter ve ikisini bırakır. R1 P2’ye atanır.

R2R1R3P2P1P3

P2 de biter. Tüm süreçler tamamlandı: kilitlenme yok.

Soru 8 · Kaynak Tahsis Çizgesi

Döngü Var, Kilitlenme?

Çizim ve analiz

R1’in 1, R2’nin 2 örneği var. P1 bir R2 örneği tutuyor ve R1’i istiyor. P2 R1’i tutuyor ve bir R2 istiyor. P3 diğer R2 örneğini tutuyor, başka istek yapmıyor. Çizgede döngü var mı? Sistem kilitlenmiş midir?

Cevabı göster

Döngü var: P1 → R1 → P2 → R2 → P1. Ama R2’nin bir örneği döngü dışındaki P3’te. P3 bitince o örnek P2’ye verilir, P2 biter ve R1’i bırakır, ardından P1 biter. Kilitlenme yok. Çok örnekli kaynaklarda döngü gereklidir ama yeterli değildir.

Soru 8 · Çözüm

Adım Adım Çözüm

Kırmızı kenarlar döngüyü oluşturuyor.

R1R2P1P2P3

Döngü P1 → R1 → P2 → R2 → P1. Tek örnekli olsaydı bu kesin kilitlenme olurdu.

R1R2P1P2P3

Ancak P3 hiçbir şey beklemiyor: biter ve R2 örneğini bırakır; bu örnek P2’ye atanır.

R1R2P1P2P3

P2 gereksinimini aldı; biter, R1 ve R2’yi bırakır. R1 P1’e atanır ve P1 de biter: kilitlenme yok.

Soru 9 · Kaynak Tahsis Çizgesi

Kim Kilitlendi?

Çizim ve analiz

Tüm kaynaklar tek örnekli. P1 R1’i tutup R2’yi; P2 R2’yi tutup R4’ü; P3 R4’ü tutup R1’i istiyor. P4 R3’ü tutuyor ve istek yapmıyor. Kilitlenme var mı? Hangi süreçler kilitli? Bekleme (wait-for) çizgesini yazın.

Cevabı göster

Kilitlenme var. Döngü P1 → R2 → P2 → R4 → P3 → R1 → P1; her kaynak tek örnekli olduğundan döngü kilitlenmenin kanıtıdır. Kilitli süreçler P1, P2, P3; P4 döngüde değildir, bitebilir. Bekleme çizgesi (kaynaklar çıkarılır): P1 → P2 → P3 → P1.

Soru 9 · Çözüm

Adım Adım Çözüm

Tek örnekli kaynaklarda döngü = kilitlenme. Bekleme çizgesi, kaynak düğümleri kaldırılarak elde edilir.

R2R4R1R3P1P2P3P4

Çizgeyi kurun: her “tutar” için kaynak → süreç, her “ister” için süreç → kaynak.

R2R4R1R3P1P2P3P4

Döngü: P1 → R2 → P2 → R4 → P3 → R1 → P1. P1, P2, P3 birbirini bekliyor.

R2R4R1R3P1P2P3P4

P4 bitip R3’ü bırakır, ama bunu bekleyen yok: döngü çözülmez. Kurtarma için P1, P2, P3’ten biri sonlandırılmalı ya da kaynağı geri alınmalıdır.

Soru 10 · Kaynak Tahsis Çizgesi

Tek Örnekte Tespit

Çoktan seçmeli

Her kaynak türünden yalnızca bir örnek bulunan bir sistemde kilitlenme tespiti için en uygun ve en ucuz yöntem hangisidir?

  1. Bankacı algoritmasının güvenlik testi
  2. Bekleme (wait-for) çizgesinde döngü aramak
  3. Süreçlerin önceliklerini karşılaştırmak
  4. Her kaynağın kullanım sayacını izlemek
  5. Sayfa tablolarını taramak
Cevabı göster

Doğru cevap: B) Bekleme (wait-for) çizgesinde döngü aramak

Tek örnekli durumda döngü kilitlenmenin hem gerekli hem yeterli koşuludur. Kaynak düğümleri kaldırılarak elde edilen bekleme çizgesinde DFS ile döngü aramak O(n²) civarı bir maliyettir. Çok örnekli kaynaklarda ise matris tabanlı tespit algoritması gerekir.

Soru 11 · Kaynak Tahsis Çizgesi

Çok Örnekli Döngü

Doğru / Yanlış

Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.

“Kaynak türlerinin birden çok örneği olan bir sistemde, kaynak tahsis çizgesinde döngü bulunması kilitlenmenin kesin kanıtıdır.”

Cevabı göster

Yanlış. Çok örnekli kaynaklarda döngü yalnızca olası bir kilitlenmeye işaret eder. Döngü dışındaki bir süreç bitip örneğini bırakırsa döngü çözülür (Soru 8). Kesin karar için tespit algoritması çalıştırılmalıdır.

Soru 12 · Tanım ve Coffman Koşulları

Kesilebilir Kaynak

Çoktan seçmeli

Aşağıdaki kaynaklardan hangisi, sahibine zarar vermeden elinden alınıp sonra geri verilebilen kesilebilir (preemptable) bir kaynaktır?

  1. Yarısı yazılmış bir CD/DVD yazıcı
  2. Bir iş parçacığının tuttuğu mutex
  3. Ana bellekteki sayfa çerçeveleri (takas edilebilir)
  4. Bir veritabanı kaydı üzerindeki yazma kilidi
  5. Çıktısının yarısını basmış bir yazıcı
Cevabı göster

Doğru cevap: C) Ana bellekteki sayfa çerçeveleri (takas edilebilir)

Bellek, içeriği diske takas edilip sonra geri yüklenebildiği için kesilebilirdir; CPU da öyle. Yazıcı, CD yazıcı ve kilitler işin ortasında alınırsa sonuç bozulur: kesilemez kaynaklardır ve kilitlenmeler genellikle bunlarla oluşur.

Soru 13 · Tanım ve Coffman Koşulları

Önleme, Kaçınma, Tespit

Açık uçlu

Kilitlenmeyle başa çıkmada önleme, kaçınma ve tespit-kurtarma yaklaşımlarını; ne zaman devreye girdikleri, ne bilgisi gerektirdikleri ve bedelleri açısından karşılaştırın.

Cevabı göster
  • Önleme: Tasarım aşamasında dört koşuldan biri imkânsız kılınır (ör. kilit sıralaması). Ek bilgi gerekmez; kaynak kullanımı ve esneklik düşer.
  • Kaçınma: Koşulların hepsine izin verilir; her istekte sistemin güvenli kalıp kalmayacağı sınanır (Bankacı). Her sürecin en çok ihtiyacı önceden bilinmelidir; her istekte hesap yükü vardır. Kilitlenme hiç oluşmaz.
  • Tespit-kurtarma: Kaynaklar serbestçe verilir; kilitlenme oluşursa düzenli çalışan algoritma bulur, süreç sonlandırma ya da geri sarma ile çözülür. Ön bilgi gerekmez; kaybedilen iş ve kurtarma maliyeti vardır.

Soru 14 · Kaçınma ve Bankacı Algoritması

Bankacı Önleme mi?

Doğru / Yanlış

Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.

“Bankacı algoritması bir kilitlenme önleme yöntemidir; dört koşuldan birini ortadan kaldırır.”

Cevabı göster

Yanlış. Bankacı algoritması kaçınma (avoidance) yöntemidir: dört koşulun hepsine izin verir, ancak her isteği verilmeden önce “sonuçtaki durum güvenli mi?” testinden geçirir. Önleme ise koşullardan birini tasarımla imkânsız kılar.

Soru 15 · Kaçınma ve Bankacı Algoritması

Güvensiz = Kilitli mi?

Doğru / Yanlış

Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.

“Bankacı algoritmasına göre güvensiz bir durumdaki sistem kilitlenmiş demektir.”

Cevabı göster

Yanlış. Güvensiz durum, İS’nin herkesin bitmesini garanti edemediği durumdur; süreçler en çok isteklerini yapmayabilir ve kilitlenme hiç oluşmayabilir. Kilitlenmiş durumlar güvensiz durumların bir alt kümesidir. Kaçınma, güvensiz duruma hiç girmemeyi hedefler; kilitlenmeye izin verip sonra çözmek tespit-kurtarma yaklaşımıdır.

Soru 16 · Kaçınma ve Bankacı Algoritması

Güvenlik Testi

Hesaplama

Kaynak toplamları A = 10, B = 6, C = 8. Tahsis ve en çok istek (Max) aşağıda.

SüreçTahsisMax
P0(1 1 2)(5 3 3)
P1(2 0 1)(3 2 2)
P2(3 1 0)(7 1 2)
P3(0 2 1)(2 4 2)
P4(1 0 2)(5 2 3)

Boştaki vektörü ve ihtiyaç matrisini bulun. Durum güvenli mi? Güvenliyse bir güvenli sıra verin.

Cevabı göster

Boşta = (10 6 8) − (7 4 6) = (3 2 2). İhtiyaç = Max − Tahsis: P0 (4 2 1), P1 (1 2 1), P2 (4 0 2), P3 (2 2 1), P4 (4 2 1).

Güvenli. Sıra: P1, P2, P3, P4, P0 (P1 ile başlayan başka sıralar da vardır, ör. P1, P3, P2, …). P0 başta bitemez: A’dan 4 gerekir, 3 var.

Soru 16 · Çözüm

Adım Adım Çözüm

Güvenlik algoritması: İhtiyaç ≤ Work olan bitmemiş süreci bul, bitmiş say, tahsisini Work’e ekle; tekrarla.

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1P23 1 04 0 2P30 2 12 2 1P41 0 24 2 1Work = (3 2 2)İhtiyaç = Max − Tahsis

Başlangıç: Work = Boşta = (3 2 2). Satırları sırayla tarayıp İhtiyaç ≤ Work olanı arıyoruz.

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1P23 1 04 0 2P30 2 12 2 1P41 0 24 2 1Work = (3 2 2)

P0: İhtiyaç (4 2 1) ≤ Work (3 2 2) değil (A yetmiyor) → şimdilik geç.

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1✓P23 1 04 0 2P30 2 12 2 1P41 0 24 2 1Work = (5 2 3)

P1: İhtiyaç (1 2 1) ≤ Work (3 2 2) ✓ → biter, tahsisini geri verir: Work = (5 2 3).

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1✓P23 1 04 0 2✓P30 2 12 2 1P41 0 24 2 1Work = (8 3 3)

P2: İhtiyaç (4 0 2) ≤ Work (5 2 3) ✓ → biter, tahsisini geri verir: Work = (8 3 3).

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1✓P23 1 04 0 2✓P30 2 12 2 1✓P41 0 24 2 1Work = (8 5 4)

P3: İhtiyaç (2 2 1) ≤ Work (8 3 3) ✓ → biter, tahsisini geri verir: Work = (8 5 4).

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1✓P23 1 04 0 2✓P30 2 12 2 1✓P41 0 24 2 1✓Work = (9 5 6)

P4: İhtiyaç (4 2 1) ≤ Work (8 5 4) ✓ → biter, tahsisini geri verir: Work = (9 5 6).

SüreçTahsisİhtiyaçBittiP01 1 24 2 1✓P12 0 11 2 1✓P23 1 04 0 2✓P30 2 12 2 1✓P41 0 24 2 1✓Work = (10 6 8)

P0: İhtiyaç (4 2 1) ≤ Work (9 5 6) ✓ → biter, tahsisini geri verir: Work = (10 6 8).

SüreçTahsisİhtiyaçBittiP01 1 24 2 1✓P12 0 11 2 1✓P23 1 04 0 2✓P30 2 12 2 1✓P41 0 24 2 1✓Work = (10 6 8)Tüm süreçler bitti → GÜVENLİ

Bulunan güvenli sıra: P1, P2, P3, P4, P0. Work sonunda kaynak toplamına (10 6 8) eşit olur.

Soru 17 · Kaçınma ve Bankacı Algoritması

İki İstek

Hesaplama

Önceki sorudaki duruma dönün (Boşta (3 2 2)). (a) P3 (1 1 0) isterse istek hemen verilir mi? (b) Bunun yerine P4 yalnızca (0 1 0) isterse verilir mi?

Cevabı göster

(a) Verilir. İstek ≤ İhtiyaç (2 2 1) ve ≤ Boşta. Varsayımsal durumda Boşta (2 1 2), P3’ün ihtiyacı (1 1 1): P3 → (3 4 3), sonra P1, P2, P4, P0 bitebilir. Güvenli sıra P3, P1, P2, P4, P0.

(b) Verilmez, P4 bekletilir. Boşta (3 1 2) olur; B’den herkesin (P2 hariç) en az 2’ye, P2’nin A’dan 4’e ihtiyacı var. Hiçbir satır karşılanamaz → güvensiz. Küçük bir istek bile reddedilebilir.

Soru 17 · Çözüm

Adım Adım Çözüm

İstek algoritması: İstek ≤ İhtiyaç ve İstek ≤ Boşta ise isteği varsayımsal olarak ver ve güvenlik testini çalıştır.

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1P23 1 04 0 2P31 3 11 1 1P41 0 24 2 1Work = (2 1 2)(a) P3’e (1 1 0) verildi varsayımı

(a) P3 için: Tahsis (1 3 1), İhtiyaç (1 1 1), Boşta (2 1 2). İlk turda P0, P1, P2 karşılanamaz.

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1P23 1 04 0 2P31 3 11 1 1✓P41 0 24 2 1Work = (3 4 3)

P3: (1 1 1) ≤ (2 1 2) ✓ → Work = (3 4 3). P3 tuttuğu B’leri bırakınca P1’in yolu açılır.

SüreçTahsisİhtiyaçBittiP01 1 24 2 1✓P12 0 11 2 1✓P23 1 04 0 2✓P31 3 11 1 1✓P41 0 24 2 1✓Work = (10 6 8)Güvenli → istek VERİLİR

Ardından P1 → (5 4 4), P2 → (8 5 4), P4 → (9 5 6), P0 → (10 6 8). Güvenli: istek verilir.

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1P23 1 04 0 2P30 2 12 2 1P41 1 24 1 1Work = (3 1 2)(b) P4’e (0 1 0) verildi varsayımı

(b) Boşta (3 1 2). P0, P1, P3, P4 için B = 2 gerekli (1 var); P2 için A = 4 gerekli (3 var).

SüreçTahsisİhtiyaçBittiP01 1 24 2 1P12 0 11 2 1P23 1 04 0 2P30 2 12 2 1P41 1 24 1 1Work = (3 1 2)Hiçbir satır karşılanamaz → GÜVENSİZ → P4 bekler

Hiçbir süreç bitemiyor: durum güvensiz. İstek geri alınır, P4 kaynak boşalana kadar bekletilir.

Soru 18 · Kaçınma ve Bankacı Algoritması

Tek Kaynaklı Bankacı

Hesaplama

Toplam 14 birimlik tek tür kaynak var. A: 4 birim tutuyor (en çok 9), B: 3 (en çok 5), C: 2 (en çok 8), D: 1 (en çok 6). Durum güvenli mi? Bu durumda C 3 birim daha isterse istek verilmeli mi?

  1. Güvenli; C’nin isteği verilir
  2. Güvenli; C’nin isteği reddedilir (güvensiz duruma götürür)
  3. Güvensiz; C’nin isteği verilir
  4. Güvensiz; hiçbir istek verilemez
  5. Sistem zaten kilitlenmiştir
Cevabı göster

Doğru cevap: B) Güvenli; C’nin isteği reddedilir (güvensiz duruma götürür)

Boşta 14 − 10 = 4. İhtiyaçlar: A 5, B 2, C 6, D 5. B (2 ≤ 4) biter → boşta 7; A (5) → 11; C (6) → 13; D → 14. Güvenli, ör. sıra B, A, C, D.

C’ye 3 verilirse boşta 1 kalır; en küçük ihtiyaç (B: 2) bile karşılanamaz → güvensiz; istek reddedilir, C bekler.

Soru 19 · Kaçınma ve Bankacı Algoritması

Bankacı Neden Seyrek?

Çoktan seçmeli

Bankacı algoritmasının genel amaçlı İS’lerde (Linux, Windows) pek kullanılmamasının temel nedeni hangisidir?

  1. Kilitlenmeyi önleyememesi
  2. Her sürecin en çok kaynak ihtiyacının önceden bilinmesini ve süreç sayısının sabit olmasını gerektirmesi
  3. Yalnızca tek kaynak türüyle çalışabilmesi
  4. Kaynakları zorla geri almayı gerektirmesi
  5. Döngüsel beklemeye izin vermemesi
Cevabı göster

Doğru cevap: B) Her sürecin en çok kaynak ihtiyacının önceden bilinmesini ve süreç sayısının sabit olmasını gerektirmesi

Gerçek sistemlerde süreçler en çok isteklerini bilmez, süreç ve kaynak sayısı sürekli değişir; her istekte O(m·n²) güvenlik testi de ek yüktür. Bu yüzden genel amaçlı sistemler çoğunlukla sorunu görmezden gelir (devekuşu) ya da kilit sıralamasıyla önler.

Soru 20 · Tespit ve Kurtarma

Tespit Matrisleri

Hesaplama

Kaynak toplamları E = (5 3 4).

SüreçTahsis Cİstek R
P1(1 0 1)(0 1 0)
P2(2 1 0)(1 0 1)
P3(0 1 2)(2 0 1)
P4(1 1 0)(0 0 2)

(a) Sistem kilitlenmiş mi? (b) P2’nin isteği (1 1 1)’e çıkarsa ne olur?

Cevabı göster

Boşta A = E − ΣC = (1 0 1).

(a) Kilitlenme yok. P2 (1 0 1) ≤ A → A = (3 1 1); P3 → (3 2 3); P4 → (4 3 3); P1 → (5 3 4). Sıra P2, P3, P4, P1.

(b) Kilitlenme var. A = (1 0 1) iken P1 ve P2 B ister (B = 0), P3 A’dan 2, P4 C’den 2 ister: hiçbir satır karşılanamaz → dördü de kilitli.

Soru 20 · Çözüm

Adım Adım Çözüm

Tespit algoritması Bankacı’nın güvenlik testine benzer; ama İhtiyaç yerine şu anki İstek matrisi kullanılır.

SüreçTahsisİstekBittiP11 0 10 1 0P22 1 01 0 1P30 1 22 0 1P41 1 00 0 2A (boşta) = (1 0 1)A = E − ΣC

Başlangıç: A = (5 3 4) − (4 3 3) = (1 0 1). İsteği A ile karşılanabilen işaretsiz süreç aranır.

SüreçTahsisİstekBittiP11 0 10 1 0P22 1 01 0 1P30 1 22 0 1P41 1 00 0 2A (boşta) = (1 0 1)

P1: İstek (0 1 0) ≤ A (1 0 1) değil → şimdilik geç.

SüreçTahsisİstekBittiP11 0 10 1 0P22 1 01 0 1✓P30 1 22 0 1P41 1 00 0 2A (boşta) = (3 1 1)

P2: İstek (1 0 1) ≤ A (1 0 1) ✓ → bitebilir, tahsisini bırakır: A = (3 1 1).

SüreçTahsisİstekBittiP11 0 10 1 0P22 1 01 0 1✓P30 1 22 0 1✓P41 1 00 0 2A (boşta) = (3 2 3)

P3: İstek (2 0 1) ≤ A (3 1 1) ✓ → bitebilir, tahsisini bırakır: A = (3 2 3).

SüreçTahsisİstekBittiP11 0 10 1 0P22 1 01 0 1✓P30 1 22 0 1✓P41 1 00 0 2✓A (boşta) = (4 3 3)

P4: İstek (0 0 2) ≤ A (3 2 3) ✓ → bitebilir, tahsisini bırakır: A = (4 3 3).

SüreçTahsisİstekBittiP11 0 10 1 0✓P22 1 01 0 1✓P30 1 22 0 1✓P41 1 00 0 2✓A (boşta) = (5 3 4)

P1: İstek (0 1 0) ≤ A (4 3 3) ✓ → bitebilir, tahsisini bırakır: A = (5 3 4).

SüreçTahsisİstekBittiP11 0 10 1 0P22 1 01 1 1P30 1 22 0 1P41 1 00 0 2A (boşta) = (1 0 1)(b) P2’nin isteği (1 1 1)

(b) A = (1 0 1): P1 ve P2 için B yok, P3 için A yetmez, P4 için C yetmez. Hiçbir süreç işaretlenemez → P1–P4 kilitli.

Soru 21 · Tespit ve Kurtarma

Tespit Ne Sıklıkla?

Çoktan seçmeli

Çok örnekli kaynaklar için tespit algoritmasının çalıştırılma sıklığıyla ilgili hangisi doğrudur?

  1. Her kaynak isteğinde çalıştırmak ucuzdur ve önerilen tek yoldur.
  2. Hiç çalıştırılmasına gerek yoktur; kilitlenme kendiliğinden çözülür.
  3. Her istekte çalıştırmak kilitlenmeyi hemen yakalar ama pahalıdır; pratikte belirli aralıklarla ya da CPU kullanımı belirgin düştüğünde çalıştırılır.
  4. Yalnızca sistem açılışında bir kez çalıştırılır.
  5. Yalnızca tek örnekli kaynaklarda çalışır.
Cevabı göster

Doğru cevap: C) Her istekte çalıştırmak kilitlenmeyi hemen yakalar ama pahalıdır; pratikte belirli aralıklarla ya da CPU kullanımı belirgin düştüğünde çalıştırılır.

Tespit O(m·n²) maliyetlidir. Sık çalıştırmak kilitlenmeyi erken bulur ve kurtarmayı kolaylaştırır; seyrek çalıştırmak ucuzdur ama kilitli süreçler uzun süre bekler ve birden çok döngü birikebilir.

Soru 22 · Tespit ve Kurtarma

Kilitlenmesiz Kaynak Sayısı

Hesaplama

4 süreç aynı türden kaynakları (ör. teyp sürücüsü) kullanıyor; her süreç aynı anda en çok 3 sürücüye ihtiyaç duyabiliyor. Ne olursa olsun kilitlenme oluşmaması için sistemde en az kaç sürücü bulunmalıdır?

  1. 8
  2. 9
  3. 10
  4. 12
  5. 13
Cevabı göster

Doğru cevap: B) 9

En kötü durumda her süreç 3 − 1 = 2 sürücü tutup bir tane daha bekler: 4 × 2 = 8 sürücü dağıtılmıştır. Bir sürücü daha olursa biri ihtiyacını tamamlayıp biter ve kaynaklarını bırakır. En az n·(k − 1) + 1 = 4·2 + 1 = 9.

Soru 23 · Tespit ve Kurtarma

Kurtarma Yöntemleri

Açık uçlu

Tespit algoritması bir kilitlenme buldu. Kurtarma için hangi yöntemler kullanılabilir? Sonlandırılacak ya da kaynağı alınacak “kurban” süreç hangi ölçütlere göre seçilir?

Cevabı göster
  • Süreç sonlandırma: kilitli süreçlerin hepsini birden ya da döngü kırılana kadar birer birer sonlandırmak (her adımda tespit yeniden çalışır).
  • Kaynak geri alma (kesme): bir süreçten kaynağı alıp başkasına vermek; sürecin durumu korunabilmelidir.
  • Geri sarma (rollback): düzenli denetim noktalarına (checkpoint) dönüp süreci oradan yeniden başlatmak.

Kurban ölçütleri: öncelik, şu ana kadarki ve kalan çalışma süresi, tuttuğu ve daha isteyeceği kaynak sayısı, etkileşimli mi toplu mu olduğu. Aynı süreç sürekli seçilirse açlık olur; seçilme sayısı ölçüte eklenir.

Soru 24 · Tespit ve Kurtarma

Devekuşu Yaklaşımı

Çoktan seçmeli

“Devekuşu algoritması” ile anılan yaklaşım nedir ve neden yaygındır?

  1. Kilitlenmeyi her istekte matrislerle denetlemek; en güvenli yöntem olduğu için
  2. Sorunu görmezden gelmek; kilitlenme seyrek, önleme ve kaçınmanın maliyeti yüksek olduğu için
  3. Kaynakları rastgele sırayla dağıtmak; adil olduğu için
  4. Tüm süreçleri düzenli aralıklarla yeniden başlatmak
  5. Döngüsel beklemeyi donanımla engellemek
Cevabı göster

Doğru cevap: B) Sorunu görmezden gelmek; kilitlenme seyrek, önleme ve kaçınmanın maliyeti yüksek olduğu için

Genel amaçlı İS’lerin çoğu, uygulama düzeyindeki kilitlenmeleri önlemek için çekirdekte özel bir mekanizma çalıştırmaz; sorun nadir ve çözümü pahalıdır. Kullanıcı süreci sonlandırır; çekirdek kendi içinde kilit sıralaması gibi önleme kurallarına uyar.

Soru 25 · Canlılık ve Kodda Kilitlenme

Ters Sıralı synchronized

Kod izleme

Kod büyük olasılıkla ne yapar? Nasıl düzeltilir? (uyu: Thread.sleep, yaz: println)

Object a = new Object();
Object b = new Object();
Thread t1 = new Thread(() -> {
  synchronized (a) {
    uyu(50);
    synchronized (b) { yaz("T1"); }
  }
});
Thread t2 = new Thread(() -> {
  synchronized (b) {
    uyu(50);
    synchronized (a) { yaz("T2"); }
  }
});
t1.start(); t2.start();
  1. Önce “T1”, sonra “T2” yazılır.
  2. Hiçbir şey yazılmaz; iki iş parçacığı kilitlenir.
  3. Yalnızca “T1” yazılır.
  4. JVM kilitlenmeyi fark edip bir iş parçacığını sonlandırır.
  5. Derleme hatası oluşur.
Cevabı göster

Doğru cevap: B) Hiçbir şey yazılmaz; iki iş parçacığı kilitlenir.

t1 a’yı, t2 b’yi tutarken birbirinin kilidini bekler (denendiğinde ikisi de BLOCKED). Düzeltme: kilitleri her yerde aynı sırayla almak.

Soru 25 · Çözüm

Adım Adım Çözüm

50 ms uyku, iki iş parçacığının ilk kilitlerini neredeyse kesin olarak birlikte almasını sağlar.

İki kilit nesnesi oluşturulur.

t1 başlar ve a’nın kilidini alır.

t2 başlar ve b’nin kilidini alır. İkisi de uyuyor, kilitleri bırakmadan.

t1 uyanır, b’yi ister: t2’de → bloke.

t2 uyanır, a’yı ister: t1’de → bloke. Döngüsel bekleme: kilitlenme, hiçbir satır yazılmaz.

Object a = new Object();
Object b = new Object();
Thread t1 = new Thread(() -> {
  synchronized (a) {
    uyu(50);
    synchronized (b) { yaz("T1"); }
  }
});
Thread t2 = new Thread(() -> {
  synchronized (b) {
    uyu(50);
    synchronized (a) { yaz("T2"); }
  }
});
t1.start(); t2.start();

Soru 26 · Canlılık ve Kodda Kilitlenme

Kendi Kendini Kilitlemek

Doğru / Yanlış

Aşağıdaki ifade doğru mu, yanlış mı? Gerekçenizi yazın.

“Özyinelemeli (recursive) olmayan bir mutex’i zaten tutan iş parçacığı aynı mutex’i ikinci kez kilitlemeye çalışırsa kendi kendini kilitler.”

Cevabı göster

Doğru. Mutex sahibinin kendisi olduğunu bilmez ya da buna izin vermez; ikinci lock mutex açılana kadar bekler, ama açabilecek tek iş parçacığı bekleyenin kendisidir. Tek süreçli bir kilitlenmedir; özyinelemeli mutex (Java ReentrantLock, synchronized) sayaç tutarak buna izin verir.

Soru 27 · Canlılık ve Kodda Kilitlenme

Hatayı Sınıflandır

Açık uçlu

Her senaryonun kilitlenme, canlı kilit ya da açlıktan hangisi olduğunu gerekçesiyle yazın.
(1) Dar bir koridorda karşılaşan iki kişi aynı anda hep aynı tarafa geçip duruyor.
(2) Düşük öncelikli bir yedekleme işi, sürekli gelen yüksek öncelikli işler yüzünden günlerdir çalışamıyor.
(3) İki banka işlemi birbirinin kilitlediği hesap kaydını bekliyor.

Cevabı göster
  1. Canlı kilit: İkisi de aktif ve durum değiştiriyor ama ilerleme yok. Çözüm: rastgele bekleme.
  2. Açlık: Sistem ilerliyor, yalnızca bu iş süresiz erteleniyor. Çözüm: yaşlanma.
  3. Kilitlenme: Karşılıklı bekleme döngüsü; ikisi de bloke. Çözüm: kilit sıralaması ya da işlemlerden birini geri sarmak.

Soru 28 · Canlılık ve Kodda Kilitlenme

Kilit Sıralaması

Çoktan seçmeli

Bir uygulamada hesap_kilidi, log_kilidi ve önbellek_kilidi farklı fonksiyonlarda farklı sıralarla alınıyor ve ara sıra kilitlenme oluyor. En pratik kalıcı çözüm hangisidir?

  1. Kilitlerin tutulma süresini artırmak
  2. Tüm kilitlere bir sıra numarası verip her yerde yalnızca artan sırayla almak
  3. Kilitlenme olunca uygulamayı yeniden başlatmak
  4. Kilitleri spinlock’a çevirmek
  5. İş parçacığı önceliklerini eşitlemek
Cevabı göster

Doğru cevap: B) Tüm kilitlere bir sıra numarası verip her yerde yalnızca artan sırayla almak

Küresel kilit sıralaması döngüsel beklemeyi imkânsız kılar; Linux çekirdeğinde belgelenen kilit sıraları ve lockdep aracı bu kuralı denetler. Spinlock’a çevirmek kilitlenmeyi çözmez, yalnızca beklemeyi CPU yakan bir döngüye dönüştürür.

Özet

Özet: Sık Yapılan Hatalar

  • Bankacı algoritmasını önleme saymak: Bankacı kaçınmadır; kaynak tahsis çizgesi ve tespit matrisleri tespittir.
  • Çizgede kenar yönlerini ters çizmek: istek süreç → kaynak, atama kaynak (örneği) → süreç.
  • Çok örnekli kaynaklarda döngüyü kesin kilitlenme saymak; tek örnekli durumda ise döngüyü “olası” saymak.
  • Güvensiz durumu kilitlenmiş durum sanmak: güvensiz yalnızca garanti yok demektir.
  • Güvenlik testinde Max’ı kullanmak: karşılaştırma İhtiyaç = Max − Tahsis ile yapılır; tespitte ise anlık İstek ile.
  • İsteği değerlendirirken önce İstek ≤ İhtiyaç ve İstek ≤ Boşta koşullarını sınamayı unutmak.
  • Öncelik terslemesini ya da canlı kilidi kilitlenme saymak: ikisinde de döngüsel bloke bekleme yoktur.

Son

Bölüm 7: Kilitlenme
Sonraki: Bölüm 8 Çalışma Soruları
1 / 1