Mutex vs semafor
conform terminologiei sistemului de operare, mutex și semafoarele sunt resurse de kernel care oferă servicii de sincronizare, numite și primitive de sincronizare. Sincronizarea proceselor joacă un rol important în menținerea coerenței datelor partajate. Atât soluțiile software, cât și cele hardware sunt prezente pentru gestionarea problemelor critice ale secțiunii. Dar soluțiile hardware pentru problemele critice ale secțiunii sunt destul de dificil de implementat. Mutex și semafor oferă ambele servicii de sincronizare, dar nu sunt aceleași.
ce este Mutex?
Mutex este un obiect de excludere reciprocă care sincronizează accesul la o resursă. Este creat cu un nume unic la începutul unui program. Mecanismul de blocare mutex asigură un singur fir poate dobândi mutex și introduceți secțiunea critică. Acest thread eliberează mutex numai atunci când iese în secțiunea critică.
este un tip special de semafor binar utilizat pentru controlul accesului la resursa partajată. Acesta include un mecanism de moștenire prioritară pentru a evita problemele de inversare a priorității extinse. Permite păstrarea sarcinilor curente cu prioritate mai mare în starea blocată pentru cel mai scurt timp posibil. Cu toate acestea, moștenirea prioritară nu corectează inversiunea prioritară, ci doar minimizează efectul acesteia.
exemplu
acest lucru este prezentat cu ajutorul următorului exemplu,
utilizarea Mutex
un mutex oferă excludere reciprocă, fie producător sau consumator care poate avea cheia (mutex) și 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 tampon.
când începe un program, acesta solicită sistemului să creeze un obiect mutex pentru o anumită resursă. Sistemul creează obiectul mutex cu un nume sau un ID unic. Ori de câte ori firul de program dorește să utilizeze resursa, ocupă lock on mutex object, utilizează resursa și după utilizare, eliberează blocarea pe mutex object. Apoi, următorul proces este permis să achiziționeze blocarea obiectului mutex.
între timp, un proces a dobândit blocarea obiectului mutex și niciun alt fir sau proces nu poate accesa acea resursă. Dacă obiectul mutex este deja blocat, procesul care dorește să achiziționeze blocarea obiectului mutex trebuie să aștepte și este pus în coadă de sistem până când obiectul mutex este deblocat.
avantajele Mutex
aici sunt următoarele avantaje ale mutex, cum ar fi:
- Mutex este doar încuietori simple obținute înainte de a intra în secțiunea critică și apoi eliberarea acesteia.
- deoarece un singur fir se află în secțiunea sa critică la un moment dat, nu există condiții de cursă, iar datele rămân întotdeauna consecvente.
dezavantajele Mutex
Mutex are, de asemenea, unele dezavantaje, cum ar fi:
- dacă un fir obține o încuietoare și se culcă sau este împiedicat, atunci este posibil ca celălalt fir să nu avanseze. Acest lucru poate duce la foamete.
- nu poate fi blocat sau deblocat dintr-un context diferit de cel care l-a achiziționat.
- un singur fir ar trebui să fie permis în secțiunea critică la un moment dat.
- implementarea normală poate duce la o stare de așteptare ocupată, care pierde timpul procesorului.
ce este Semaforul?
semaforul este pur și simplu o variabilă care nu este negativă și partajată între fire. Un semafor este un mecanism de semnalizare, iar un alt fir poate semnala un fir care așteaptă pe un semafor.
un semafor folosește două operații atomice,
1. Așteptați: operația de așteptare scade valoarea argumentului său S dacă este pozitivă. Dacă S este negativ sau zero, atunci nu se efectuează nicio operație.
2. Semnal pentru sincronizarea procesului: operația semnalului crește valoarea argumentului său S.
un semafor permite sau respinge accesul la resursă, în funcție de modul în care este configurat.
utilizarea semaforului
în cazul unui singur tampon, putem separa tamponul de 4 KB în patru tampoane de 1 KB. Semaforul poate fi asociat cu aceste patru tampoane, permițând utilizatorilor și producătorilor să lucreze simultan pe diferite tampoane.
tipuri de semafor
semafor se distinge prin sistemul de operare în două categorii de numărare semafor și semafor binar.
1. Numărarea semaforului: valoarea semaforului S este inițializată la numărul de resurse prezente în sistem. Ori de câte ori un proces dorește să acceseze resursa, efectuează operația wait()pe semafor și scade valoarea semaforului cu una. Când eliberează resursa, efectuează operația signal () pe semafor și crește valoarea semaforului cu una.
când numărul semaforului ajunge la 0, înseamnă că procesele ocupă toate resursele. Un proces trebuie să utilizeze o resursă atunci când numărul semaforului este 0. Execută operația wait () și este blocată până când valoarea semaforului devine mai mare de 0.
2. Semafor binar: valoarea unui semafor variază între 0 și 1. Este similar cu blocarea mutex, dar mutex este un mecanism de blocare, în timp ce semaforul este un mecanism de semnalizare. În semaforul binar, dacă un proces dorește să acceseze resursa, efectuează operația wait () pe semafor și scade valoarea semaforului de la 1 la 0. Când eliberează resursa, efectuează o operație signal () pe semafor și crește valoarea acesteia la 1. Să presupunem că valoarea semaforului este 0 și un proces dorește să acceseze resursa. În acest caz, efectuează operația wait() și se blochează până când procesul curent care utilizează resursele eliberează resursa.
avantajele semaforului
iată următoarele avantaje ale semaforului, cum ar fi:
- acesta permite mai mult de un fir pentru a accesa secțiunea critică.
- semafoarele sunt independente de mașină.
- semafoarele sunt implementate în codul independent de mașină al microkernelului.
- nu permit mai multor procese să intre în secțiunea critică.
- deoarece este ocupat și așteaptă în semafor, nu există niciodată pierderi de timp și resurse de proces.
- sunt independente de mașină, care ar trebui rulate în codul independent de mașină al microkernelului.
- acestea permit gestionarea flexibilă a resurselor.
dezavantajul semafoarelor
semafoarele au, de asemenea, unele dezavantaje, cum ar fi:
- una dintre cele mai mari limitări ale unui semafor este inversarea prioritară.
- sistemul de operare trebuie să țină evidența tuturor apelurilor pentru a aștepta și semnaliza semaforul.
- utilizarea lor nu este niciodată impusă, ci este doar prin convenție.
- operațiile de așteptare și semnal trebuie executate în ordinea corectă pentru a evita blocajele în semafor.
- programarea semaforului este o metodă complexă, deci există șanse de a nu realiza 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 eroarea programatorului
- și poate provoca un impas sau o încălcare a excluderii reciproce din cauza erorii programatorului.
diferența dintre Mutex și semafor
diferența de bază dintre semafor și mutex este că semaforul este un mecanism de semnalizare, adică procesele efectuează operația de așteptare() și semnal() pentru a indica dacă achiziționează sau eliberează resursa. În schimb, un mutex este un mecanism de blocare, iar procesul trebuie să achiziționeze blocarea unui obiect mutex dacă dorește să achiziționeze resursa. Iată câteva diferențe între semafor și mutex, cum ar fi:
Termeni | Mutex | semafor |
---|---|---|
definiție | mutexul este un mecanism de blocare, deoarece pentru a dobândi o resursă, un proces trebuie să blocheze obiectul mutex și, în timp ce eliberează un proces de resurse, trebuie să deblocheze obiectul mutex. | semaforul este un mecanism de semnalizare, deoarece operațiile de așteptare() și semnal() efectuate pe variabila semaforului indică dacă un proces achiziționează sau eliberează resursa. |
existența | un mutex este un obiect. | semaforul este o variabilă întreagă. |
funcția | Mutex permite mai multe fire de program pentru a accesa o singură resursă, dar nu simultan. | Semaforul permite mai multor fire de program să acceseze o instanță finită de resurse. |
proprietatea | blocarea obiectelor Mutex este eliberată numai prin procesul care a dobândit blocarea obiectului mutex. | valoarea semaforului poate fi modificată prin orice proces care achiziționează sau eliberează resursa prin efectuarea operației wait() și signal (). |
Categorize | Mutex nu este clasificat în continuare. | semaforul poate fi clasificat în numărarea semaforului și a semaforului binar. |
operație | obiectul mutex este blocat sau deblocat prin procesul de solicitare sau eliberare a resursei. | valoarea semaforului este modificată folosind operația wait() și signal () în afară de inițializare. |
resurse ocupate | dacă un obiect mutex este deja blocat, atunci procesul care dorește să achiziționeze resurse așteaptă și să fie pus în coadă de sistem până când resursa este eliberată și obiectul mutex este deblocat. | să presupunem că procesul dobândește toate resursele și nici o resursă nu este gratuită. În acest caz, procesul care dorește să achiziționeze resurse efectuează operația wait() pe variabila semaforului și se blochează până când numărul semaforului devine mai mare de 0. |
Leave a Reply