İşletim Sistemlerinde Senkronizasyon -5

Process Senkronizasyon

Race Condition

Birden fazla process aynı anda çalışıyorsa ve  aynı kaynağa erişecekse bunların hangisinin çalışacağı belli değildir. Bunlar bir yarış içerisindedir. CPU ‘da bekliyorlardır.
Örnek verilmek gerekirse ; MS-DOS üzerinde Race Condition yoktur.Zaten tek bir process bulunmaktadır.

Kritik Alan Problemleri

Birden fazla Thread’in paylaştığı ve problem olabilecek  alanların tespit edilmesi gerekir. Yazılan kodda nerede paylaşılır ve senkronize edilecek bunların tespit edilmesi gerekiyor. Problem edilecek alanların korunması gerekir.  Eş zamanlılığı sağlayabilecek kodlamanın yapılması esastır.
Kritik alanların girişine ve çıkışına özel kodlar yazılarak bu alanlar korunabilir.

Senkronizasyon yapılırken dikkat edilmesi gereken üç tane husus vardır ;

1-) Mutual Exclusion (Karşılıklı Dışlama)
Aynı anda arttırma yapılırken; başka taraftan azalırsa bu Mutual Exclusion’a uymaz. Ben bir iş yaparken başka hiç kimse başka bir iş yapmasın mantığı ile çalışır.
2-) Progress
Önce Producer çalışıyor daha sonra Consumer çalışıyor. Bir tanesi çalıştıktan sonra diğeri çalışacak. Sırayla bir çalışma gerçekleşecektir.
3-)Bounded Waiting
Producer çalıştıktan hemen sonra Consumer çalışmak zorunda değil. İşin belli bir esnekliğe ulaşma hakkı vardır.

Preemtive ( Kesintili)

İşlemci sıradaki işlemi aldı ve bu işlem her ne olursa olsun belli bir süre sonra bekleme sırasına konulup yeni bir işlem alınacak ise kesintili algoritmadır.
Örnek: Round Robin Algoritması

NonPreemtive (Kesintili Olmayan)
Bir iş alındıktan sonra ne olursa olsun o işi bitirip öyle bir sonraki işlem alınacak ve yapılan iş asla yarım kalmayacak ise bu kesintili olmayan algoritmadır.
Örnekleri;
En kısa iş ilk ( Shortest Job First)
İlk Gelen İlk Çıkar ( First in first out )
İlk Gelen Son çıkar ( First in last out)

Peterson’un Çözümü
-Load ve Store komutlarının atomik olduğu varsayılmıştır. Bu iki işlemi iki değişken paylaşmaktadır. Turn ve Flag
-Turn değişkeni kritik kısma giriş sırasının kimde olduğunu belirtir.
-Flag dizisi bir işlemn kritik kısma girişe hazır olup olmadığını belirtir.

Not: Yazılım tabanlı mimari çözümlerin(Peterson Algoritması gibi.) modern bilgisayar mimarilerinde çalışmasının garantisi yoktur. Kritik kısım problemlerini çözmek için küçük bir araca ihtiyacımız olabilir. Örneğin : Lock

Senkranizasyon Donanımı
Tek İşlemcili sistemler geçici olarak kesintileri(interrupt) iptal edebilme yetkisine sahiplerdir. O an çalışan kod bölünmeden çalışmaya devam edebilir.
Atomik yapı: kesilmeyen (non-interruptable) olarak adlandırılabilir.

Semafor ( Semaphore)

Semafor, işletim sistemi ve müşterek programlamada (concurrent programming, eş zamanlı programlamada) sıkça kullanılan bir eşleme (synchronization) yöntemidir. Yani birden fazla sürecin(process) eş zamanlı çalışması halinde birbirleri için risk teşkil ettikleri kritik zamanlarda (critical sections) birbirlerini beklemesini sağlayan bir mekanizmadır. Semaforlar üzerinde kilitleme ve kilidi kaldırma yerine, semafor değerini artırma ve azaltma şeklinde işlemler yapılabilir.
-Meşgul bekleme yani busy waiting gerektirmeyen bir senkronizasyon aracıdır.
-Iki Standart işlem alır: acquire() ve release()
-Daha az karmaşıktır.
Counting Semaphore: Tam sayı değeri sınırsız bir değer aralığına sahip semafordur
Binary Semaphore : Tam sayı değeri sadece 0 veya 1 değerini alabilir. Mutex Lock olarak da bilinmektedir.

P ve V İşlemler

-P işlemi bekleme, uyku veya aşağı çalışma olarak adlandırılabilir.
-V işlemi ise sinyal,uyanma ve yukarı işlem olarak adlandırılır.
-Bu işlemler atomiktir. Ve semaforlar hep 1 ile başlamaktadır.

Karşılıklı dışlanma Mutual Exclusion; iki süreçten oluştuğu varsayılsın. Semafor S 1 olarak başlatılır. P1in kritik bölümünde girildiği varsayılır ise ; semaforun değeri 0 olur. Daha sonra P2 kritik bölümüneg irmek istiyorsa o zaman s>0 olana kadar bekleyecektir. P1 kritik bölümünü bitirdiğinde ve semafor s’deki V işlemini çağırdığında gerçekleşir. Ve Mutul Exclusion oluşmuş olur.



Deadlock ve Starvation

