Testează și setează

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică, instrucțiunea test-and-set este utilizată pentru a scrie pe o locație de memorie și pentru a returna vechea sa valoare ca o singură operație atomică (neîntreruptibilă). Dacă mai multe procese pot accesa aceeași zonă de memorie și dacă un proces efectuează un test-and-set, niciun alt proces nu poate iniția un alt test-and-set până când primul proces nu și-a terminat propriul. CPU poate utiliza instrucțiunile de testare și setare oferite de alte componente electronice sau poate furniza propriile instrucțiuni de testare și setare. În exemplul următor, funcția verifică și modifică atomic conținutul unui octet.

 bool Test - și - Set ( bool * țintă ) {
   bool val ;
   val = * țintă ;
   * țintă = ADEVĂRAT ;
   retur val ;
}

Instrucțiunea permite mai multor procese de coordonare să modifice o variabilă partajată fără a suporta inconsistență a datelor, adică modificarea acesteia fără riscul ca, cu preempțiunea sistemului de operare, un proces să nu finalizeze modificarea datelor, ducând astfel la rezultate imprevizibile . Zona de cod în care programul modifică aceste date partajate se numește secțiune critică. Scopul este ca din n procese doar unul să intre într-o secțiune critică, evitând astfel alte procese care cooperează cu acesta să acceseze date care nu au fost încă complet modificate, menținând în același timp coerența datelor.

 blocare bool = FALS ;
în timp ce (...) {
   în timp ce (Test - și - Set (& blocare)); // procesul așteaptă: altcineva se află în secțiunea critică
   // - SECȚIUNEA CRITICĂ -
   blocare = FALS ; // proces ieșit din SC: permiteți intrarea unui alt proces
   // - RESTUL CODULUI
}

În acest exemplu de implementare Test and Set, primul proces care intră în primul timp poate intra în secțiunea critică, deoarece blocarea este inițializată la FALS. Testul și setarea, cu toate acestea, acum setează blocarea la TRUE, prevenind astfel toate celelalte procese care rulează în SC și astfel „suspendă” execuția lor la al doilea timp (așteptare ocupată). Când procesul inițial s-a încheiat, SC setează blocarea la fals, permițând unui alt proces să intre exact în același mod în care a intrat primul proces. Cu toate acestea, această implementare nu respectă așteptarea limitată: de fapt, un proces ar putea aștepta mult timp, deoarece nu există nicio prioritate pentru cine ajunge mai devreme sau mai târziu. O implementare mai complexă care implică utilizarea unui tablou pentru a ține cont de procesele de așteptare și alte variabile elimină această problemă, permițând primului element găsit în tabloul de așteptare să intre în SC. În acest fel, un proces presupunând că matricea este de N procese nu poate aștepta mai mult de N - 1 ori, echilibrând astfel timpul de așteptare pentru toate procesele primite.

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT