Senkronizasyon: Proseslerin çalışmasının belli bir uyum içerisinde çalışmasıdır. Bazı prosesler I/O işlemi yaparken proses CPU’yu kullanabilir. Paralel çalışan prosesler birbiriyle etkileşebilirler. İki ya da daha çok prosesin paylaşılan kaynakları ortaklaşa kullanmalarından dolayı senkronizasyon problemleri ortaya çıkmaktadır.
Paylaşılır ve Paylaşılmaz Kaynak
Kaynağın paylaşılabilir olması, bir prosesin işletimi tamamlanmadan diğer proseslerin de bu kaynağı bir aksaklık oluşturmayacak şekilde kullanabilmesidir. CPU, birincil ve ikincil bellekler paylaşılan kaynaklar grubundandır. Fakat yazıcı bu gruptan değildir. Değişken, dosya ya da tampon bölgelerin paylaşımı söz konusu olduğunda, bunlar üzerinde yapılan işlemin türüne (okuma, yazma) göre paylaşılır ya da paylaşılmaz olurlar.
Arkaplan Bilgisi
Paylaşılan veriye aynı anda erişim veride tutarsızlıklara neden olabilir.
Üretici-Tüketici Durumu
Üretici üretmeden tüketici kullanamayacak, tüketici tüketmeden üretici üretmeye başlayamayacaktır. Başlangıçta count sıfıra eşitlenecektir—>Üretici yeni bir tampon bellek hücresini doldurduğunda count bir artacaktır—>Tüketici bir tampon bellek hücresindeki veriyi tükettiğinde ise count bir azalacaktır.
Yarışma Durumu
Pek çok işlemin aynı anda bir veriye erişmek ve onu değiştirmek istediği durumlarda işlemlerin çalışması sonucu elde edilen sonucun işlemlerin veriye eriştiği sıraya bağlı olduğu durumlara yarışma durumlarıdır. Yarışma durumunda tutarlı sonuç elde etmek için, count değişkenine aynı anda sadece bir işlemin erişmesini sağlamalıyız. Bu da işlemlerin senkronizasyonu ile mümkündür.
Kritik-kısım Problemi
Proseslerin kritik kısım ile hangi sırayla işleme alınmasını sağlayarak senkronizasyonun yapılmasıdır. Ortak bir değişkenin değerini değiştiren, ortak bir tabloyu güncelleyen, ortak kullanılan bir dosyayı güncelleyen durumlara kritik kısım denir.
Kritik-kısım Problemine Çözüm
-Karşılıklı Dışlama (mutual exclusion): Eğer işlem Pi kritik kısımda çalışıyorsa, diğer işlemler kritik kısımda çalışamaz.
-İlerleme (progress): Eğer kritik kısımda çalışan bir işlem yoksa ve bazı işlemler kritik kısımda çalışmak istiyorsa, bu işlemlerden birini seçip çalıştırmak sonsuza kadar ertelenmemelidir.
-Sınırlı Bekleme (bounded waiting): Kritik kısma girmek isteyen bir işlemin bekleme süresi sınırlandırılmalıdır. O işlem beklerken, diğer işlemlerden en fazla belirlenen sayıda işlem kritik kısıma girmelidir. Ardından bekleyen işlemin kritik kısma girmesine izin verilmelidir.
Kritik Bölge Problemlerinin Çözümü
- Kesmeler Aktif ve Pasif Yapılarak: Bir proses kritik kesiminegirince sistem kesilmelere karşı kapatılarak diğer proseslerin ilgilikritik kesimine girmesi engellenebilir ve kritik kesim tamamlanınca da tekrar kesilmelere açılabilir.
- Ortak Değişken Kullanımı: Başka bir paylaşılır değişken kullanılarak prosesler arasında koordinasyon sağlanır. Bu değişkenin ismi ‘lock’ olsun. Prosesler kritik kesimlerine girerken bu değişkeni ‘True’, kritik kesimlerinden çıkarken de ‘False’ yapmak suretiyle birlikte çalışırlar.
Semaforlar
Senkronizasyonda kullanılan araçlardan birisidir.
- Sayaç semaforu (counting semaphore) – Tam sayı değeri sınırsız bir değer aralığına sahiptir.
- İkili semafor (binary semaphore) – Tam sayı değeri sadece 0 ya da 1 değerlerini alabilir; gerçekleştirimi daha basit olabilir.
Kilitlenme (Deadlock):
- Kilitlenme için Gerekli Koşullar
- Kilitlenme Durumunda Kullanılan Yaklaşımlar
- Sistemin kilitlenme durumuna girmemesini sağlamak.
- Kilitlenmeyi önlemek
- Kilitlenmeden kaçınmak
- Sistem kilitlenme durumuna girdiyse bu durumdan kurtulmasını sağlamak.
- Sistemin kilitlenme durumuna girmemesini sağlamak.
Kilitlenme (Deadlock) Nedir?
Sistem kaynaklarını ortak olarak kullanan veya birbiri ile haberleşen bir grup prosesin kalıcı olarak bloke olması durumuna kilitlenme adı veriler.
Kilitlenme (Deadlock) : İki veya daha fazla işlem, sadece bekleyen bir işlemin neden olabileceği bir olayı sonsuza kadar bekliyor.
Açlık (Starvation): Sınırsız bloklanma.
Kilitlenmeler Ne Tip Kaynaklar Üzerinde Olur?
Kilitlenmeler tekrar kullanılabilir kaynaklar (birincil ve ikincil bellekler, I/O cihazları, dosyalar, semaforlar) ya da tüketilir kaynaklar (kesmeler, mesajlar, I/O cihazlarının tamponları) üzerinde oluşabilir.
Kilitlenme Durumları
- Bir proseste yer alan thread’ler arasında
- Farklı proseslerdeki thread’ler arasında
Ayrıca uygulama programları ve işletim sistemi fonksiyonları arasında da kilitlenme meydana gelebilir.
Kilitlenme için Gerekli Koşullar
- Karşılıklı dışlama (mutual exclusion): En azından bir kaynağın, diğer prosesler tarafından kullanılamadığı bir durumda kilitlenmeden söz etmek mümkündür.
- Sahiplenme ve bekleme (hold and wait): Bir proses en azından bir kaynağı elinde tutmalı ve diğer prosesler tarafından tutulan ek bir kaynağa gereksinim duymalıdır.
- Geri alınamaz kaynak(no preemption): Bir prosese atanan kaynaklar, işletim sistemi tarafından prosesin kendi isteği dışında elinden alınamıyorsa.
- Döngüsel bekleme (circular waiting): Proseslerin gereksinim duyduğu kaynakları, karşılıklı olarak birbirlerinden beklemesi durumudur.