Kilitlenme(Deadlock): İki veya daha fazla işlem, sadece bekleyen bir işlemin neden olabileeği bir olayı sonsuza kadar bekler. Yüksek öncelikli process gelince düşük öncelikli process’e bakmaz. Ve hep yüksek öncelikli gelirse; düşük öncelikli processe bir türlü sıra gelmez. Ve deadlock olur.
Starvation(Açlık): Sınırsız bloklanma; semafor beklenme listesinde bekleyen bir işlemin hiçbir zaman listeden silinmemesi durumudur. Last in first of sırasıyla çalışır.

Klasik Senkronizasyon Problemleri
-Sınırlı Tampon Bellek Problemi(Bounded-Buffer Problem)
-Okuyucular-Yazıcılar Problemi(Readers-Writers Problem)
-Yemek Yiyen Filazoflar Problemi(Dining-Philosophers Pr
oblem)

ÖZETLE;

  • Senkronizasyon problem tek işlem varken karşımıza çıkmaktadır. Tek işlemcide de bu sıkıntı gerçekleşebilir. Çok işlemcide de bu sıkıntı gerçekleşebilir.
  • Processlerin çalışmaları başlangıçtan sonuna kadar bazı durumlar araya girdiği sürece bozulabilir. Eğer tek bir process olsa ve bölünse sorun olmaz fakat birden fazla process varsa ve ortaklaşa bir iş varsa; Process’in çalışmasının bölünmesi sıkıntıya yol açar.
  • Processlerden bir tanesi Counter’ın değerini arttırmak diğeri ise azaltmak istiyor. Bu alanda donanımdan kaynaklı bir problem vardır. Memory’de duran bir değişkenin değerini arttırmak istiyorsam; İşlemciye getirmem gerekir. Registers’da bu değeri arttırıp; Memory’e geri yazılması gerekir. (Oku,Değiştir,Yaz) (Read,Modify,Write).
  • Processler çalışmak için birbirleri ile yarışıyorlarsa ve ortaklaşa kaynaklara erişiyor ise bu Race Condition olarak adlandırılır.
  • Birden fazla adımdan oluşan ve bu adımların arasına başka bir işin girmesinin izin verilmediği iş akışına Transaction adı verilir. Bu yapılmadığı zaman tutarsız sonuçlar alınır.
  • İşletim sistemi altında yüzlerce Process çalışmaktadır.
  • Kritik bölge probleminde bir protokol hazırlanmaktadır. Kritik bölge problemerinde giriş ve çıkış kuralları vardır.
  • N tane Process’ten sadece bir tanesi içerde, diğerleri dışarıda ise ; bu olaya Mutual Exclusion(Karşılıklı Dışlama) adı verilir.Ben iş yaparken başka hiç kimse iş yapmasın mantığında çalışır.
  • Kritik bölgede hiçbir Process yok ve kritik bölgeye girmek isteyen Processler var ise bu Processler bekletilemez. Process çalışıyormuş gibi görünüp çalışmaması durumu Starvation’dur.
  • Önce Producer sonra Consumer çalışıyor . Bir tanesi çalıştıktan sonra diğeri sırayla çalışacak (Progress.)ü
  • Kendisi beklerken diğer Processler gelip bir Process’i geriye itebilir.Bounded Waiting’te Producer çalıştıktan sonra Consumer çalışmak zorunda değildir. Esneklik mevcuttur.
  • İşlemci sıradaki işlemi aldı ve her ne olursa olsun belli bir süre sonra bekleme sırasına konulup yeni bir işlem alınacak halde çalışıyorsa Preemtive(Kesintili)’dir. Round Robin Algoritması
  • NonPreemtive ; bir iş alındıktan sonra ne olursa olsun o işi bitirp öyle bir sonraki işlem alınacak ve o işlem asla yarım kalmayacak şekilde çalışıyor ise NonPreemtive’dir. Nonpreemtive performansı düşüktür.
  • Peterson’un çözümü algoritmik bir çözümdür. Critical Section’a girmek isteyen iki Process vardır. Mutual Exclusion kullanılıyor. Progress şartı yerine getiriliyor. Bounded Waiting ‘de kullanılıyor. Sadece ve sadece iki process için Peterson çözümü kullanılabilir ama N tane process için faydalı bir yöntem değil. Çoğu zaman Critical Section ‘a girmek isteyen Processlerin sayısı ikiden fazla olmaktadır.
  • Busy Waiting; Meşgul, Bekliyor; Boşa enerji harcamaktadır. Niçin bekliyor ? İşlemci zaten öbür taraftaki işini bitirene kadar; gerçek olamayacak şartları durmadan kontrol ediyor. Process durumu değişmediği sürece Waiting’de tutmam gerekir.  
  • Waiting’te bekleyenlerin tamamının Ready’e transfer olması sağlanması gerekiyor. Processler Waiting’ten alınıp Ready’e konulabilir. Buna semafor adı verilmektedir.
  • Lock değişkenin değeri O ya da 1 değerlerini alabilir. Sadece 0 veya 1 değerlerini alabilen Semaphore’lara Binary Semaphore adı verilir.
  • Semaphore tam sayı hiçbir zaman negative değer alamaz. Alabileceği en küçük değer sıfırdır.
  • Semaphore’yi binary olarak kullanıyor isem; mutual exclusion olarak kullanıyorum demektir.
  • Semaphore başka bir amaç için de kullanılabilir. Bu amaçlardan biri Senkranizasyondur. Yani Mutual Exlusion ve Senkranizasyon olarak kullanılır.



Ders : İşletim Sistemleri( Doç. Dr. Ali Gökhan Yavuz )

Yıldız Teknik Ünviersitesi Bilgisayar Mühendisliği Bilgi Teknolojileri Programı



Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir