Evet arkadaşlar, şimdi bu bölümdeki son konu bir semaforun güçlü bir semafor mu yoksa zayıf bir semafor mu olduğunu
sınıflandırmaktır.
Dolayısıyla, verilen bir semafor, ister adlandırılmış bir semafor ister adlandırılmamış bir semafor olsun, fark etmez.
Belirli bir semafor her zaman güçlü semafor veya zayıf semafor olarak sınıflandırılabilir.
Peki semaforu neye dayanarak güçlü semafor ya da zayıf semafor olarak sınıflandıracağız?
Semaforun, üzerinde bloklanan iş parçacıklarının kritik bölüme girmesine nasıl izin verdiğine bağlıdır.
Doğru.
Yani her şey semaforun engellenen iş parçacığının kritik bölüme girmesine izin verme şekli ya
da düzeniyle ilgilidir.
Doğru.
O halde önce bu tanımın üzerinden geçelim.
Teorik olarak, çözümünüzde bir muteks veya semafor üzerinde engellenen bir iş parçacığının yürütmeye devam etme şansının
asla olmayabileceğini gösterebilirsiniz.
Ve bu durum açlık olarak adlandırılır.
O zaman bu çözümün sınırlı bekleme özelliğinden yoksun olduğunu söyleriz.
Şimdi bu teknik bir terim olan sınırlı bekleme ve böyle bir semafor zayıf semafor olarak adlandırılır.
Doğru.
Yani bu tanımda çok fazla anahtar kelime var.
Örneğin, teorik olarak, değil mi?
Teorik olarak, sizin çözümünüzde bazı özel durumlarda asla CPU alamayan belirli
iş parçacıklarının olabileceği iddia edilebilir.
O zaman çözümünüzün sınırlı bekleme özelliğinden yoksun olduğunu söyleriz ve eğer çözümünüzde
semafor kullanılıyorsa, böyle bir semafor zayıf semafor olarak adlandırılır.
Şimdi bu noktayı detaylandırmama izin verin.
Bu diyagram yardımıyla.
Diyelim ki bir noktada kritik bölüme girmeye çalışan T1 iş parçacığı, T2 ve T3 iş parçacığı
var, ancak aynı bekleme çağrısında bir semafor tarafından engelleniyorlar.
Doğru.
Şimdi sistemdeki başka bir iş parçacığının semafora sinyal gönderdiğini varsayalım.
Doğru.
Peki ne olacak?
İşletim sistemi bu semafor üzerinde bloke olan iş parçacıklarından birini seçecek ve bu iş parçacığının
kritik bölüme girmesine izin verecektir.
Örneğin, bu şanslı ipliğin bir sağdaki iplik olduğunu seçelim.
Böylece t bir iş parçacığı bu sinyali tüketecek ve t bir iş parçacığı kritik bölüme girecek, T2 ve
T3 iş parçacıkları ise semafor üzerinde bloklamaya devam edecektir.
Şimdi başka bir iş parçacığının geldiğini ve yine semafor üzerinde bloke olduğunu varsayalım.
Değil mi?
Sistemdeki başka bir iplik.
Tekrar, başka bir sinyal oluşturun.
Ve işletim sisteminin ikinci sinyali tüketmek için t dört iş parçacığını seçtiğini ve kritik bölüme
girmesine izin verdiğini varsayalım.
Doğru.
Dolayısıyla, bu kalıbı sonsuza kadar tekrarlayabilirsem, örneğin, T5 iş parçacığı gelir
ve sistemdeki başka bir iş parçacığı için tekrar engellenir ve işletim sistemi t5 iş parçacığını
seçer ve t5 iş parçacığının kritik bölüme girmesine izin verir.
Doğru.
Böylece bu modeli tekrar, tekrar, tekrar ve tekrar tekrarlayabilirim.
Teorik olarak öyle ki, T2 ve T3 iş parçacığının asla CPU alamayacağını ve açlıktan öleceklerini söyleyebilirim.
Doğru.
Peki neden açlıktan ölüyorlar?
Çünkü kritik bölüme girmesine izin vermek için bu sandviç çağrısında engellenen yeni gelen
bir ipliği seçiyorum ve zaten engellenmiş olan T2 ve T3 ipliğine kritik bölüme girme fırsatı
vermiyorum.
Doğru.
Dolayısıyla, üzerinde bloke olan tüm iş parçacıklarının eninde sonunda kritik bölüme gireceğini garanti etmeyen
böyle bir semafor.
Böyle bir semafora zayıf semafor denir.
Doğru.
Peki zayıf semaforun temel nedeni nedir?
Zayıf semaforun temel nedeni, kritik bölüme girmesine izin vermek için semafor üzerinde engellenen
bir iş parçacığını seçerken kullandığımız rastgeleliktir.
Doğru.
Yiyecek bir şeyler almak için bir dükkana gittiğinizde dükkanda çok sayıda insan varsa ve dükkan sahibi
tüm bu müşterileri rastgele bir şekilde eğlendiriyorsa, dükkan sahibi tarafından eğlendirilme
şansınız asla olmayabilir.
Yani, teorik olarak bu mümkün, değil mi?
Böylece T2 ve T3 iş parçacığı açlığa maruz kalır.
İşlemci için açlıktan ölüyorlar.
Doğru.
Semafor üzerinde bloke olan tüm iş parçacıklarının eninde sonunda bir CPU almasını bir şekilde sağlayabilirsek,
böyle bir semafor güçlü bir semafor olarak adlandırılır.
Doğru.
Yani, blok iş parçacıklarının blokajının sinyal başına doğru bir şekilde Fifo tarzında kaldırılacağı bir yol kullanabilirsek,
böyle bir semaforun güçlü bir semafor olduğu söylenir.
Şimdi bu sorun örneğini tekrar gözden geçirelim.
T1 ve T2 iş parçacığı ile üçüncü iş parçacığının semafor üzerinde bloke olduğunu ve sistemdeki başka bir iş parçacığının bir
sinyal ürettiğini varsayalım.
Doğru.
Şimdi burada T1, T2 ve T3 iş parçacığının Fifo bir şekilde semafor üzerinde engellenmesini sağlıyoruz.
Yani şimdi dördüncü iş parçacığı gelirse semaforda engellenecek, ancak en sonda Fifo kuyruğuna
eklenecektir.
Ve sistemdeki başka bir iş parçacığı tarafından üretilen herhangi bir sinyal, yalnızca bu Fifo kuyruğunun önündeki
iş parçacığı tarafından tüketilecektir.
Doğru.
Dolayısıyla, sinyali tüketecek ve kritik bölüme girmesine izin verecek olanın T1 iş parçacığı olmasını
sağlayabilirsek.
Doğru.
Yine, sistemdeki başka bir iş parçacığı ikinci bir sinyal üretirse, t iki iş parçacığını alabilir
ve kritik bölüme girmesine izin verebiliriz.
Doğru.
Ve ve sistemde.
Yeni bir iş parçacığı gelirse, bu iş parçacığını kuyruğun sonuna sıralayacağız.
Bu beşinci iş parçacığıdır, böylece ilk gelen iş parçacığı sinyal üretildikten sonra kritik
bölüme girme şansına sahip olur.
Doğru.
Şimdi bir Fifo düzenini koruyarak, yeterli sayıda sinyal üretildiği sürece sonunda tüm
iş parçacıklarının kritik bölüme gireceğini garanti ettik.
Doğru.
Dolayısıyla böyle bir semafora güçlü semafor denir ve zayıf bir semafor güçlü semafora dönüştürülebilir.
Eğer engellenen iş parçacıklarına bazı önceliklere göre kritik bölüme girmeleri için sinyal gönderebileceğimiz
bir mekanizma kurabilirsek, bu durumda Fifo kuyruğunu kullandık.
Doğru.
Dolayısıyla, iş parçacığı senkronizasyon veri yapınız eninde sonunda tüm blok iş parçacıklarının kritik
bölüme gireceğini gösteren bir özelliğe sahip olduğunda, iş parçacığı senkronizasyon veri yapınızın
sınırlı bekleme özelliğine sahip olduğunu söyleriz.
Dolayısıyla sınırlı bekleme, herhangi bir senkronizasyon çözümünün sahip olması gereken arzu edilen bir özelliktir.
Doğru.
Sınırlı bekleme, bir semafor üzerinde engellenen belirli bir iş parçacığının sonlu miktarda bekleme süresine sahip olacağı
anlamına gelir.
Gelecekte bir noktada semafor üzerinde bloke edilen iş parçacıklarının eninde sonunda
bir CPU alacağı ve kritik bölüme gireceği garanti edilir.
Doğru.
Dolayısıyla bu özelliğe sınırlı bekleme denir.
Dolayısıyla zayıf semaforlar, blok iş parçacığı seçim politikasını biraz rastgele biraz deterministik olarak
değiştirerek güçlü semaforlara dönüştürülebilir.
Bu durumda Fifo kuyruğu şu anda zayıf bir semaforu güçlü bir semafora dönüştürmek için bazı arka plan çalışmaları
yapmamızı gerektiriyor.
Yani, semaforumuzu akıllı hale getirmemiz gerekir, böylece Fifo kuyruğundan bir iş parçacığı seçebilir
ve bir sinyal tüketildiğinde yalnızca bu iş parçacığının kritik bölüme girmesine izin verilmelidir.
Doğru.
Bu yüzden bu kursun devamında bu alıştırmayı yapacağız.
Bu derste şemamızı akıllı hale getireceğiz ve zayıf şema for'dan güçlü şema for'a dönüştüreceğiz.
Uyguladığımız dahili veya özel şema kuvveti ne olursa olsun, kullandığımız çabalar zayıf şema
kuvvetiydi.
Aslında sadece semaforlar değil, muteksler de zayıf mutekslerdir çünkü muteks üzerinde bloke olan t1, T2 ve T3 iş parçacıkları
işletim sistemi tarafından rastgele seçilir ve iş parçacıklarından sadece biri kritik
bölüme girer.
Dolayısıyla burada uyguladığımız mantık muteks için de geçerlidir.
Ve bir semaforun zayıf bir semafor olmasının arkasındaki açıklamanın doğası gereği teorik olduğunu unutmayın.
Değil mi?
Zayıf semaforları dağıtırken bunu zaten görmüştünüz.
İşletim sistemi, semafor üzerindeki blok iş parçacıkları arasından iş parçacıklarını bir miktar rastgelelikle seçtiği
için, bloke iş parçacıklarımızdan herhangi birinin asla CPU alamayacağı bir duruma düşmeyiz.
Böylece sonunda tüm iş parçacıkları CPU'yu alma ve kritik bölüme girme şansına sahip olur.
Doğru.
Ancak teorik olarak birisi size iş parçacığı senkronizasyon veri yapınızın sınırlı bekleme özelliğinden yoksun olduğunu
iddia ederse, bu kullandığınız semaforun veya çözümün zayıf olduğu anlamına gelir.
Değil mi?
Semafor üzerinde bloke olan bir iş parçacığının açlık sorununa maruz kalabileceği
bir iş parçacığı senkronizasyon programı yazmanız zordur.
Değil mi?
Böyle bir program yazmak zordur çünkü işletim sisteminiz blok iş parçacıklarını bir miktar rastgelelikle
seçer ve sonunda semafordaki tüm bloklanmış iş parçacıkları bir CPU alacaktır.
Yani semaforunuzun zayıf bir semafor olduğunun kanıtı doğası gereği teoriktir, değil mi?
Bunu gösteremezsin.
Bunu gösteremezsiniz, kanıtlayamazsınız, ancak teorik olarak tartışabilirsiniz.