İşletim Sistemi Kavramları 5 – Senkronizasyon
Race Condition
Birden fazla işlem aynı anda çalışıyorsa ve aynı kaynağa erişmesi gerekiyorsa, hangi işlemin önce çalışacağı belirlenemez. Bu durumda, işlemler bir yarış içerisindedir ve CPU üzerinde beklemektedirler. Örneğin, MS-DOS üzerinde tek bir işlem olduğu için race condition oluşmaz.
Kritik Alan Problemleri
Birden fazla işlemin paylaştığı ve potansiyel sorun yaratabilecek alanlar tespit edilmelidir. Kodda, hangi alanların paylaşıldığı ve senkronize edilmesi gerektiği belirlenmelidir. Bu alanlar, eşzamanlılık sağlanarak korunabilir. Kritik alanların girişine ve çıkışına özel kodlar eklenerek bu alanlar güvence altına alınabilir.
Kritik alan korumasında üç temel prensip vardır:
- Mutual Exclusion (Karşılıklı Dışlama): Aynı anda birden fazla işlem yapılmaması, işlemin tek başına gerçekleştirilmesi gerektiği durumlarda uygulanır.
- Progress (İlerleme): İşlemler sırayla yürütülmelidir. Örneğin, önce üretici (producer) çalışırken, ardından tüketici (consumer) işlem yapar.
- Bounded Waiting (Sınırlı Bekleme): Bir işlemin tamamlanması hemen ardından bir diğer işlemin başlamasını gerektirmez; belli bir esneklik sağlanır.
Kesintili ve Kesintisiz Algoritmalar
Preemtive (Kesintili): İşlemci sıradaki işlemi alır ve belirli bir süre sonra bu işlem durdurulup sıraya konulabilir. Örneğin, Round Robin algoritması kesintili bir algoritmadır.
Non-Preemtive (Kesintili Olmayan): Bir işlem başladığında, yarıda kesilmeden tamamlanması beklenir. Bu tür algoritmalarda işlem yarım kalmaz. Örneğin, İlk Gelen İlk Çıkar (First In First Out) ve En Kısa İş İlk (Shortest Job First) algoritmaları kesintisiz çalışır.
Peterson’un Çözümü
Peterson’un çözümü, iki işlem arasındaki kritik alan problemini çözmek için yazılım tabanlı bir algoritmadır. Turn ve Flag değişkenlerini kullanarak, işlemlerin sırasını ve hazır olup olmadıklarını belirler. Ancak, modern bilgisayar mimarilerinde yazılım tabanlı çözümlerin her zaman çalışacağı garanti edilmez. Bu yüzden küçük bir donanım kilidi, örneğin bir “lock”, gerekli olabilir.
Senkronizasyon Donanımı
Tek işlemcili sistemlerde, geçici olarak kesintiler iptal edilerek çalışan kodun bölünmeden çalışmaya devam etmesi sağlanır. Kesintisiz çalışmaya atomik yapı denir.
Semafor (Semaphore)
Semaforlar, işletim sistemlerinde ve eş zamanlı programlamada sıkça kullanılan bir senkronizasyon yöntemidir. Kritik alanlarda birden fazla işlemin birbirini beklemesini sağlar. İki temel işlem içerir: acquire()
ve release()
. Semafor türleri:
- Counting Semaphore: Sayısız değer aralığına sahiptir.
- Binary Semaphore (İkili Semafor): 0 veya 1 değerlerini alabilir ve mutex lock olarak bilinir.
P ve V İşlemleri
- P İşlemi: Bekleme veya uyku durumuna geçiş.
- V İşlemi: Uyanma veya yukarı çıkma işlemi. Bu işlemler atomiktir ve semafor değeri başlangıçta 1 olarak ayarlanır.
Deadlock (Kilitlenme) ve Starvation (Açlık)
- Deadlock: İki veya daha fazla işlem, yalnızca bir olayın gerçekleşmesini bekleyerek sonsuz döngüye girer.
- Starvation: Bir işlemin sonsuza kadar bekleme durumunda kalmasıdır.
Klasik Senkronizasyon Problemleri
- Sınırlı Tampon Bellek Problemi (Bounded-Buffer Problem)
- Okuyucular-Yazıcılar Problemi (Readers-Writers Problem)
- Yemek Yiyen Filozoflar Problemi (Dining-Philosophers Problem)
Özetle: Senkronizasyon sorunları, birden fazla işlemin aynı kaynağa erişmesi durumunda ortaya çıkar. İşlemcide aynı anda birden fazla işlem yürütülmesi gerektiğinde, bu işlemlerin sırayla çalışması ve birbirine müdahale etmemesi önemlidir. Senkronizasyon, mutual exclusion ve semaforlar gibi yöntemlerle sağlanır.
Ders: İşletim Sistemleri (Doç. Dr. Ali Gökhan Yavuz)
Program: Yıldız Teknik Üniversitesi, Bilgisayar Mühendisliği Bilgi Teknolojileri Programı