Bölüm 6: Senkronizasyon

İşletim Sistemleri · Çalışma Soruları
Yarış Durumu ve Kritik BölgeDonanım Desteği ve SpinlockSemafor ve MutexKlasik ProblemlerÖncelik Terslemesi ve Canlılık
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.

Kod sorularında satırlar elle izlenir; her adım tek bir makine işlemi kabul edilir. Semaforlarda wait (P, down) değeri 1 azaltır ve sonuç negatifse çağıranı bloke eder; signal (V, up) değeri 1 artırır ve bekleyen varsa birini uyandırır.

Soru 1 · Yarış Durumu ve Kritik Bölge

Kaybolan Artışlar

Çoktan seçmeli

İki iş parçacığı, paylaşılan sayac değişkenini kilitsiz olarak 500’er kez artırıyor. Program her çalıştırmada 1000 yerine 734, 912 gibi farklı sonuçlar veriyor. Bu olgunun adı nedir?

  1. Kilitlenme (deadlock)
  2. Yarış durumu (race condition)
  3. Açlık (starvation)
  4. Canlı kilit (livelock)
  5. Öncelik terslemesi
Cevabı göster

Doğru cevap: B) Yarış durumu (race condition)

Sonuç, paylaşılan veriye eşzamanlı erişimlerin sırasına bağlıdır: sayac++ oku–artır–yaz adımlarına ayrılır ve araya giren iş parçacığının güncellemesi kaybolur. Çözüm, artırmayı kritik bölge olarak korumak ya da atomik artırma kullanmaktır.

Soru 2 · Yarış Durumu ve Kritik Bölge

Araya Girme İzleme

Kod izleme

Başlangıçta sayac = 5. T1 sayac = sayac + 1, T2 sayac = sayac + 2 çalıştırır; her biri LOAD, ADD, STORE olarak derlenir. Sıra: T1 LOAD, T2 LOAD, T2 ADD, T2 STORE, T1 ADD, T1 STORE. Son değer nedir? Tüm olası son değerler nelerdir?

Cevabı göster

Son değer 6: T1 eski değeri (5) okuduğu için T2’nin yazdığı 7’nin üzerine 6 yazar; T2’nin güncellemesi kaybolur. Olası sonuçlar 6, 7, 8’dir: sıralı çalışırlarsa 8, T1’in güncellemesi kaybolursa 7, T2’ninki kaybolursa 6.

Soru 2 · Çözüm

Adım Adım Çözüm

Her satır tek bir makine işlemidir; R1 ve R2 iş parçacıklarının kendi yazmaçlarıdır.

Başlangıç: sayac = 5; iki iş parçacığı da artırma yapacak.

T1 değeri yazmacına okur (5). Ardından zamanlayıcı T2’ye geçer.

T2 de 5 okur: iki iş parçacığı aynı eski değeri tutuyor.

T2 artırır ve 7 yazar.

T1 elindeki eski 5’i artırıp 6 yazar: T2’nin +2’si kayboldu.

T1: LOAD  R1, sayac
T2: LOAD  R2, sayac
T2: ADD   R2, 2
T2: STORE sayac, R2
T1: ADD   R1, 1
T1: STORE sayac, R1

Soru 3 · Yarış Durumu ve Kritik Bölge

Çözümün Üç Koşulu

Açık uçlu

Kritik bölge problemine bir çözümün sağlaması gereken üç koşulu yazın. “Sınırlı bekleme” koşulunu kesin biçimde tanımlayın.

Cevabı göster
  1. Karşılıklı dışlama: Aynı anda en fazla bir süreç kritik bölgesinde olabilir.
  2. İlerleme: Kritik bölgede kimse yokken, girmek isteyenler arasından seçim sonsuza ertelenemez ve seçime yalnızca girmek isteyenler katılır.
  3. Sınırlı bekleme: Bir süreç giriş isteğinde bulunduktan sonra, isteği karşılanana dek diğer süreçlerin kritik bölgeye kaç kez girebileceğinin bir üst sınırı vardır; bu açlığı önler.

Ayrıca hiçbir varsayım CPU sayısı ya da hızı üzerine kurulmamalıdır.

Soru 4 · Yarış Durumu ve Kritik Bölge

Kilit Gerekmeyen Durum

Çoktan seçmeli

Bir yapılandırma tablosu program başlarken bir kez dolduruluyor, ardından 8 iş parçacığı onu yalnızca okuyor; tabloya bir daha yazılmıyor. Hangisi doğrudur?

  1. Her okuma bir mutex ile korunmalıdır, yoksa yarış durumu oluşur.
  2. Okumalar için senkronizasyon gerekmez; hiçbir iş parçacığı veriyi değiştirmiyor.
  3. Tablo bir semaforla korunmalı ve semaforun başlangıç değeri 0 olmalıdır.
  4. Yalnızca tek çekirdekli makinelerde güvenlidir.
  5. Okuyucular birbirini kilitlenmeye sokabilir.
Cevabı göster

Doğru cevap: B) Okumalar için senkronizasyon gerekmez; hiçbir iş parçacığı veriyi değiştirmiyor.

Yarış durumu için en az bir erişimin yazma olması gerekir. Yalnızca okunan veri eşzamanlı olarak güvenle paylaşılır (tablonun doldurulması iş parçacıkları başlamadan bitmiş olmalıdır).

Soru 5 · Yarış Durumu ve Kritik Bölge

Hangisi Eşzamanlılık Sorunu Değil?

Çoktan seçmeli

Aşağıdakilerden hangisi eşzamanlı (concurrent) programlarda karşılaşılan bir sorun değildir?

  1. Kilitlenme
  2. Canlı kilit
  3. Yarış durumu
  4. Açlık
  5. Belady anomalisi
Cevabı göster

Doğru cevap: E) Belady anomalisi

Belady anomalisi FIFO sayfa değiştirmede çerçeve sayısı artarken sayfa hatasının da artabilmesidir (Bölüm 9); eşzamanlılıkla ilgisi yoktur. Diğer dördü birden çok iş parçacığının etkileşiminden doğar.

Soru 6 · Yarış Durumu ve Kritik Bölge

Hangisi Senkronizasyon Aracı Değil?

Çoktan seçmeli

Aşağıdakilerden hangisi bir senkronizasyon aracı (ilkeli) değildir?

  1. Sayan semafor
  2. Monitör
  3. Koşul değişkeni
  4. Okur-yazar kilidi
  5. Önbellek satırı (cache line)
Cevabı göster

Doğru cevap: E) Önbellek satırı (cache line)

Önbellek satırı, belleğin önbellekte taşındığı donanım birimidir; erişimi düzenlemez. Semafor, monitör, koşul değişkeni ve okur-yazar kilidi paylaşılan kaynağa erişimi koordine eden araçlardır.

Soru 7 · Yarış Durumu ve Kritik Bölge

Kesmeleri Kapatmak

Doğru / Yanlış

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

“Kullanıcı programlarının kritik bölgeye girerken kesmeleri kapatması, hem tek hem çok çekirdekli sistemler için iyi bir çözümdür.”

Cevabı göster

Yanlış. Kesmeleri kapatmak ayrıcalıklı bir işlemdir; kullanıcıya verilirse süreç bir daha açmayarak sistemi ele geçirebilir. Çok çekirdekte de işe yaramaz: yalnızca kendi çekirdeğindeki kesmeler kapanır, diğer çekirdekler belleğe erişmeye devam eder. Yöntem yalnızca çekirdeğin kendi içinde, çok kısa bölümler için kullanılır.

Soru 8 · Donanım Desteği ve Spinlock

Dönerek Bekleyen Kilit

Çoktan seçmeli

Kilidi alamayan iş parçacığı uyumuyor; bir döngü içinde kilit değişkenini durmadan yeniden sınıyor. Bu davranış hangi yapıya özgüdür?

  1. Futex tabanlı mutex
  2. Koşul değişkeni
  3. Döngüsel kilit (spinlock)
  4. Monitör
  5. Mesaj kuyruğu
Cevabı göster

Doğru cevap: C) Döngüsel kilit (spinlock)

Spinlock meşgul bekleme (busy waiting) yapar: bekleyen CPU’yu bırakmaz. Mutex, koşul değişkeni ve monitörde bekleyen iş parçacığı uyutulur ve kuyruğa alınır; CPU başkasına verilir.

Soru 9 · Donanım Desteği ve Spinlock

Spinlock Ne Zaman Mantıklı?

Çoktan seçmeli

Spinlock hangi durumda uyuyan bir mutex’ten daha uygun olur?

  1. Tek çekirdekli bir makinede, kilit uzun süre tutulurken
  2. Kilit tutulurken disk G/Ç’si bekleniyorsa
  3. Çok çekirdekli makinede, kritik bölge iki bağlam değiştirmeden daha kısa sürüyorsa
  4. Kullanıcı arayüzü iş parçacığında, saniyelerce süren işlemlerde
  5. Bekleyen iş parçacığı sayısı çok fazlaysa
Cevabı göster

Doğru cevap: C) Çok çekirdekli makinede, kritik bölge iki bağlam değiştirmeden daha kısa sürüyorsa

Kısa beklemede dönmek, uyuyup uyanmanın (iki bağlam değiştirme) maliyetinden ucuzdur. Tek çekirdekte dönen iş parçacığı kilidi tutanın çalışmasını engeller; uzun beklemede ise CPU çevrimleri boşa harcanır.

Soru 10 · Donanım Desteği ve Spinlock

TSL ile Kilit

Kod izleme

Kilit while (test_and_set(&kilit)) ; ile alınıyor, kilit = 0 ile bırakılıyor (başlangıçta 0). T1 kilidi alıyor; ardından T2 deniyor ve T1 kilidi bırakana kadar 3 tur dönüyor; sonra T2 kilidi alıyor. Çalışan TSL çağrılarının döndürdüğü değerler sırasıyla nedir? T2 kaç kez TSL çalıştırır?

Cevabı göster

Dönüş değerleri 0, 1, 1, 1, 0. T1’in tek çağrısı 0 döner (kilit boştu, artık 1). T2’nin ilk üç çağrısı 1 döner (kilit dolu); T1 kilit = 0 yaptıktan sonraki çağrı 0 döner. T2 toplam 4 kez TSL çalıştırır. TSL eski değeri döndürüp 1 yazmayı tek atomik adımda yapar.

Soru 10 · Çözüm

Adım Adım Çözüm

T1 ve T2 aynı fonksiyonları çağırır; TSL tek atomik komuttur.

Kilit boş.

T1: TSL 0 döndürür ve kilidi 1 yapar → döngüden çıkar, kritik bölgeye girer.

T2: TSL 1 döner (kilit doluydu); 1 yeniden yazılır. T2 döner.

T2 iki tur daha döner: CPU çevrimleri yararlı iş yapılmadan harcanır.

T1 kritik bölgeden çıkar: kilit = 0.

T2’nin dördüncü TSL çağrısı 0 döner → T2 kritik bölgeye girer.

int kilit = 0;

void gir(void) {
  while (test_and_set(&kilit))
    ;  /* dön */
}
void cik(void) {
  kilit = 0;
}

Soru 11 · Donanım Desteği ve Spinlock

Peterson: Kim Girer?

Kod izleme

Peterson algoritmasında P0 ve P1 aynı anda girmek istiyor. Sıra: P0 flag[0] = 1; P1 flag[1] = 1; P1 turn = 0; P0 turn = 1; sonra ikisi de while koşulunu sınıyor. Kritik bölgeye hangisi girer, neden?

Cevabı göster

P1 girer. turn’e son yazan P0 olduğu için turn = 1 kalır. P0’ın koşulu flag[1] && turn == 1 doğrudur → P0 bekler. P1’in koşulu flag[0] && turn == 0 yanlıştır → P1 girer. Sırayı karşıya son veren bekler; bu, ikisinin aynı anda girmesini engeller.

Soru 11 · Çözüm

Adım Adım Çözüm

i: kendi numarası, j = 1 − i: karşı taraf. Satırlar iki süreçte de aynı koddur.

Başlangıç: kimse girmek istemiyor.

P0 (i = 0) niyetini bildirir.

P1 (i = 1) de niyetini bildirir.

P1 sırayı P0’a verir: turn = 0.

P0 sırayı P1’e verir: turn = 1 (son yazan P0).

P0: flag[1] = 1 ve turn == 1 → koşul doğru, P0 döner.

P1: turn == 0 yanlış → döngüden çıkar ve kritik bölgeye girer.

P1 çıkınca flag[1] = 0; P0’ın koşulu yanlışlanır ve P0 girer.

int flag[2] = {0, 0};
int turn;

void gir(int i) {
  int j = 1 - i;
  flag[i] = 1;     /* niyetliyim */
  turn = j;        /* sıra sende */
  while (flag[j] && turn == j)
    ;
}
void cik(int i) { flag[i] = 0; }

Soru 12 · Donanım Desteği ve Spinlock

Peterson Bugün

Doğru / Yanlış

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

“Peterson algoritması, modern çok çekirdekli işlemcilerde ek önlem almadan yazıldığı gibi doğru çalışır.”

Cevabı göster

Yanlış. Derleyici ve işlemci, birbirinden bağımsız görünen flag[i] = 1 yazmasıyla flag[j] okumasının sırasını değiştirebilir (yazma tamponu). İki süreç de karşının bayrağını 0 görüp birlikte girebilir. Doğru çalışması için bellek bariyeri ya da atomik (ör. volatile/atomic) değişkenler gerekir.

Soru 13 · Donanım Desteği ve Spinlock

CAS’ın Anlamı

Çoktan seçmeli

compare_and_swap(&v, beklenen, yeni) komutu için hangisi doğrudur?

  1. v’yi her zaman yeni yapar ve hiçbir şey döndürmez.
  2. v == beklenen ise v’ye yeni değeri yazar; her durumda v’nin eski değerini döndürür ve bunu tek atomik adımda yapar.
  3. v’yi beklenen ile karşılaştırır, eşitse çağıranı uyutur.
  4. Yalnızca tek çekirdekli işlemcilerde atomiktir.
  5. Bir sistem çağrısıdır; çekirdek kipine geçmeden kullanılamaz.
Cevabı göster

Doğru cevap: B) v == beklenen ise v’ye yeni değeri yazar; her durumda v’nin eski değerini döndürür ve bunu tek atomik adımda yapar.

CAS, kilitsiz algoritmaların temelidir: do { eski = v; } while (CAS(&v, eski, eski + 1) != eski); döngüsü araya başka yazma girerse yeniden dener. Kullanıcı kipinde çalışan sıradan bir komuttur (x86’da LOCK CMPXCHG).

Soru 14 · Semafor ve Mutex

Mutex ile Semafor

Çoktan seçmeli

Mutex ile sayan semafor arasındaki fark için en doğru ifade hangisidir?

  1. Semafor yalnızca 0 ve 1 değerlerini alabilir; mutex ise herhangi bir tamsayıyı.
  2. Mutex’in sahibi vardır ve yalnızca kilitleyen açar; sayan semaforun sahibi yoktur ve değeri N özdeş kaynağı sayabilir.
  3. Semafor her zaman meşgul bekleme yapar, mutex hiçbir zaman yapmaz.
  4. Mutex yalnızca süreçler arasında, semafor yalnızca iş parçacıkları arasında kullanılır.
  5. İkisi arasında kavramsal hiçbir fark yoktur.
Cevabı göster

Doğru cevap: B) Mutex’in sahibi vardır ve yalnızca kilitleyen açar; sayan semaforun sahibi yoktur ve değeri N özdeş kaynağı sayabilir.

Mutex karşılıklı dışlama için ikili bir kilittir (kilitli/açık) ve sahiplik taşır. Sayan semafor N’e kadar eşzamanlı erişime izin verebilir ve signal’ı başka bir iş parçacığı yapabilir; bu yüzden sıralama/haber verme için de kullanılır.

Soru 15 · Semafor ve Mutex

Bağlantı Havuzu

Çoktan seçmeli

Bir veritabanına aynı anda en fazla 5 bağlantı açılmasına izin verilecek. Her iş parçacığı bağlanmadan önce wait(S), bağlantıyı kapatınca signal(S) çağırıyor. S’nin başlangıç değeri ne olmalıdır?

  1. 0
  2. 1
  3. 4
  4. 5
  5. 6
Cevabı göster

Doğru cevap: D) 5

Sayan semaforun başlangıç değeri, aynı anda kullanılabilecek kaynak sayısıdır. 5 iş parçacığı geçer, altıncı wait değeri negatife düşürür ve bloke olur. Başlangıç 1 karşılıklı dışlama, 0 ise sıralama kalıbı içindir.

Soru 16 · Semafor ve Mutex

Semafor İzleme

Hesaplama

Sayan semafor S = 2 ile başlıyor; bekleme kuyruklu gerçekleme kullanılıyor (değer negatife inebilir). Sıra: P1 wait, P2 wait, P3 wait, P4 wait, P1 signal, P5 wait, P2 signal. Sonunda S kaçtır? Kimler kaynağı kullanıyor, kimler bekliyor?

Cevabı göster

Son değer S = −1. Kaynakta P3 ve P4, kuyrukta P5 var. Negatif değerin mutlak değeri bekleyen süreç sayısına eşittir.

Soru 16 · Çözüm

Adım Adım Çözüm

wait: S ← S − 1; S < 0 ise bloke. signal: S ← S + 1; S ≤ 0 ise kuyruktan birini uyandır.

S2Bekleme kuyruğu(boş)Kritik bölgede / kaynakta(kimse yok)

Başlangıç: S = 2, iki kaynak boşta.

