Ce este Semafor?
Semaforul este pur și simplu o variabilă care este non-negativă și partajată între fire. Un semafor este un mecanism de semnalizare, iar un fir care așteaptă pe un semafor poate fi semnalizat de un alt fir. Folosește două operații atomice, 1) așteptați și 2) semnal pentru sincronizarea procesului.
Un semafor permite sau interzice accesul la resursă, care depinde de modul în care este configurată.
În acest tutorial, veți învăța:
- Ce este Mutex?
- Utilizarea semaforului
- Utilizarea Mutex
- Diferența dintre semafor și Mutex
- Concepții greșite comune despre Mutex și Semaphore
- Avantajele semaforului
- Avantajele Mutex
- Dezavantajul semaforelor
- Dezavantaje ale Mutex
Ce este Mutex?
Forma completă a Mutex este obiectul de excludere reciprocă. Este un tip special de semafor binar folosit pentru controlul accesului la resursa partajată. Acesta include un mecanism de moștenire prioritară pentru a evita problemele de inversare a priorităților extinse. Permite sarcinilor curente cu prioritate mai mare să fie menținute în starea blocată pentru cel mai scurt timp posibil. Cu toate acestea, moștenirea prioritară nu corectează inversarea priorității, ci doar minimizează efectul acesteia.
DIFERENȚA CHEIE
- Mutex este un mecanism de blocare, în timp ce Semaphore este un mecanism de semnalizare
- Mutex este doar un obiect, în timp ce Semafor este un întreg
- Mutex nu are subtip, în timp ce Semaphore are două tipuri, care numără semafor și semafor binar.
- Semaphore acceptă modificarea operațiunilor de așteptare și semnal, în timp ce Mutex este modificat numai prin procesul care poate solicita sau elibera o resursă.
- Valoarea semaforului este modificată folosind operațiile wait () și signal (), pe de altă parte, operațiile Mutex sunt blocate sau deblocate.
Utilizarea semaforului
În cazul unui singur buffer, putem separa bufferul de 4 KB în patru buffere de 1 KB. Semaforul poate fi asociat cu aceste patru tampoane. Acest lucru permite utilizatorilor și producătorilor să lucreze la diferite tampoane în același timp.
Utilizarea Mutex
Un mutex oferă excludere reciprocă, care poate fi fie producător, fie consumator, care poate avea cheia (mutex) și poate continua cu munca lor. Atâta timp cât producătorul umple tamponul, utilizatorul trebuie să aștepte și invers. În blocarea Mutex, tot timpul, doar un singur fir poate funcționa cu întregul buffer.
Diferența dintre semafor și Mutex
Parametrii | Semafor | Mutex |
---|---|---|
Mecanism | Este un tip de mecanism de semnalizare. | Este un mecanism de blocare. |
Tipul de date | Semaforul este o variabilă întreagă. | Mutex este doar un obiect. |
Modificare | Operațiile de așteptare și semnal pot modifica un semafor. | Este modificat numai prin procesul care poate solicita sau elibera o resursă. |
Managementul resurselor | Dacă nicio resursă nu este gratuită, atunci procesul necesită o resursă care ar trebui să execute operațiunea de așteptare. Ar trebui să aștepte până când numărul semaforului este mai mare de 0. | Dacă este blocat, procesul trebuie să aștepte. Procesul trebuie păstrat într-o coadă. Acest lucru trebuie accesat numai atunci când mutex este deblocat. |
Fir | Puteți avea mai multe fire de program. | Puteți avea mai multe fire de program în mutex, dar nu simultan. |
Proprietate | Valoarea poate fi modificată prin orice proces care eliberează sau obține resursa. | Blocarea obiectelor este eliberată numai prin proces, care a obținut blocarea pe ea. |
Tipuri | Tipurile de semafor contează semaforul și semaforul binar. | Mutex nu are subtipuri. |
Operațiune | Valoarea semaforului este modificată utilizând operația wait () și signal (). | Obiectul Mutex este blocat sau deblocat. |
Ocuparea resurselor | Este ocupat dacă toate resursele sunt utilizate și procesul de solicitare a resursei efectuează operația wait () ș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 așteptare de către sistem înainte ca blocarea să fie eliberată. |
Fapte comune despre Mutex și Semaphore
Iată câteva fapte comune despre Mutex și Semaphore:
- O singură sarcină poate dobândi mutex-ul. Deci, există proprietate asociată cu un mutex și numai proprietarul poate elibera mutex.
- Motivele utilizării mutexului și semaforului sunt diferite, poate din cauza similarității în implementarea lor, un mutex ar fi denumit semafor binar.
- O concepție greșită foarte cunoscută este că Mutexes și Semaphores sunt aproape aceleași, singura diferență fiind că un Mutex este capabil să numere până la 1, în timp ce Semaphores capabil să numere de la 0 la N.
- Există întotdeauna incertitudine între semaforul binar și mutex. Puteți auzi că un mutex este un semafor binar, ceea ce nu este corect.
Avantajele semaforului
Iată care sunt avantajele / avantajele utilizării Semaphore:
- Permite mai multor fire să acceseze secțiunea critică
- Semaforele sunt independente de mașini.
- Semaforele sunt implementate în codul microkernel independent de mașină.
- Acestea nu permit mai multe procese să intre în secțiunea critică.
- Deoarece în semafor există o așteptare ocupată, nu se pierde niciodată timpul și resursele procesului.
- Sunt independente de mașină, care ar trebui să fie rulate în codul independent de mașină al microkernelului.
- Acestea permit gestionarea flexibilă a resurselor.
Avantajele Mutex
Aici sunt avantaje / beneficii importante ale Mutex
- Mutexurile sunt doar blocări simple obținute înainte de a intra în secțiunea critică și apoi de a o elibera.
- Deoarece doar un fir este în secțiunea sa critică la un moment dat, nu există condiții de cursă, iar datele rămân întotdeauna consistente.
Dezavantajul semaforelor
Iată, sunt dezavantaje / dezavantaje ale 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 semnaliza semaforul.
- Utilizarea lor nu este niciodată pusă în aplicare, dar este doar prin convenție.
- Pentru a evita blocajele în semafor, operațiile de așteptare și semnal trebuie executate în ordinea corectă.
- Programarea semaforului este o metodă complexă, 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.
- Semaforul este mai predispus la erori de programare.
- Poate provoca blocarea sau încălcarea excluderii reciproce din cauza erorii programatorului.
Dezavantaje ale Mutex
Aici, sunt contra / dezavantajul Mutex
- Dacă un fir obține o încuietoare și se culcă sau este împiedicat, atunci celălalt fir poate să nu mai poată merge înainte. Acest lucru poate duce la înfometare.
- Nu poate fi blocat sau deblocat dintr-un context diferit de cel care l-a achiziționat.
- Trebuie permis un singur fir în secțiunea critică la un moment dat.
- Implementarea normală poate duce la starea de așteptare ocupată, care pierde timpul procesorului.