Yazan: Yrd. Doç. Dr. Şadi Evren ŞEKER

Birbirini dışlama özelliği, birden fazla işin birbiri ile ilişkisizliğini belirtmek için kullanılan bir terimdir. Örneğin iki işlem (process) veya iki lifin (thread) birbirinden bağımsız çalışmasını, aynı anda bir işlemi yapmamasını istediğimiz zaman birbirini dışlama özelliğini kullanabiliriz. Bazı kaynaklarda, kısaca mutex (mutually exclusive kısaltması) olarak da geçer.

İki adet birbirine paralel ilerleyen iş için (concurrent) aynı anda bir kaynağa erişme veya birbirleri için kritik olan işlemler yapma ihtimali her zaman bulunur. Örneğin bilgisayarda çalışan iki ayrı lifin (thread) JAVA dilinde ekrana aynı anda bir şeyler basmaya çalışması veya paylaşılan bir dosyaya aynı anda yazmaya çalışması, eş zamanlı programlamalarda, sıkça karşılaşılan problemlerdendir. Bu problemin çözümü için, işlemlerin senkronize edilmesi gerekir ve temel işletim sistemleri teorisinde 4 yöntem önerilir:

Yukarıda sayılan bu 4 yöntem, basitçe iki farklı işi senkronize hale getirmeye yarar. Şayet iki ayrı işin birbirine hiçbir şekilde karışmaması isteniyorsa (mutex) bu durumda çeşitli algoritmaların kullanılmasıyla sistemdeki işlerin ayrılması sağlanabilir. Örneğin aşağıda, iki çok kullanılan algoritmaya bağlantı verilmiştir:

Yorumlar

  1. HK

    Hocam merhabalar ,

    Şu sıra işletim sistemleriyle boğuşmaktayım :),bir kaç sorum var
    internetten ne kadar arastırdıysam birşey elde edemedim,sizin için
    sorun olmazsa yardımınıza başvurmak istiyorum.

    ilk sorum:

    İkiden çok süreç katılması durumunda kullanılabilecek bir
    uygulama(application) seviyesi karşılıklı dışlama(mutual
    exclusion)yapısını nasıl gerçekleriz?

    ikinci sorum:

    Bir sürecin CPU veya I/O ağırlıklı çalışacağı sürecin kaynak kodu
    analiz edilerek belirlenebilirmi?nasıl olur.Bu işlem koşma(run time)
    zamanında nasıl yapılabilir?

    ve sonuncusu :

    UNIX'te Kernel system Callı yakaladığında kernel hangi sistem call'ın
    icra edeceğini nasıl anlar?
    --------------

    Hocam tüm sorularım bunlar ,geçtiğimiz sene ayrık matematik dersinde
    graflar üzerine yazdığınız makaleleri okudum çok yardımcı
    olmuşlardı.Çok teşekkür ederim iyi çalışmalar iyi günler
    dilerim .

  2. Şadi Evren ŞEKER Article Author

    ilk sorunuzun cevabı zaten yazıda var, hatta algoritmalarını bile anlatmıştım bunlardan anlaşılmayan bir nokta varsa cevaplamaya çalışayım.

    ikinci sorunuzun cevabı genel olarak hayır. Ancak çok başarılı olmasa da bazı şeyler yapılabilir. Mesela bir kodda hiç dosya komutu yoksa CPU bound (cpu ağırlıklı) çalışması muhtemeldir. Veya kodda bulunan komutlar ve daha önce çalışan işlemlerle aralarında istatistik tablosu oluşturulabilir. Şu komutların olduğu kodlar daha çok I/O bound şeklinde bir istatistik tablosu oluşabilir ancak neticede kesin olarak bilinemez.

    Kernel Call'lar için ID numaraları bulunmaktadır. Kernel Hacking Howto isminde oldukça güzel hazırlanmış ve çekirdeğe (kernel) yeni bir system call ekleme işlemini adım adım anlatan bir doküman var internette, bu ve benzeri yazıları okursanız unistd.h dosyasında bulunan #define satırları ile her system call için bir kayıt ve yegane numara (unique number) oluşturulması açıklanmıştır.

Bir Cevap Yazın

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


× 2 = on