semafor vs.Mutex

Introducere

un proces de sistem de operare (OS) interacționează cu alte procese care rulează în același sistem pentru a finaliza o sarcină comună. Procesele care interacționează cu alte procese sunt cunoscute sub numele de procese de cooperare.

pe baza strategiilor de comunicare Inter-proces (IPC) implementate de un proces, acesta poate fie să-și partajeze spațiul de adrese cu alte procese, fie să comunice prin schimb de mesaje. În tehnica anterioară, este esențial să controlați comunicarea, deoarece ambele procese au un spațiu comun de adrese.

acest control al comunicării procesului este cunoscut sub numele de sincronizare. Fără o sincronizare adecvată, procesele pot citi date învechite sau pot suprascrie alte date de proces.

semaforul și mutexul sunt două mecanisme prin care putem implementa sincronizarea și gestiona coordonarea proceselor. În acest articol, vom analiza aceste două utilități de sincronizare și vom compara diferite caracteristici.

înțelegerea secțiunii critice

înainte de a discuta despre semafor și mutex, să înțelegem problema secțiunii critice.

să presupunem că avem un sistem care conține n procese. Fiecare dintre aceste procese are un segment de cod în care procesul poate efectua o actualizare variabilă comună, o actualizare de tabel sau poate scrie într-un fișier. Acest segment de cod este denumit secțiunea critică a unui proces.

2.1. Caracteristicile unei probleme de secțiune critică

caracteristica esențială a secțiunii critice este că, odată ce un proces începe să-și execute secțiunea critică, niciun alt proces nu este permis să-și execute secțiunea critică. Adică, nu există două procese care să-și poată executa simultan secțiunea critică. Această problemă critică a secțiunii este de a proiecta un protocol astfel încât procesele să poată utiliza cooperarea.

fiecare proces trebuie să obțină permisiunea de a intra în secțiunea sa critică. Bucata de cod care implementează permisiunea este cunoscută sub numele de secțiunea de intrare. În mod similar, bucata de cod care implementează ieșirea secțiunii critice este cunoscută sub numele de secțiunea de ieșire.

2.2. Criteriile unei probleme de secțiune critică

soluția la o problemă de secțiune critică trebuie să îndeplinească următoarele criterii:

  • excludere reciprocă: dacă un proces execută secțiunea critică, atunci niciun alt proces nu poate executa secțiunea critică
  • progres: Dacă niciun proces nu execută secțiunea critică, atunci alte procese pot decide să execute secțiunea critică. Pe baza soluției și a implementării, este selectat un proces care poate executa secțiunea critică. Caracteristicile notabile sunt că procesele au capacitatea de a trece la un proces de selecție pentru a executa secțiunea critică
  • așteptare limitată: ar trebui să existe o așteptare limitată pentru un proces atunci când a solicitat secțiunea de intrare a secțiunii critice și de câte ori un alt proces execută secțiunea critică

Mutex Locks

există mai multe utilitare pentru a rezolva problema secțiunii critice într-un sistem de operare. Excluderea reciprocă (mutex) blochează sau mutex este cea mai simplă soluție. Folosim încuietorile mutex pentru a proteja secțiunea critică și pentru a preveni condițiile de cursă. Un proces trebuie să achiziționeze blocarea înainte de a accesa secțiunea critică și eliberează blocarea odată ce termină executarea secțiunii critice.

3.1. Cum funcționează o blocare Mutex?

aceste două funcționalități pentru achiziționarea și eliberarea blocărilor sunt reprezentate prin două funcții – acquire() și release(). Funcția de achiziție dobândește blocarea, iar eliberarea eliberează blocarea. O blocare mutex are o variabilă booleană care decide dacă blocarea este disponibilă sau nu. Dacă blocarea este disponibilă, atunci metoda acquire () reușește, iar blocarea este considerată ca nefiind disponibilă. Orice proces care încearcă să acceseze o blocare indisponibilă este blocat până când blocarea este eliberată.

următorul pseudo-cod arată acquire () metoda:

prestate de QuickLaTeX.com

următorul pseudo-cod arată metoda release ():

 prestate de QuickLaTeX.com

3.2. Dezavantaje ale Mutexelor

dezavantajul major al unei blocări mutex este că permite filetului să se rotească dacă blocarea nu este disponibilă.