S0Bekleme kuyruğu(boş)Kritik bölgede / kaynaktaP1P2

P1 wait → 1, P2 wait → 0: ikisi de geçer.

S−2Bekleme kuyruğuP3P4Kritik bölgede / kaynaktaP1P2

P3 wait → −1, P4 wait → −2: ikisi de bloke olur ve kuyruğa girer.

S−1Bekleme kuyruğuP4Kritik bölgede / kaynaktaP2P3

P1 signal → −1 (≤ 0): kuyruğun başındaki P3 uyandırılır ve kaynağı alır.

S−2Bekleme kuyruğuP4P5Kritik bölgede / kaynaktaP2P3

P5 wait → −2: P5 de kuyruğa girer.

S−1Bekleme kuyruğuP5Kritik bölgede / kaynaktaP3P4

P2 signal → −1: P4 uyanır. Son durum: S = −1, kaynakta P3 ve P4, kuyrukta P5.

Soru 17 · Semafor ve Mutex

Semaforun Son Değeri

Hesaplama

Başlangıç değeri 3 olan bir semaforda toplam 5 wait ve 2 signal işlemi yapılıyor (signal’ları kaynağı kullanmakta olan süreçler yapıyor). İşlemler hangi sırayla gelirse gelsin, sonunda semaforun değeri ve bekleyen süreç sayısı nedir?

  1. −2; 2 süreç bekler
  2. 0; kimse beklemez
  3. 0; 2 süreç bekler
  4. 1; kimse beklemez
  5. Sıraya bağlıdır, söylenemez
Cevabı göster

Doğru cevap: B) 0; kimse beklemez

Değer 3 − 5 + 2 = 0; her işlem değeri tam 1 değiştirdiği için sıra sonucu etkilemez. Değer negatif değilse kuyrukta kimse yoktur: bekleyen 0. (Sıra yalnızca ara durumları, örneğin kimin ne kadar beklediğini değiştirir.)

Soru 18 · Semafor ve Mutex

Sırayı Semaforla Kurmak

Açık uçlu

P1’deki A() çağrısı, P2’deki B() çağrısından önce tamamlanmalı; süreçler herhangi bir sırayla başlayabilir. Tek bir semaforla çözümü yazın ve başlangıç değerini gerekçelendirin.

Cevabı göster
semafor s = 0;
/* P1 */  A();  signal(s);
/* P2 */  wait(s);  B();

Başlangıç 0: P2 önce gelirse wait onu bloke eder; P1 A()’yı bitirip signal yapınca P2 uyanır. P1 önce gelirse değer 1 olur ve P2 beklemeden geçer. Başlangıç 1 olsaydı P2 hiç beklemezdi.

Soru 19 · Semafor ve Mutex

Ters Sıralı down

Kod izleme

Sınırlı tamponlu üretici-tüketici çözümünde üretici yanlışlıkla önce down(&mutex), sonra down(&bos) yapıyor (tüketici doğru sırada). Tampon tamamen doluyken üretici çalışırsa ne olur?

  1. Hiçbir şey olmaz; üretici bekler ve tüketici yer açınca devam eder.
  2. Kilitlenme olur: üretici mutex’i tutarak bos’ta uyur, tüketici mutex’te bloke olur.
  3. Tampon taşar ve bir öğe kaybolur.
  4. Tüketici boş bir tampondan okur.
  5. Üretici meşgul beklemeye girer ama sonunda devam eder.
Cevabı göster

Doğru cevap: B) Kilitlenme olur: üretici mutex’i tutarak bos’ta uyur, tüketici mutex’te bloke olur.

Kilitlenme. Üretici mutex’i alır, bos = 0 olduğu için down(&bos)’ta mutex’i tutarak uyur. Tüketici down(&dolu)’dan geçer ama down(&mutex)’ta bloke olur. Üretici tüketicinin yer açmasını, tüketici üreticinin mutex’i bırakmasını bekler. Doğrusu önce sayan semafor, sonra mutex’tir.

Soru 19 · Çözüm

Adım Adım Çözüm

N = 2’lik tampon dolu: bos = 0, dolu = 2, mutex = 1. Üreticide iki down yer değiştirmiş.

Tampon dolu: üretici yer, tüketici mutex bekleyecek mi?

Üretici mutex’i alır (1 → 0).

bos 0 → üretici bloke olur, mutex’i bırakmadan uyur.

Tüketici çalışır: dolu 2 → 1, geçer.

mutex 0 → tüketici de bloke olur. İkisi birbirini bekliyor: kilitlenme.

