Ce Este Semaphore? Numărătoare, tipuri binare cu exemplu
⚡ Rezumat inteligent
Semaphore Într-un sistem de operare, este o variabilă întreagă non-negativă partajată între fire de execuție care coordonează accesul la resursele partajate prin două operații atomice, wait și signal, prevenind condițiile de concurență în timpul sincronizării proceselor.

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.
Caracteristicile Semaphore
Iată caracteristicile 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 semafoare sunt:
- Numărarea semafoarelor
- Semafoare binare
Socoteală Semaphores
Acest tip de Semaphore folosește un numărător care ajută la achiziționarea sau eliberarea unei sarcini de mai multe ori. Dacă numărătorul inițial = 0, semaforul de numărare ar trebui creat în starea indisponibilă.
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
Semafoarele binare sunt destul de similare cu numărarea semafoarelor, dar valoarea lor este restricționată la 0 și 1. În acest tip de semafor, operația de așteptare funcționează numai dacă semaforul = 1, iar operația de semnalizare reușește când semaforul = 0. Este mai ușor de implementat decât numărarea semafoarelor.
Exemplu de Semaphore
Programul de mai jos este o implementare pas cu pas, care implică utilizarea și declararea unui semafor.
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.
P(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).
P(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
Tabelul de mai jos compară o semafor cu mutex în funcție de mai mulți parametri:
| 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ă semaforul și semaforul binar. | 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 accesul la secțiunea critică din partea mai multor fire de execuție.
- 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.
Dezavantaje ale Semaphores
Iată dezavantajele/dezavantajele semaforului:
- Una dintre cele mai mari limitări ale unui semafor este inversarea priorității.
- Sistemul de operare trebuie să păstreze track din toate apelurile să aștepte și să semnalizeze 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ă, așadar există șanse să nu se realizeze excluziunea 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.


