Ce este sincronizarea proceselor?
Sincronizarea proceselor este sarcina de a coordona execuția proceselor într-un mod în care nici două procese nu pot avea acces la aceleași date și resurse partajate.
Este special necesar într-un sistem multiproces atunci când mai multe procese rulează împreună și mai multe procese încearcă să obțină acces la aceeași resursă sau date partajate în același timp.
Acest lucru poate duce la inconsecvența datelor partajate. Deci, schimbarea făcută de un proces nu se reflectă neapărat atunci când alte procese au accesat aceleași date partajate. Pentru a evita acest tip de inconsecvență a datelor, procesele trebuie sincronizate între ele.
În acest tutorial de sistem de operare, veți afla:
- Ce este sincronizarea proceselor?
- Cum funcționează sincronizarea proceselor?
- Secțiuni ale unui program
- Ce este problema secțiunii critice?
- Reguli pentru secțiunea critică
- Soluții la secțiunea critică
Cum funcționează sincronizarea proceselor?
De exemplu, procesul A schimbând datele într-o locație de memorie în timp ce un alt proces B încearcă să citească datele din aceeași locație de memorie. Există o mare probabilitate ca datele citite de al doilea proces să fie eronate.
Secțiuni ale unui program
Iată patru elemente esențiale ale secțiunii critice:
- Secțiunea de intrare: face parte din procesul care decide introducerea unui anumit proces.
- Secțiune critică: Această parte permite unui proces să introducă și să modifice variabila partajată.
- Secțiunea de ieșire: secțiunea de ieșire permite ca celălalt proces care așteaptă în secțiunea de intrare să intre în secțiunile critice. De asemenea, verifică dacă un proces care și-a încheiat execuția ar trebui eliminat prin această secțiune.
- Secțiunea Rămășiță: Toate celelalte părți ale Codului, care nu se află în Secțiunea critică, intrare și ieșire, sunt cunoscute sub numele de secțiunea Rămășiță.
Ce este problema secțiunii critice?
O secțiune critică este un segment de cod care poate fi accesat printr-un proces de semnal într-un anumit moment. Secțiunea constă din resurse de date partajate care au necesitat accesarea altor procese.
- Intrarea în secțiunea critică este gestionată de funcția wait () și este reprezentată ca P ().
- Ieșirea dintr-o secțiune critică este controlată de funcția signal (), reprezentată ca V ().
În secțiunea critică, poate fi executat doar un singur proces. Alte procese, care așteaptă să execute secțiunea lor critică, trebuie să aștepte până când procesul curent își finalizează execuția.
Reguli pentru secțiunea critică
Secțiunea critică trebuie să aplice toate cele trei reguli:
- Excluderea reciprocă: Excluderea reciprocă este un tip special de semafor binar care este utilizat pentru controlul accesului la resursa partajată. Acesta include un mecanism de moștenire prioritară pentru a evita problemele de inversare a priorităților extinse. Nu mai mult de un proces poate fi executat în secțiunea sa critică simultan.
- Progres: Această soluție este utilizată atunci când nimeni nu se află în secțiunea critică și cineva dorește. Apoi acele procese care nu se află în secțiunea lor de reamintire ar trebui să decidă cine trebuie să intre, într-un timp finit.
- Așteptare legată: atunci când un proces face o cerere pentru a intra în secțiunea critică, există o limită specifică cu privire la numărul de procese care pot intra în secțiunea lor critică. Deci, când limita este atinsă, sistemul trebuie să permită solicitarea procesului de a intra în secțiunea sa critică.
Soluții la secțiunea critică
În Sincronizarea proceselor, secțiunea critică joacă rolul principal, astfel încât problema trebuie rezolvată.
Iată câteva metode utilizate pe scară largă pentru a rezolva problema secțiunii critice.
Soluția Peterson
Soluția Peterson este o soluție utilizată pe scară largă pentru problemele secțiunilor critice. Acest algoritm a fost dezvoltat de un om de știință în informatică Peterson, de aceea este numit soluția Peterson.
În această soluție, atunci când un proces se execută într-o stare critică, atunci celălalt proces execută doar restul codului și se poate întâmpla opusul. Această metodă vă ajută, de asemenea, să vă asigurați că numai un singur proces rulează în secțiunea critică la un anumit moment.
Exemplu
PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
- Să presupunem că există N procese (P1, P2, ... PN) și fiecare proces la un moment dat necesită intrarea în Secțiunea critică
- Se menține o matrice FLAG [] de dimensiunea N, care este în mod implicit falsă. Deci, ori de câte ori un proces necesită intrarea în secțiunea critică, trebuie să-și seteze steagul ca fiind adevărat. De exemplu, dacă Pi vrea să intre, va seta FLAG [i] = TRUE.
- O altă variabilă numită TURN indică numărul procesului care se dorește în prezent să intre în CS.
- Procesul care intră în secțiunea critică în timp ce iese ar schimba TURN la un alt număr din lista proceselor gata.
- Exemplu: rotirea este 2, apoi P2 intră în secțiunea critică și în timp ce iese din viraj = 3 și, prin urmare, P3 iese din bucla de așteptare.
Hardware de sincronizare
Uneori, problemele Secțiunii critice sunt rezolvate și de hardware. Unele sisteme de operare oferă o funcționalitate de blocare în care un proces capătă o blocare atunci când intră în secțiunea critică și eliberează blocarea după ce a părăsit-o.
Deci, atunci când un alt proces încearcă să intre în secțiunea critică, acesta nu va putea intra deoarece este blocat. Poate face acest lucru numai dacă este gratuit prin achiziționarea încuietorii în sine.
Încuietori Mutex
Hardware-ul de sincronizare nu este o metodă simplă de implementat pentru toată lumea, așa că a fost introdusă și metoda software strictă cunoscută sub numele de Mutex Locks.
În această abordare, în secțiunea de introducere a codului, se obține un LOCK peste resursele critice utilizate în secțiunea critică. În secțiunea de ieșire, blocarea este eliberată.
Soluție pentru semafor
Semaforul este pur și simplu o variabilă care este non-negativă și partajată între fire. Este un alt algoritm sau soluție la problema secțiunii critice. Este un mecanism de semnalizare și un fir care așteaptă pe un semafor, care poate fi semnalizat de un alt fir.
Folosește două operații atomice, 1) așteptați și 2) semnal pentru sincronizarea procesului.
Exemplu
WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;
Rezumat:
- Sincronizarea proceselor este sarcina de a coordona execuția proceselor într-un mod în care niciun proces să nu poată avea acces la aceleași date și resurse partajate.
- Patru elemente ale secțiunii critice sunt 1) Secțiunea de intrare 2) Secțiunea critică 3) Secțiunea de ieșire 4) Secțiunea de reamintire
- O secțiune critică este un segment de cod care poate fi accesat printr-un proces de semnal într-un anumit moment.
- Trei reguli obligatorii care trebuie aplicate prin secțiunea critică sunt: 1) Excludere reciprocă 2) Soluție de proces 3) Așteptare legată
- Excluderea reciprocă este un tip special de semafor binar care este utilizat pentru controlul accesului la resursa partajată.
- Soluția de proces este utilizată atunci când nimeni nu este în secțiunea critică și cineva dorește să intre.
- În soluția de așteptare legată, după ce un proces face o cerere pentru a intra în secțiunea critică, există o limită pentru câte alte procese pot intra în secțiunea lor critică.
- Soluția Peterson este o soluție utilizată pe scară largă pentru problemele secțiunilor critice.
- Problemele secțiunii critice sunt, de asemenea, rezolvate prin sincronizarea hardware-ului
- Hardware-ul de sincronizare nu este o metodă simplă de implementat pentru toată lumea, așa că a fost introdusă și metoda software strictă cunoscută sub numele de Mutex Locks.
- Semaforul este un alt algoritm sau soluție la problema secțiunii critice.