în timp ce un fir a achiziționat blocarea și se află în secțiunea sa critică, toate celelalte fire care încearcă să achiziționeze blocarea se află într-o buclă în care firul verifică periodic dacă blocarea este disponibilă. Astfel, se învârte pentru blocare și deșeuri cicluri CPU care ar fi putut fi folosite de alte fire productiv.

aceasta este o problemă majoră într-o singură mașină CPU. Spinlock este, de asemenea, cunoscut sub numele de așteptare ocupată, deoarece firul este „ocupat” în așteptarea încuietorii.

3.3. Avantajele Mutexelor

deși încuietorile mutex suferă de problema spinlock, acestea au un avantaj. Pe măsură ce procesul se învârte în CPU, elimină necesitatea comutatorului de context al procesului, care altfel ar fi fost necesar.

comutatorul de Context al unui proces este o operație intensivă în timp, deoarece necesită salvarea executării statisticilor procesului în blocul de Control al procesului (PCB) și reîncărcarea unui alt proces în CPU. Există procesoare multi-procesor în care un proces se poate roti într-un nucleu de procesor, iar altul își poate executa secțiunea critică. Astfel, un spinlock de scurtă durată în unele scenarii este mai util decât un comutator de context al procesului.

semafor

un semafor este un alt utilitar care oferă, de asemenea, caracteristici de sincronizare similare cu încuietori mutex, dar este mai robust și sofisticat.

un semafor este o variabilă întreagă care, în afară de inițializare, este accesată prin două operații atomice standard – wait() și signal(). Operația wait () este denumită P, iar operația signal() este denumită V.

să aruncăm o privire la operația wait() :

prestate de QuickLaTeX.com

în cele din urmă, să ne uităm la operațiunea signal() :

prestate de QuickLaTeX.com

!

toate operațiile la valoarea întreagă a semaforului în așteptare() și semnal() executat Atomic. Adică, odată ce un proces modifică valoarea semaforului, niciun alt proces nu poate modifica simultan aceeași valoare a semaforului.

pe baza valorii semaforului S, Acesta este clasificat în două categorii – numărarea semaforului și a semaforului binar. Valoarea unui semafor de numărare poate varia de la 0 la o valoare finită. În timp ce, valoarea unui semafor binar poate fi între 0 și 1.

4.1. Numărarea semafoarelor

numărarea semafoarelor poate controla numărul N de instanțe ale unei resurse date. Să explicăm semaforul de numărare cu o analogie.

să presupunem că există o bibliotecă cu trei săli de studiu și există un bibliotecar care deține zece chei, fiecare pentru o cameră diferită. Odată ce un cititor are nevoie de acces la o cameră, trebuie să obțină o cheie pentru a utiliza camera. Odată ce un cititor este terminat cu utilizarea lor, ei returnează cheia camerei Bibliotecarului. Odată ce toate camerele sunt în uz, un cititor nou trebuie să aștepte până când o cameră este eliberată de un cititor existent.

în exemplul de mai sus, resursa este o cameră și există zece cazuri ale acesteia. Aceste instanțe sunt gestionate printr-un semafor de numărare care este inițializat cu zece. Această valoare a semaforului este controlată prin metodele wait() și signal() ale semaforului. Următoarea diagramă ilustrează acest lucru:

4.2. Semafoare binare

un semafor binar are două valori posibile, 0 și 1. Dacă resursa gestionată de semafor este disponibilă, atunci valoarea semaforului este 1. În caz contrar, este setat la 0, indicând că resursa nu este disponibilă.

un semafor binar are aceeași funcționalitate ca o blocare mutex. Sistemele care nu acceptă încuietori mutex pot utiliza semafoare binare pentru a obține aceeași funcționalitate.

următoarea diagramă ilustrează semaforul binar:

semafor vs. Mutex

următorul tabel rezumă caracteristicile importante ale blocărilor semaforului și mutexului:

prestate de QuickLaTeX.com

concluzie

în acest articol, am discutat diverse aspecte ale mutexelor și semafoarelor.

în primul rând, am discutat secțiunea critică și necesitatea unui mutex sau semafor pentru a controla execuția secțiunii critice. Am vorbit apoi despre mutex și semafor.

în cele din urmă, am oferit o comparație între semafor și mutex.

dacă aveți câțiva ani de experiență în informatică sau cercetare și sunteți interesat să împărtășiți această experiență comunității, aruncați o privire la orientările noastre de contribuție.

Lasă un răspuns

Adresa ta de email nu va fi publicată.