Etape Synchronizare: Problemă secțiune critică în sistemul de operare
⚡ Rezumat inteligent
Etape SyncCronizarea este sarcina de coordonare a execuției proceselor astfel încât două procese să nu acceseze aceleași date sau resurse partajate în același timp. Aceasta previne inconsistența datelor în sistemele cu mai multe procese prin controlul accesului la secțiunea critică.

Ce este Procesul Synccronizare?
Etape Synchronizare este sarcina de a coordona execuția proceselor într-un mod în care două procese nu pot avea acces la aceleași date și resurse partajate.
Este necesar în special într-un sistem multi-proces atunci când mai multe procese rulează împreună și mai multe procese încearcă să obțină acces la aceleași resurse sau date partajate în același timp.
Acest lucru poate duce la inconsistența datelor partajate. Așadar, modificarea făcută de un proces nu este neapărat reflectată atunci când alte procese accesează aceleași date partajate. Pentru a evita acest tip de inconsistență a datelor, procesele trebuie sincronizate între ele.
Cum se procesează SyncLucrări de cronizare?
De exemplu, procesul A modifică datele dintr-o locație de memorie în timp ce un alt proces B încearcă să citească datele din acelaşi locația 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 intrarea unui anumit proces.
- Secțiunea critică: Această parte permite unui proces să introducă și să modifice variabila partajată.
- Secțiunea de ieșire: Secțiunea Ieșire permite celorlalte procese care așteaptă în Secțiunea de Intrare să intre în Secțiunea Critică. De asemenea, verifică dacă un proces care și-a terminat execuția ar trebui eliminat prin intermediul acestei secțiuni.
- Secțiunea rest: Toate celelalte părți ale Code, care nu se află în Secțiunea Critică, de Intrare și de Ieșire, sunt cunoscute sub numele de Secțiunea Restului.
Ce este problema secțiunii critice?
O secțiune critică este un segment de cod care poate fi accesat de un singur proces la un anumit moment în timp. Secțiunea constă din resurse de date partajate care trebuie accesate de alte 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ă își execute secțiunea 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:
- Excludere mutuala: Excluderea reciprocă este un tip special de semafor binar care este utilizat pentru controlul accesului la resursa partajată. Include un mecanism de moștenire a priorităților pentru a evita problemele de inversare a priorității extinse. Nu mai mult de un proces se poate executa în secțiunea sa critică la un moment dat.
- Progres: Această soluție este utilizată atunci când nimeni nu se află în secțiunea critică și cineva dorește să intre. Apoi, acele procese care nu se află în secțiunea lor rămasă ar trebui să decidă cine ar trebui să intre, într-un timp finit.
- În așteptare: Când un proces face o cerere pentru a intra în secțiunea critică, există o limită specifică privind numărul de procese care pot intra în secțiunea sa critică. Așadar, când limita este atinsă, sistemul trebuie să permită cererii către proces să intre în secțiunea sa critică.
Soluții la secțiunea critică
In proces Synccronizare, 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 lui Peterson este o soluție utilizată pe scară largă pentru problemele secțiunilor critice. Acest algoritm a fost dezvoltat de un informatician pe nume Peterson, motiv pentru care este numit soluția lui Peterson.
În această soluție, atunci când un proces se execută într-o stare critică, celălalt proces execută doar restul codului și se poate întâmpla invers. Această metodă ajută, de asemenea, să vă asigurați că doar un singur proces rulează în secțiunea critică la un moment specific.
Exemplu
PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
- Presupunem că există N procese (P1, P2, ... PN) și fiecare proces, la un moment dat, trebuie să intre în Secțiunea Critică.
- Se menține un array FLAG[] de dimensiune N, care este implicit fals. Așadar, ori de câte ori un proces necesită să intre în secțiunea critică, trebuie să își seteze flag-ul la true. De exemplu, dacă Pi dorește să intre, va seta FLAG[i]=TRUE.
- O altă variabilă numită TURN indică numărul procesului care așteaptă în prezent să intre în CS.
- Procesul care intră în secțiunea critică în timp ce iese ar schimba TURN-ul la un alt număr din lista de procese gata.
- Exemplu: tura este 2, apoi P2 intră în secțiunea critică și la ieșire tura = 3 și, prin urmare, P3 iese din bucla de așteptare.
SyncHardware de cronizare
Uneori, problemele Secțiunii Critice sunt rezolvate și prin hardware. Unele sisteme de operare oferă o funcționalitate de blocare prin care un Proces dobândește un blocaj la intrarea în Secțiunea Critică și îl eliberează după ce o părăsește.
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 încuietorului în sine.
Încuietori Mutex
SyncHardware-ul de cronizare nu este o metodă simplă de implementat pentru toată lumea, așa că a fost introdusă și o metodă software strictă, cunoscută sub numele de Mutex Locks.
În această abordare, în secțiunea de introducere a codului, se obține un LOCK asupra resurselor critice utilizate în interiorul secțiunii critice. În secțiunea de ieșire, blocarea este eliberată.
Semaphore Soluţie
Semaphore este pur și simplu o variabilă non-negativă partajată între fire de execuție. Este un alt algoritm sau o soluție la problema secțiunii critice. Este un mecanism de semnalizare, iar un fir de execuție care așteaptă un semafor poate fi semnalizat de un alt fir de execuție.
Folosește două operații atomice: 1) așteptare și 2) semnal pentru sincronizarea procesului.
Exemplu
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


