Proces Synchronizare: Problemă secțiune critică în sistemul de operare
Ce este Procesul Synccronizare?
Proces 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 cu mai multe procese 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 s-a reflectat neapărat atunci când alte procese au accesat aceleași date partajate. Pentru a evita acest tip de inconsecvență a datelor, procesele trebuie să fie sincronizate între ele.
Cum se procesează SyncLucrări de cronizare?
De exemplu, procesul A schimbă 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 de ieșire permite celorlalte procese 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 trebuie eliminat prin această Secțiune.
- Secțiunea rest: Toate celelalte părți ale Codului, care nu se află în Secțiunea Critică, Intrare și Ieșire, sunt cunoscute sub denumirea de Secțiunea Rest.
Ce este problema secțiunii critice?
O secțiune critică este un segment de cod care poate fi accesat printr-un proces de semnal la un anumit moment de timp. Secțiunea constă din resurse de date partajate care trebuiau 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ă impună 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 folosită atunci când nimeni nu este în secțiunea critică și cineva dorește să intre. Atunci acele procese care nu se află în secțiunea lor de memento ar trebui să decidă cine ar trebui să intre, într-un timp finit.
- În așteptare: Când un proces solicită intrarea în secțiunea critică, există o limită specifică a numărului de procese care pot intra în secțiunea critică. Deci, atunci când limita este atinsă, sistemul trebuie să permită cererii procesului să intre în secțiunea sa critică.
Soluții la secțiunea critică
In proces Synchronizarea, 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 soluția utilizată pe scară largă pentru problemele secțiunilor critice. Acest algoritm a fost dezvoltat de un informatician Peterson, de aceea este numit soluție 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
- Să presupunem că există N procese (P1, P2, ... PN) și fiecare proces la un moment dat necesită intrarea în secțiunea critică
- Este menținută o matrice FLAG[] de dimensiunea N care este în mod implicit fals. Deci, ori de câte ori un proces necesită să intre în secțiunea critică, trebuie să își seteze steagul ca adevărat. De exemplu, dacă Pi vrea să intre, va seta FLAG[i]=TRUE.
- O altă variabilă numită TURN indică numărul procesului care în prezent așteaptă 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: turnul este 2, apoi P2 intră în secțiunea critică și în timp ce iese din turn=3 și, prin urmare, P3 iese din bucla de așteptare.
SyncHardware de cronizare
Uneori problemele Secțiunii Critice sunt rezolvate și de hardware. Unele sisteme de operare oferă o funcționalitate de blocare în care un Proces dobândește o blocare atunci când intră în secțiunea Critică și eliberează blocarea 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 de hronizare nu este o metodă simplă de implementat pentru toată lumea, așa că a fost introdusă și o metodă strictă de software cunoscută sub numele de Blocări Mutex.
Î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ă care este nenegativă ș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 semnalat de un alt fir.
Utilizează 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;
Rezumat
- Sincronizarea proceselor 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.
- 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 memento
- O secțiune critică este un segment de cod care poate fi accesat printr-un proces de semnal la un anumit moment de timp.
- Trei reguli obligatorii care trebuie aplicate prin secțiunea critică sunt: 1) Excluderea reciprocă 2) Soluția procesului 3) Așteptarea 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 vrea să intre.
- În soluția de așteptare legată, după ce un proces face o cerere de intrare în secțiunea sa critică, există o limită pentru câte alte procese pot intra în secțiunea lor critică.
- Soluția lui Peterson este soluția utilizată pe scară largă pentru problemele secțiunilor critice.
- Problemele secțiunii critice sunt rezolvate și prin sincronizarea hardware-ului
- SyncHardware-ul de cronizare nu este o metodă simplă de implementat pentru toată lumea, așa că a fost introdusă și metoda software strictă cunoscută sub numele de Blocări Mutex.
- Semaphore este un alt algoritm sau soluție la problema secțiunii critice.