void uretici(void) {
  down(&mutex);   /* HATA: sıra ters */
  down(&bos);
  koy(oge);
  up(&mutex);
  up(&dolu);
}
void tuketici(void) {
  down(&dolu);
  down(&mutex);
  al();
  up(&mutex);
  up(&bos);
}

Soru 20 · Semafor ve Mutex

Koşul Değişkeninde Bekleme

Çoktan seçmeli

Bir iş parçacığı mutex’i tutarken pthread_cond_wait(&c, &m) çağırıyor. Bu çağrı ne yapar?

  1. Mutex’i tutmaya devam eder ve koşul doğru olana kadar döner.
  2. Mutex’i atomik olarak bırakıp uyur; uyandırıldığında dönmeden önce mutex’i yeniden alır.
  3. Mutex’i bırakır ve uyandığında mutex’siz devam eder.
  4. Koşulu kendisi sınar; yanlışsa hata döndürür.
  5. Diğer tüm bekleyenleri uyandırır.
Cevabı göster

Doğru cevap: B) Mutex’i atomik olarak bırakıp uyur; uyandırıldığında dönmeden önce mutex’i yeniden alır.

Bırakma ve uyuma tek atomik adımdır; böylece arada gelen signal kaybolmaz. Dönüşte mutex yeniden tutulduğundan koşul güvenle yeniden sınanabilir.

Soru 21 · Semafor ve Mutex

if Yeterli mi?

Doğru / Yanlış

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

“Mesa anlamlı koşul değişkenlerinde wait’ten dönen iş parçacığı koşulun doğru olduğundan emin olabilir; bu yüzden while yerine if ile sınamak yeterlidir.”

Cevabı göster

Yanlış. Mesa anlamında signal yalnızca bir ipucudur: uyanan iş parçacığı mutex’i yeniden alana kadar başka biri koşulu bozmuş olabilir; ayrıca sahte (spurious) uyanmalar olabilir. Koşul her zaman while döngüsünde yeniden sınanmalıdır.

Soru 22 · Klasik Problemler

Yedi Filozof

Çoktan seçmeli

Yuvarlak masada 7 filozof ve aralarında 7 çatal var; her filozof yemek için sağındaki ve solundaki iki çatala ihtiyaç duyuyor. Aynı anda en fazla kaç filozof yemek yiyebilir?

  1. 1
  2. 2
  3. 3
  4. 4
  5. 7
Cevabı göster

Doğru cevap: C) 3

Her yiyen filozof 2 çatal tutar ve yan yana iki filozof aynı anda yiyemez: ⌊7 / 2⌋ = 3. Çatallar paylaşılan kaynakları, filozoflar bu kaynaklar için yarışan süreçleri temsil eder.

Soru 23 · Klasik Problemler

Filozoflar ve Kilitlenme

Açık uçlu

Her filozofun önce sol, sonra sağ çatalı aldığı naif çözüm neden kilitlenebilir? Kilitlenmeyi önleyen üç farklı yaklaşım yazın.

Cevabı göster

Herkes aynı anda sol çatalını alırsa her filozof bir çatal tutup komşusunun çatalını bekler: döngüsel bekleme → kilitlenme.

  • Sıralama: Çatallar numaralanır, her filozof önce küçük numaralıyı alır (ya da bir filozof ters sırayla alır); döngü kırılır.
  • Masaya en çok N − 1 kişi: Başlangıcı N − 1 olan bir semaforla oturanlar sınırlanır; en az biri iki çatalı alabilir.
  • İkisini birden al: Filozof iki çatal da boşsa ikisini mutex altında atomik olarak alır; yoksa bekler (durum dizisi + filozof başına semafor).

Soru 24 · Klasik Problemler

Okur Öncelikli Çözüm

Çoktan seçmeli

Okur öncelikli okur-yazar çözümünde üç okur veriyi okurken bir yazar geliyor; ardından sürekli yeni okurlar gelmeye devam ediyor. Ne olur?

  1. Yazar hemen girer, okurlar dışarı atılır.
  2. Yeni okurlar da girebildiği için yazar süresiz bekleyebilir (yazar açlığı).
  3. Okurlar ve yazar aynı anda çalışır.
  4. Sistem kilitlenir.
  5. Yeni gelen okurlar yazarın arkasında bekler.
Cevabı göster

Doğru cevap: B) Yeni okurlar da girebildiği için yazar süresiz bekleyebilir (yazar açlığı).

