şükela:  tümü | bugün
19 entry daha
  • counting semaphores ve binary semaphores olarak ikiye ayrılır. mutex lock dedigimiz sey bir binary semaphore dur.

    bahsi gecen wait ve signal fonksiyonlari ise, critical section icerisinde bulunurlar. cunku baskalarinin de bunlari birisi cagirirken cagirmasini istemiyoruz aynı semafor üstünde.

    semaforlar, senkronizasyon problemini cozerler. bu wait ve signal komutları da atomik komutlardır.

    sistemlerde bir tane semafor olmaz. implementasyonunda da busy waiting sorunu vardır. o yüzden busy waiting olmaması için her semafora bir tane waiting queue atanır. bu waiting queue içerisinde de her data entrysinde bir value bir de bir sonraki data entry i gösteren pointer bulunur. waiting queue ile ilgili de 2 operasyondan bahsedebiliriz; block ve wakeup.

    wait icerisinde duruma bakılır. once s yi, s-- diyerek 1 azaltırız. bu azaltma sonucunda, eger resource yok ise, yani s < 0 ise; o halde block() u çağırır o process i bekleme listesine atarız.

    signal içerisinde ise s++ durumu mevcut. yani resource ekliyoruz. bu durumda s<=0 ise, wakeup ı çağırıyoruz.

    block, process i waiting queue ye koyar.
    wakeup da waiting queue de olan process i alıp ready queue ye koyar.