İşletim Sistemleri · İşletim Sistemleri

#09 Mutex, semafor ve bekleme biçimleri

İzni atomik al · kritik işi koru · bekleme davranışını seç

Soru

Bir anahtar mı, sayılı geçiş izni mi?
Başlangıç örneği: kaynak dersin özgün görseli.

Tek bir ortak kayıt tablosunu değiştiren iki çalışan düşünün. Tablonun tutarlılığı için değişiklik bölümüne aynı anda yalnız bir çalışan girmeli. Bir mutex bu karşılıklı dışlama ihtiyacını anlatır. Şimdi iki bağımsız çalışma istasyonu düşünün. Her istasyon bir iş alabilir; iki işin aynı anda ilerlemesi güvenlidir. Burada tek giriş zorlamak gereksiz kısıt olabilir. Sayılı izin fikrine ihtiyacımız var. Anahtar benzetmesi sahipliği, izin kartı benzetmesi sayıyı anlatmaya yardım eder. Ama uygulamada her aracın atomiklik, uyandırma ve kullanım kuralları vardır; benzetme bu sözleşmelerin yerini tutmaz. Bilgisayar modelinde ortak belleğe bakan hatlar farklı çekirdeklerde de olabilir. İzni yalnız ekranda bir işaretle göstermek yetmez; denetleme ve değiştirme işlemi yarışa karşı korunmalıdır.

Yazılı çözüm ve anlatım dökümü(çözümün tamamını gösterir)

Aşağıda defterde yazılan bütün satırlar ve bunlara eşlik eden sesli anlatımın tam metni bulunur.

  1. 1. Kritik bölgeye giriş iznini nasıl yönetiriz?

    Kritik bölgeye giriş iznini nasıl yönetiriz?
    Kaynak dersin bu bölümündeki son görünüm.
    Geçen ders: ortak güncellemenin bütünü korunur.
    Bugün: izin sayısı ve bekleme davranışı

    Sesli anlatım metni

    Geçen derste iki hattın ortak sayacı artırırken bir güncellemeyi kaybettiğini gördük. Okuma, hesap ve yazma bütününü korumamız gerektiğini bulduk. Bugün bu korumayı mutex ve semafor araçlarıyla kuracağız. İki soruyu ayıracağız: aynı anda kaç hat izin alabilir ve izin yokken hat nasıl bekler? Karşılıklı dışlama, sayılı kaynak izni ve olay sırası aynı amaç değildir. Doğru aracı amaçtan başlayarak seçeceğiz.

  2. 2. Bir anahtar mı, sayılı geçiş izni mi?

    Bir anahtar mı, sayılı geçiş izni mi?
    Kaynak dersin bu bölümündeki son görünüm.
    Mutex: aynı kritik bölgeye tek giriş
    İki bağımsız istasyon: iki kullanım izni
    Benzetme yardımcıdır; API sözleşmesi belirleyicidir.
    İzin denetimi de atomik olmalıdır.

    Sesli anlatım metni

    Tek bir ortak kayıt tablosunu değiştiren iki çalışan düşünün. Tablonun tutarlılığı için değişiklik bölümüne aynı anda yalnız bir çalışan girmeli. Bir mutex bu karşılıklı dışlama ihtiyacını anlatır. Şimdi iki bağımsız çalışma istasyonu düşünün. Her istasyon bir iş alabilir; iki işin aynı anda ilerlemesi güvenlidir. Burada tek giriş zorlamak gereksiz kısıt olabilir. Sayılı izin fikrine ihtiyacımız var. Anahtar benzetmesi sahipliği, izin kartı benzetmesi sayıyı anlatmaya yardım eder. Ama uygulamada her aracın atomiklik, uyandırma ve kullanım kuralları vardır; benzetme bu sözleşmelerin yerini tutmaz. Bilgisayar modelinde ortak belleğe bakan hatlar farklı çekirdeklerde de olabilir. İzni yalnız ekranda bir işaretle göstermek yetmez; denetleme ve değiştirme işlemi yarışa karşı korunmalıdır.

  3. 3. Al, kritik işi yap, bırak

    Al, kritik işi yap, bırak
    Kaynak dersin bu bölümündeki son görünüm.
    1. Kilidi al
    2. Kritik bölgenin bütününü yürüt
    3. Kilidi güvenilir biçimde bırak
    Bütün ilgili erişimler aynı protokole uyar.

    Sesli anlatım metni

    Mutex kullanımını üç bölümle okuyalım. Hat önce kilidi alır. Alma başarılı olmadan korunan ortak işe başlamaz. Kilit meşgulse, aracın bekleme politikasına göre bekler. Kilit alınınca kritik bölge yürütülür. Geçen dersin sayacında bu bölge okuma, artırma ve yazmayı birlikte kapsıyordu. Her ortak erişim aynı koruma protokolüne uymalıdır. Hat çıkışta kilidi bırakır. Bu dersteki mutex modelinde kilidi alan hat onu bırakır. Hata ya da erken dönüş yolu da kilidin bırakılmasını sağlamalı; aksi hâlde sonraki hatlar ilerleyemeyebilir. Bir değişkene kilit var demek, o değişkeni otomatik korumaz. Başka bir hat kilit almadan erişirse dışlama sözleşmesi bozulur. Koruma bütün katılan erişimlerin ortak anlaşmasıdır.

  4. 4. Kontrol ile alma arasına yarış sokma

    Kontrol ile alma arasına yarış sokma
    Kaynak dersin bu bölümündeki son görünüm.
    Ayrı “kontrol et” ve “al” adımları yarışabilir.
    Atomik işlem: eski değeri döndür, bayrağı doğru yap
    A: eski değer yanlış → alır; B: doğru → bekler
    Atomik temel, bütün kilit sözleşmesinin yalnız parçasıdır.

    Sesli anlatım metni

    Hatalı bir fikir şu olur: kilit boş mu diye oku, sonra ayrı bir adımda meşgul yaz. A ve B ilk okumada birlikte boş görebilir; ikisi de girdiğini sanabilir. Kontrol ile değiştirme tek atomik işlem olmalıdır. Atomik test et ve kur işleminin öğretim modeline bakalım. Kilit bayrağı başlangıçta yanlış, yani boş. İşlem eski değeri döndürür ve aynı bölünmez adımda bayrağı doğru yapar. A’nın işlemi eski değer olarak yanlış döndürür. A kilidi almıştır. Ardından B’nin atomik işlemi eski değeri doğru görür; kilit zaten meşguldür ve B giriş yapmaz. A çıkıp bayrağı bırakınca B sonraki denemede boş değeri alabilir. Atomik donanım işlemi, daha yüksek seviyeli kilidin bir temelidir; bu kısa iz tek başına adil bekleme ya da bütün bir dilin bellek sözleşmesini kanıtlamaz.

  5. 5. Dönerek beklemek ile uyumak farklıdır

    Dönerek beklemek ile uyumak farklıdır
    Kaynak dersin bu bölümündeki son görünüm.
    Aktif bekleme: tekrar kontrol, CPU kullanımı
    Uyutarak bekleme: bekleme kuyruğu ve uyandırma
    Uyandırılan hat hazır olur; CPU sırası ayrıca seçilir.
    Bekleme tercihi, süreye ve yürütme koşullarına bağlıdır.

    Sesli anlatım metni

    Dönerek bekleyen kilitte hat tekrar tekrar izin durumunu kontrol eder. Henüz kritik işe girmese de işlemci çevrimleri kullanır. Bu davranışa aktif bekleme diyoruz. Uyutarak beklemede hat bir bekleme kuyruğuna alınır ve çalışabilir durumdan çıkarılır. İşlemci başka iş yürütür. İzin uygun olduğunda bekleyen hat uyandırılabilir. Uyandırmak doğrudan işlemci vermek değildir. Hat hazır hâle gelir; zamanlayıcı daha sonra ona sıra verir. Bu, süreç durumları dersindeki bekliyor ile hazır ayrımını yeniden kullanır. Çok kısa beklemede uyutma ve bağlam değiştirme maliyeti ağır gelebilir. Uzun beklemede sürekli dönmek pahalı olabilir. Kilit sahibinin çalışabilmesi, çekirdek sayısı ve yük gibi koşullara bakılır; evrensel tek süre eşiği vermiyoruz.

  6. 6. Semafor: atomik wait ve signal

    Semafor: atomik wait ve signal
    Kaynak dersin bu bölümündeki son görünüm.
    Semafor: başlangıç + atomik wait / signal
    wait: izin varsa al, yoksa bekle
    signal: izni geri ver veya bekleyene aktar
    İkili izin ve sayılı izin · sahiplik sözleşmesini incele

    Sesli anlatım metni

    Semafor, başlangıç değeri verilen ve sonrasında atomik bekle ve bildir işlemleriyle erişilen bir senkronizasyon aracıdır. Bu işlemleri yaygın adlarıyla veyt ve signal diye de duyarsınız. Sayılı kaynak örneğimizde değer, kullanılabilir izinleri temsil eder. İzin varsa wait birini alır; izin yoksa hat bekler. Test ile iznin alınması birlikte atomik olmalıdır. Signal bir izni geri verir veya uygun bekleyene aktarılmasını sağlar. Burada negatif olmayan kullanılabilir izin sayısını gösteriyoruz. Bazı uygulamalar negatif iç sayıda bekleyenlerin sayısını kodlar; aynı rakam yorumu bütün uygulamalara taşınmaz. İkili semafor, uygun protokolle tek giriş izni için kullanılabilir. Sayma semaforu birden fazla izni yönetebilir. Mutex ile ikili semaforun sahiplik ve bırakma kuralları her API’de aynı değildir; aracın sözleşmesini okuyun.

  7. 7. İki izni üç isteğe dağıtalım

    İki izni üç isteğe dağıtalım
    Kaynak dersin bu bölümündeki son görünüm.
    Başlangıç: 2 kullanılabilir izin
    A alır:
    2−1=1\displaystyle 2 - 1 = 1
    B alır:
    1−1=0\displaystyle 1 - 1 = 0
    C bekler: kullanılabilir izin 0

    Sesli anlatım metni

    Özgün modelimizde iki bağımsız istasyon var. Başlangıçta iki kullanılabilir izin; A, B ve C birer istasyon istiyor. İstasyonlar arası ortak veri ihtiyacını şimdilik ayrı tutuyoruz. A atomik wait ile bir izin alır. İki eksi bir, bir kullanılabilir izin kalır. A işine başlayabilir. B de bir izin alır. Bir eksi bir, sıfır kullanılabilir izin. İki istasyon artık kullanımda. C wait çağırdığında boş izin yoktur. Bu modelde C kuyruğa alınır ve uyur; kullanılabilir izin sayısı sıfır kalır. C henüz bir istasyona sahip değildir.

  8. 8. İzni bekleyene aktar, durumu doğru oku

    İzni bekleyene aktar, durumu doğru oku
    Kaynak dersin bu bölümündeki son görünüm.
    A bırakır → izin C’ye ayrılır → C hazır
    Boş izin: 0 · B kullanıyor · C’ye bir izin ayrıldı
    Hazır olma ≠ o anda çalışma
    İzinlerin hesabı, kapasite sözleşmesini korur.

    Sesli anlatım metni

    A işini bitirip signal yapsın. Bu dersin modelinde boşalan izin doğrudan bekleyen C’ye ayrılır. C uyandırılıp hazır hâle gelir; B’nin izni ise devam eder. Doğrudan aktarımda boşta kullanılabilir izin sayısı sıfır kalır. Bir izin B’de, bir izin C’ye ayrılmıştır. Sıfır görmek, hiç kimse iş yapmıyor demek değildir; boş izin olmadığını söyler. C işlemci sırası aldığında ayrılan istasyonu kullanır. İzindeki hazır olma ile fiilen çalışma anını karıştırmayın. Başka bir semafor uygulaması uyandırıp yeniden yarışma yolu kullanabilir; bizim aktarma modelimizi ona varsaymayın. Kontrolümüz şu: boş izin, kullanılan izin ve ayrılmış izin birlikte başlangıç kapasitesini aşmamalı. Unutulan signal izin kaybettirir; fazladan signal kapasite sözleşmesini bozabilir. İşlemleri doğru eşlemek gerekir.

  9. 9. Olay sırası ve veri korumasını ayır

    Olay sırası ve veri korumasını ayır
    Kaynak dersin bu bölümündeki son görünüm.
    Sıra amacı: hazırlık bitmeden tüketim başlamasın.
    Hazırlık → signal → wait sonrası kullanım
    İki izin, tek ortak veri için dışlama sağlamaz.
    Kaç giriş? Hangi sıra? Nasıl bekleme?

    Sesli anlatım metni

    Semafor yalnız kaynak saymak için kullanılmaz. Örneğin tüketici, hazırlık tamamlanmadan başlamasın isteyebiliriz. Başlangıcı sıfır olan bir olay semaforunda tüketici wait ile bekler. Hazırlayan hat işi bitirince signal verir. Tüketici bundan sonra devam edebilir. Bu, önce hazırlık sonra kullanım ilişkisini kurar. Ortak veri üzerinde birden fazla değişiklik varsa dışlama gereksinimini ayrıca değerlendirin. Kontrol sorusu: iki izinli semafor, tek ortak kayıt tablosunu değiştiren iki hattı mutlaka dışlar mı? Hayır; ikisinin birlikte izin almasına açıktır. Kaynak kapasitesi ile ortak veri kritik bölgesi ayrı ihtiyaçlardır. Aracı seçerken kaç giriş güvenli, hangi olay önce gelmeli ve bekleyenin nasıl uyandırılacağı sorularını ayrı sorun. Adına bakıp bütün senkronizasyon ihtiyacının çözüldüğünü varsaymayın.

  10. 10. Üç yanlış içgüdü

    Üç yanlış içgüdü
    Kaynak dersin bu bölümündeki son görünüm.
    Kontrol ile alma birlikte korunmalıdır.
    Uyandırılma → hazır; çalışma sonra olabilir.
    Kapasite yönetimi ile veri dışlamasını ayır.
    Al · koru · bırak · durumu oku

    Sesli anlatım metni

    Birinci hata: kontrol etmek izin almakla aynıdır. Araya başka erişim girebiliyorsa ikisi aynı değildir; alma işlemi atomik bir sözleşme gerektirir. İkinci hata: uyandırılan hat hemen CPU’da çalışır. Hazır hâle gelmesi ve zamanlayıcının ona sıra vermesi ayrı olaylardır. Üçüncü hata: doğru izin sayısı bütün ortak veriyi korur. İki bağımsız kaynak izni, o kaynakların kullandığı ortak tablonun erişimini tek başına dışlamaz. Akılda kalan kural: atomik izin al, korunan işi tamamla, izni doğru bırak ve bekleme durumunu doğru yorumla.

  11. 11. Bir araç, açık bir erişim sözleşmesi

    Bir araç, açık bir erişim sözleşmesi
    Kaynak dersin bu bölümündeki son görünüm.
    Senkronizasyon = araç + doğru kullanım protokolü
    Dışlama · kapasite · olay sırası · bekleme biçimi
    Sonraki ders: klasik senkronizasyon problemleri

    Sesli anlatım metni

    Bilgisayar modeline dönelim. Hatlar ortak belleğe erişirken dışlama ya da sayılı izin kullanabilir. Atomik işlemler bu araçların temeline yardım eder; doğru kullanım bütün ilgili erişimlerin protokolüne dayanır. Mutex’i, semaforu, dönerek beklemeyi ve uyuyup uyandırılmayı ayırdık. İki izinli örnekte boş sayının ne söylediğini ve ne söylemediğini gördük. Bir sonraki adım bu araçları gerçek problem düzenlerine yerleştirmektir. Bir sonraki derste sınırlı tamponu, okuyucu yazıcı erişimini ve ortak kaynaklar etrafında oluşan bekleme döngüsünü inceleyeceğiz. Kilit doğru yerde mi, izin doğru sırada mı? İlk bloğu bu sorularla tamamlayacağız. Görüşmek üzere.

Kaynak video: Mutex, semafor ve bekleme biçimleri (8:10)