Okur öncelikli çözümde içeride okur olduğu sürece yeni okurlar beklemeden girer; okur akışı kesilmezse yazar hiç giremez. Yazar öncelikli çözüm bunu tersine çevirir ve okurları aç bırakabilir; adil çözümler geliş sırasını korur.

Soru 25 · Klasik Problemler

Tur Sonu Buluşması

Çoktan seçmeli

4 iş parçacığı bir matrisin farklı satırlarını işliyor; bir sonraki tura ancak hepsi mevcut turu bitirdiğinde geçilebilir. Bunun için en uygun araç hangisidir?

  1. Spinlock
  2. Bariyer (barrier)
  3. Okur-yazar kilidi
  4. İkili semafor ile karşılıklı dışlama
  5. Atomik artırma
Cevabı göster

Doğru cevap: B) Bariyer (barrier)

Bariyer, katılımcıların tümü aynı noktaya gelene kadar her birini bekletir; son gelen hepsini serbest bırakır. Diğer araçlar karşılıklı dışlama ya da sayma sağlar, “herkes gelsin” koşulunu doğrudan kurmaz.

Soru 26 · Öncelik Terslemesi ve Canlılık

Bir Ters Senaryo

Çoktan seçmeli

Düşük öncelikli L bir kilidi tutuyor. Yüksek öncelikli H aynı kilidi isteyip bloke oluyor. Bu sırada kilitle ilgisi olmayan orta öncelikli M gelip uzun süre CPU’yu kullanıyor; H, M bitene kadar ilerleyemiyor. Bu durumun adı ve tipik çözümü nedir?

  1. Kilitlenme; süreçlerden biri sonlandırılır.
  2. Öncelik terslemesi; öncelik kalıtımı (L geçici olarak H’nin önceliğini alır).
  3. Konvoy etkisi; FCFS’e geçilir.
  4. Canlı kilit; rastgele geri çekilme uygulanır.
  5. Yarış durumu; kilit kaldırılır.
Cevabı göster

Doğru cevap: B) Öncelik terslemesi; öncelik kalıtımı (L geçici olarak H’nin önceliğini alır).

Yüksek öncelikli süreç, düşük öncelikli bir sürecin (ve onu kesen orta öncelikli işlerin) arkasında kalır: öncelik terslemesi. Öncelik kalıtımıyla L kilidi tutarken H’nin önceliğiyle çalışır, M onu kesemez.

Soru 27 · Öncelik Terslemesi ve Canlılık

Terslemeyi Hesaplamak

Hesaplama

Kesmeli öncelik çizelgelemesi. L (düşük) t = 0’da kilidi alır, kritik bölgesi 3 birim sürer. H (yüksek) t = 1’de gelir, hemen kilidi ister; kilit alındıktan sonra 2 birim çalışır. M (orta) t = 2’de gelir, 6 birim çalışır, kilide ihtiyacı yoktur. Öncelik kalıtımı olmadan ve varken H kilidi kaç birim bekler, H ne zaman biter?

Cevabı göster
  • Kalıtım yok: L 0–2, M 2–8 (L’yi keser), L 8–9 kilidi bırakır, H 9–11. H 8 birim bekler, t = 11’de biter.
  • Kalıtım var: t = 1’de L, H’nin önceliğini alır; M onu kesemez. L 0–3, H 3–5, M 5–11. H 2 birim bekler, t = 5’te biter.

Soru 27 · Çözüm

Adım Adım Çözüm

KB: L’nin kilitli kritik bölgesi. Kırmızı: H’nin kilit için bloke kaldığı süre.

HbeklerMLKB01234567891011

t = 1: H gelir, kilidi ister ve bloke olur; L kritik bölgesine devam eder. t = 2’de M gelir.

HbeklerMLKB01234567891011

Kalıtım yok: M, L’den yüksek öncelikli olduğu için L’yi keser ve 6 birim çalışır. H, hiç ilgisi olmayan M’yi bekliyor.

HbeklerMLKBKB01234567891011

L 8–9’da kritik bölgeyi bitirip kilidi bırakır; H 9–11 çalışır. H’nin bekleme süresi 8 birim.

HbeklerMLKB01234567891011

Kalıtım var: L, t = 1’den itibaren H’nin önceliğiyle çalışır, 3’te kilidi bırakır; H 3–5, M 5–11. H yalnızca 2 birim bekler.

Soru 28 · Öncelik Terslemesi ve Canlılık

Tersleme Bir Kilitlenme mi?

Doğru / Yanlış

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

