Bölüm 7: Kilitlenme
Giriş
Nasıl Çalışalım?
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?
Aşağıdakilerden hangisi kilitlenmenin oluşması için aynı anda sağlanması gereken dört koşuldan biri değildir?
- Karşılıklı dışlama
- Tut ve bekle
- Kesme yok (kaynak zorla geri alınamaz)
- Döngüsel bekleme
- 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
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
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 stratejisi | Bedeli |
|---|---|---|
| Karşılıklı dışlama | Kaynağı paylaşılabilir yapmak (ör. yazıcı için biriktirme/spooling) | Çoğu kaynak (kilit, kayıt) paylaşılamaz |
| Tut ve bekle | Tüm kaynakları başta tek seferde istemek ya da istemeden önce elindekileri bırakmak | Kaynaklar 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 bekleme | Kaynaklara numara verip yalnızca artan sırada istemek | Programcı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ı?
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?
- Karşılıklı dışlama
- Tut ve bekle
- Kesme yok
- Döngüsel bekleme
- 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
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?
- Karşılıklı dışlama
- Tut ve bekle
- Kesme yok
- Döngüsel bekleme
- 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
Aşağıdakilerden hangisi bir kilitlenme önleme (prevention) tekniğidir?
- Kaynak tahsis çizgesinde düzenli olarak döngü aramak
- Bankacı algoritmasıyla her isteği güvenlik testinden geçirmek
- İsteği karşılanamayan sürecin elindeki kaynakları zorla geri almak (kesme)
- Kilitlenme olunca süreçleri teker teker sonlandırmak
- 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
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ç).
Çizge: P2 → R1 → P1 → R3 → P3 zinciri ve R2 → P2. Hiçbir kenar zinciri başa dönmüyor.
P3 hiçbir şey beklemiyor; işini bitirip R3’ü bırakır. R3 bekleyen P1’e atanır.
P1 artık R1 ve R3’e sahip; biter ve ikisini bırakır. R1 P2’ye atanır.
P2 de biter. Tüm süreçler tamamlandı: kilitlenme yok.
Soru 8 · Kaynak Tahsis Çizgesi
Döngü Var, Kilitlenme?
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.
Döngü P1 → R1 → P2 → R2 → P1. Tek örnekli olsaydı bu kesin kilitlenme olurdu.
Ancak P3 hiçbir şey beklemiyor: biter ve R2 örneğini bırakır; bu örnek P2’ye atanır.
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?
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.
Çizgeyi kurun: her “tutar” için kaynak → süreç, her “ister” için süreç → kaynak.
Döngü: P1 → R2 → P2 → R4 → P3 → R1 → P1. P1, P2, P3 birbirini bekliyor.
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
Her kaynak türünden yalnızca bir örnek bulunan bir sistemde kilitlenme tespiti için en uygun ve en ucuz yöntem hangisidir?
- Bankacı algoritmasının güvenlik testi
- Bekleme (wait-for) çizgesinde döngü aramak
- Süreçlerin önceliklerini karşılaştırmak
- Her kaynağın kullanım sayacını izlemek
- 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ü
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
Aşağıdaki kaynaklardan hangisi, sahibine zarar vermeden elinden alınıp sonra geri verilebilen kesilebilir (preemptable) bir kaynaktır?
- Yarısı yazılmış bir CD/DVD yazıcı
- Bir iş parçacığının tuttuğu mutex
- Ana bellekteki sayfa çerçeveleri (takas edilebilir)
- Bir veritabanı kaydı üzerindeki yazma kilidi
- Çı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
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?
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?
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
Kaynak toplamları A = 10, B = 6, C = 8. Tahsis ve en çok istek (Max) aşağıda.
| Süreç | Tahsis | Max |
|---|---|---|
| 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.
Başlangıç: Work = Boşta = (3 2 2). Satırları sırayla tarayıp İhtiyaç ≤ Work olanı arıyoruz.
P0: İhtiyaç (4 2 1) ≤ Work (3 2 2) değil (A yetmiyor) → şimdilik geç.
P1: İhtiyaç (1 2 1) ≤ Work (3 2 2) ✓ → biter, tahsisini geri verir: Work = (5 2 3).
P2: İhtiyaç (4 0 2) ≤ Work (5 2 3) ✓ → biter, tahsisini geri verir: Work = (8 3 3).
P3: İhtiyaç (2 2 1) ≤ Work (8 3 3) ✓ → biter, tahsisini geri verir: Work = (8 5 4).
P4: İhtiyaç (4 2 1) ≤ Work (8 5 4) ✓ → biter, tahsisini geri verir: Work = (9 5 6).
P0: İhtiyaç (4 2 1) ≤ Work (9 5 6) ✓ → biter, tahsisini geri verir: Work = (10 6 8).
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
Ö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.
(a) P3 için: Tahsis (1 3 1), İhtiyaç (1 1 1), Boşta (2 1 2). İlk turda P0, P1, P2 karşılanamaz.
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.
Ardından P1 → (5 4 4), P2 → (8 5 4), P4 → (9 5 6), P0 → (10 6 8). Güvenli: istek verilir.
(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).
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ı
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?
- Güvenli; C’nin isteği verilir
- Güvenli; C’nin isteği reddedilir (güvensiz duruma götürür)
- Güvensiz; C’nin isteği verilir
- Güvensiz; hiçbir istek verilemez
- 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?
Bankacı algoritmasının genel amaçlı İS’lerde (Linux, Windows) pek kullanılmamasının temel nedeni hangisidir?
- Kilitlenmeyi önleyememesi
- Her sürecin en çok kaynak ihtiyacının önceden bilinmesini ve süreç sayısının sabit olmasını gerektirmesi
- Yalnızca tek kaynak türüyle çalışabilmesi
- Kaynakları zorla geri almayı gerektirmesi
- 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
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.
Başlangıç: A = (5 3 4) − (4 3 3) = (1 0 1). İsteği A ile karşılanabilen işaretsiz süreç aranır.
P1: İstek (0 1 0) ≤ A (1 0 1) değil → şimdilik geç.
P2: İstek (1 0 1) ≤ A (1 0 1) ✓ → bitebilir, tahsisini bırakır: A = (3 1 1).
P3: İstek (2 0 1) ≤ A (3 1 1) ✓ → bitebilir, tahsisini bırakır: A = (3 2 3).
P4: İstek (0 0 2) ≤ A (3 2 3) ✓ → bitebilir, tahsisini bırakır: A = (4 3 3).
P1: İstek (0 1 0) ≤ A (4 3 3) ✓ → bitebilir, tahsisini bırakır: A = (5 3 4).
(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?
Çok örnekli kaynaklar için tespit algoritmasının çalıştırılma sıklığıyla ilgili hangisi doğrudur?
- Her kaynak isteğinde çalıştırmak ucuzdur ve önerilen tek yoldur.
- Hiç çalıştırılmasına gerek yoktur; kilitlenme kendiliğinden çözülür.
- 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.
- Yalnızca sistem açılışında bir kez çalıştırılır.
- 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ı
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?
- 8
- 9
- 10
- 12
- 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
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ı
“Devekuşu algoritması” ile anılan yaklaşım nedir ve neden yaygındır?
- Kilitlenmeyi her istekte matrislerle denetlemek; en güvenli yöntem olduğu için
- Sorunu görmezden gelmek; kilitlenme seyrek, önleme ve kaçınmanın maliyeti yüksek olduğu için
- Kaynakları rastgele sırayla dağıtmak; adil olduğu için
- Tüm süreçleri düzenli aralıklarla yeniden başlatmak
- 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 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();- Önce “T1”, sonra “T2” yazılır.
- Hiçbir şey yazılmaz; iki iş parçacığı kilitlenir.
- Yalnızca “T1” yazılır.
- JVM kilitlenmeyi fark edip bir iş parçacığını sonlandırır.
- 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
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
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
- Canlı kilit: İkisi de aktif ve durum değiştiriyor ama ilerleme yok. Çözüm: rastgele bekleme.
- Açlık: Sistem ilerliyor, yalnızca bu iş süresiz erteleniyor. Çözüm: yaşlanma.
- 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ı
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?
- Kilitlerin tutulma süresini artırmak
- Tüm kilitlere bir sıra numarası verip her yerde yalnızca artan sırayla almak
- Kilitlenme olunca uygulamayı yeniden başlatmak
- Kilitleri spinlock’a çevirmek
- İş 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.