Ce Este Semaphore? Numărătoare, tipuri binare cu exemplu

Ce Este Semaphore?

Semaphore este pur și simplu o variabilă care este nenegativă și partajată între fire. Un semafor este un mecanism de semnalizare, iar un fir care așteaptă pe un semafor poate fi semnalat de un alt fir. Utilizează două operații atomice, 1) Așteptați și 2) Signal pentru sincronizarea procesului.

Un semafor fie permite sau interzice accesul la resursă, ceea ce depinde de modul în care este configurat.

Caracteristică Semaphore

Iată, sunt caracteristice unui semafor:

  • Este un mecanism care poate fi folosit pentru a asigura sincronizarea sarcinilor.
  • Este un mecanism de sincronizare de nivel scăzut.
  • Semaphore va păstra întotdeauna o valoare întreagă nenegativă.
  • Semaphore poate fi implementat folosind operațiuni de testare și întreruperi, care ar trebui să fie executate folosind descriptori de fișiere.

Tipuri de Semaphores

Cele două tipuri comune de semafore sunt

  • Numărarea semafoarelor
  • Semafoare binare.

Socoteală Semaphores

Acest tip de Semaphore folosește un numărător care ajută sarcina să fie achiziționată sau eliberată de mai multe ori. Dacă numărul inițial = 0, semaforul de numărare ar trebui creat în starea indisponibilă.

Socoteală Semaphores
Socoteală Semaphores

Cu toate acestea, dacă numărul este > 0, semaforul este creat în starea disponibilă, iar numărul de jetoane pe care le are este egal cu numărul său.

Binar Semaphores

Semaforele binare sunt destul de asemănătoare cu numărarea semaforelor, dar valoarea lor este restrânsă la 0 și 1. În acest tip de semafor, operația de așteptare funcționează numai dacă semafor = 1, iar operațiunea de semnal reușește când semafor = 0. Este ușor să implementează decât numărarea semaforelor.

Binar Semaphores

Binar Semaphores

Exemplu de Semaphore

Programul de mai jos este o implementare pas cu pas, care implică utilizarea și declararea semaforului.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Așteaptă și Signal Operațiuni în Semaphores

Ambele operații sunt folosite pentru implementare sincronizarea proceselor. Scopul acestei operațiuni cu semafor este de a obține excluderea reciprocă.

Asteapta pentru OperaTION

Acest tip de operație cu semafor vă ajută să controlați intrarea unei sarcini în secțiunea critică. Totuși, dacă valoarea așteptării este pozitivă, atunci valoarea argumentului așteptare X este decrementată. În cazul valorii negative sau zero, nu se execută nicio operațiune. Se mai numește și operațiune P(S).

După ce valoarea semaforului scade, care devine negativă, comanda este menținută până când sunt îndeplinite condițiile cerute.

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

Signal operaţie

Acest tip de Semaphore operațiunea este utilizată pentru a controla ieșirea unei sarcini dintr-o secțiune critică. Ajută la creșterea valorii argumentului cu 1, care este notat cu V(S).

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

Socoteală Semaphore vs. binar Semaphore

Iată câteva diferențe majore între numărare și semafor binar:

Socoteală Semaphore Binar Semaphore
Fără excludere reciprocă Excludere mutuala
Orice valoare întreagă Valoare doar 0 și 1
Mai mult de un slot Un singur slot
Furnizați un set de procese Are un mecanism de excludere reciprocă.

Diferență între Semaphore vs. Mutex

parametrii Semaphore mutex
Mecanism Este un tip de mecanism de semnalizare. Este un mecanism de blocare.
Tipul de date Semaphore este o variabilă întreagă. Mutex este doar un obiect.
Modificare Operațiile de așteptare și semnal pot modifica un semafor. Este modificat doar de procesul care poate solicita sau elibera o resursă.
Managementul resurselor Dacă nicio resursă nu este liberă, atunci procesul necesită o resursă care ar trebui să execute operația de așteptare. Ar trebui să aștepte până când numărul semaforului este mai mare decât 0. Dacă este blocat, procesul trebuie să aștepte. Procesul trebuie ținut la coadă. Acesta trebuie accesat numai când mutex-ul este deblocat.
Fir Puteți avea mai multe fire de execuție de program. Puteți avea mai multe fire de execuție în mutex, dar nu simultan.
Proprietate Valoarea poate fi schimbată prin orice proces care eliberează sau obține resursa. Blocarea obiectului este eliberată numai de procesul, care a obținut blocarea asupra acestuia.
Tipuri de Tipuri de Semaphore se numără semafor și semafor binar și Mutex nu are subtipuri.
Ziua Operației Semaphore valoarea este modificată utilizând operația de așteptare () și semnal (). Obiectul Mutex este blocat sau deblocat.
Ocuparea resurselor Este ocupat dacă toate resursele sunt utilizate și procesul care solicită resurse efectuează operația de așteptare () și se blochează până când numărul de semafor devine >1. În cazul în care obiectul este deja blocat, procesul care solicită resurse așteaptă și este pus în coadă de sistem înainte ca blocarea să fie eliberată.

Avantajele Semaphores

Iată avantajele/beneficiile utilizării Semaphore:

  • Permite mai multor fire să acceseze secțiunea critică
  • Semaphores sunt independente de mașină.
  • Semaphores sunt implementate în codul independent de mașină al microkernel-ului.
  • Ele nu permit intrarea mai multor procese în secțiunea critică.
  • Deoarece se așteaptă ocupat în semafor, nu există niciodată o risipă de timp și resurse de proces.
  • Sunt independente de mașină, care ar trebui să fie rulate în codul independent de mașină al microkernel-ului.
  • Acestea permit gestionarea flexibilă a resurselor.

Dezavantajul semaforelor

Aici, sunt contra/dezavantajele semaforului

  • Una dintre cele mai mari limitări ale unui semafor este inversarea priorității.
  • Sistemul de operare trebuie să țină evidența tuturor apelurilor pentru a aștepta și a semnala semaforul.
  • Utilizarea lor nu este niciodată impusă, dar este doar prin convenție.
  • Pentru a evita blocajele în semafor, Wait și Signal operațiunile trebuie să fie executate în ordinea corectă.
  • Semaphore programarea este complicată, deci există șanse să nu se realizeze excluderea reciprocă.
  • De asemenea, nu este o metodă practică pentru utilizarea pe scară largă, deoarece utilizarea lor duce la pierderea modularității.
  • Semaphore este mai predispus la erori de programator.
  • Poate cauza impas sau încălcarea excluderii reciproce din cauza erorii programatorului.

Rezumat

  • Semaphore este definită ca o variabilă care este nenegativă și partajată între fire.
  • Este un mecanism care poate fi folosit pentru a asigura sincronizarea sarcinilor.
  • Semaforul de numărare folosește o contorizare care ajută sarcina să fie achiziționată sau eliberată de mai multe ori.
  • Semaforele binare sunt destul de asemănătoare cu numărarea semaforelor, dar valoarea lor este limitată la 0 și 1.
  • Operația de așteptare vă ajută să controlați intrarea unei sarcini în secțiunea critică
  • Signal operația cu semafor este folosită pentru a controla ieșirea unei sarcini dintr-o secțiune critică
  • Socoteală Semaphore nu are excludere reciprocă în timp ce Binary Semaphore are excludere reciprocă
  • Semaphore înseamnă un mecanism de semnalizare, în timp ce Mutex este un mecanism de blocare
  • Semaphore permite mai multor fire să acceseze secțiunea critică
  • Una dintre cele mai mari limitări ale unui semafor este inversarea priorității.