“Öncelik terslemesi bir kilitlenme türüdür; dışarıdan müdahale edilmezse ilgili süreçler sonsuza dek bekler.”

Cevabı göster

Yanlış. Terslemede döngüsel bekleme yoktur: orta öncelikli işler bitince L çalışır, kilidi bırakır ve H ilerler. Sorun, H’nin sınırsız ve öngörülemez gecikmesidir; gerçek zamanlı sistemlerde son teslimlerin kaçmasına yol açar. Çözümler: öncelik kalıtımı, öncelik tavanı protokolü.

Soru 29 · Öncelik Terslemesi ve Canlılık

Kibar İş Parçacıkları

Çoktan seçmeli

İki iş parçacığı ikişer kilit istiyor. Her biri ikinci kilidi alamayınca elindekini bırakıp hemen yeniden deniyor. İkisi de sürekli çalışıyor ama hiçbiri işini bitiremiyor. Durumun adı ve uygun çözüm nedir?

  1. Kilitlenme; kaynak sıralaması
  2. Canlı kilit (livelock); yeniden denemeden önce rastgele süre beklemek (geri çekilme)
  3. Öncelik terslemesi; öncelik kalıtımı
  4. Yarış durumu; atomik değişken
  5. Açlık; yaşlanma
Cevabı göster

Doğru cevap: B) Canlı kilit (livelock); yeniden denemeden önce rastgele süre beklemek (geri çekilme)

Canlı kilitte süreçler bloke değildir, durum değiştirip dururlar ama ilerleme yoktur. Rastgele ya da üstel geri çekilme, iki tarafın aynı anda yeniden denemesini bozarak birinin ilerlemesini sağlar. Öncelik kalıtımı canlı kilidi değil terslemeyi çözer.

Soru 30 · Öncelik Terslemesi ve Canlılık

Kilidin Yan Etkisi Değil

Çoktan seçmeli

Aşağıdakilerden hangisi kilit kullanımının yol açabileceği sorunlardan biri değildir?

  1. Kilitlenme
  2. Öncelik terslemesi
  3. Spinlock’ta meşgul bekleme ile CPU israfı
  4. Kilit çekişmesi nedeniyle ölçeklenememe
  5. Dış parçalanma
Cevabı göster

Doğru cevap: E) Dış parçalanma

Dış parçalanma bellek tahsisinin sorunudur (Bölüm 8). İlk dördü kilitlerin doğrudan sonuçlarıdır; çekişmeyi azaltmak için kritik bölgeler kısa tutulur ve kilitler inceltilir (ör. çekirdek başına sayaç).

Soru 31 · Öncelik Terslemesi ve Canlılık

İki ATM

Açık uçlu

Bir hesapta 1000 TL var. İki ATM aynı anda bu hesaptan 800’er TL çekmeye çalışıyor; her biri “bakiye ≥ tutar ise bakiye ← bakiye − tutar” yapıyor. Kritik bölgeyi belirleyin, hatalı bir araya girme senaryosu verin ve düzeltin.

Cevabı göster

Kritik bölge: bakiyenin okunmasından, sınanmasından güncellenmesine kadar olan bölüm.

Hata: ATM1 1000’i okuyup koşulu doğru bulur; araya ATM2 girer, o da 1000’i okur. İkisi de 800 öder: hesap −600’e düşer ya da bir güncelleme kaybolup bakiye 200 görünür.

Düzeltme: sınama ve güncellemeyi aynı kilit altında tek bir bütün olarak yapmak (hesap başına mutex ya da veritabanı işlemi). Böylece ikinci ATM güncel 200’ü görür ve reddeder.

Özet

Özet: Sık Yapılan Hatalar

  • Mutex ile ikili semaforu tamamen aynı sanmak: mutex’i yalnızca kilitleyen açar; semafora başka bir iş parçacığı signal verebilir.
  • Sayan semaforun başlangıç değerini 1 yazmak: değer, aynı anda izin verilen kaynak sayısıdır; sıralama kalıbında 0’dır.
  • Sınırlı tamponda down sırasını değiştirmek: önce sayan semafor, sonra mutex; ters sıra kilitlenme yaratır.
  • Koşul değişkenini if ile sınamak: Mesa anlamında daima while.
  • Spinlock’u tek çekirdekte ya da uzun beklemede kullanmak: CPU boşa döner, kilit sahibinin çalışması gecikir.
  • Öncelik terslemesini kilitlenme, canlı kilidi açlık sanmak; çözümleri karıştırmak (kalıtım ↔ geri çekilme).

Son

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