Copie pe scriere

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

Așa - numita strategie de copiere pe scriere (expresie engleză aproximativ traductibilă ca „copiere în caz de scriere”) este o tehnică de optimizare a computerului menită să reducă duplicarea resurselor sistemului (în general structuri de date sau zone de memorie ) prin eliminarea inutilă copii.

Principiul de funcționare

În timpul operațiunilor normale ale unui program sau ale unui sistem de operare este posibil ca duplicarea unei resurse să fie necesară sau crearea unei noi resurse având conținutul inițial (sau, mai general, starea inițială) identic cu cel al originalului .

Imediat după duplicare și atâta timp cât niciuna dintre cele două resurse nu este modificată, ele sunt, de fapt, de nedistins; în această perioadă de timp existența reală a două copii independente nu este strict necesară: sistemul se poate limita la simularea operației de duplicare, menținând existența unei singure copii și gestionând prin aceasta, într-un mod complet transparent pentru solicitanți, toate operațiile de citire destinate oricăreia dintre cele două.

Duplicarea efectivă a resursei poate fi amânată până când este cu adevărat necesară existența a două resurse independente, adică în corespondență cu o operațiune de schimbare a stării (în general scrierea unui nou conținut, din care numele copie-pe-scriere ) a oricăruia dintre copiile fictive .

Principalul avantaj al strategiei de copiere pe scriere constă în faptul că, dacă o resursă duplicat este ulterior eliberată sau distrusă fără ca originalul sau copia să fie modificate vreodată între timp, sistemul a evitat efectiv duplicarea inutilă, rezultând economii de timp. Prin urmare, copierea pe scriere este cu atât mai avantajoasă cu cât este mai scumpă operațiunea de copiere și cu atât sunt mai rare operațiunile de scriere.

Implementare

Virtualizarea resurselor

Implementarea unei strategii de copiere-scriere necesită ca, în sistem, identificarea resurselor în cauză să fie independentă și independentă (cel puțin din punctul de vedere al utilizatorilor) de locația lor fizică reală; adică este necesar ca aceste resurse să fie virtualizate .

Ceea ce știu și utilizează utilizatorii este un identificator de resursă virtuală, prin intermediul căruia să solicite accesul la resursă de la sistem; sistemul, la rândul său, asociază fiecare identificator cu informațiile necesare pentru a accesa resursa fizică reală. Următoarele vor fi indicate în mod convențional:

  • cu I X identificatorul unei resurse virtuale generice;
  • cu scrierea I X → R asocierea dintre identificatorul I X și resursa fizică R.

Duplicarea resursei virtuale

În situația normală, fiecare resursă fizică este asociată cu un identificator unic:

  • I A → R 1

Când sistemul primește cererea de duplicare a resursei virtuale I A , se generează o nouă resursă virtuală I B, dar nu se creează o nouă resursă fizică: noul identificator este asociat și cu resursa fizică R 1 :

  • I A → R 1
  • I B → R 1

Resursa fizică R 1 nu este încă duplicată: începând din acest moment devine reprezentarea concretă, egală și nedistinguibilă, a ambelor resurse virtuale, iar prin ea sistemul gestionează toate accesele de citire făcute prin identificatorii I A și I B.

Pentru gestionarea corectă a copierii-în-scriere, sistemul trebuie să țină evidența faptului că I A și I B nu împărtășesc cu adevărat resursa fizică R 1 și, prin urmare, orice încercare de a scrie acces la resursă prin oricare dintre ele trebuie să fie interceptat și gestionat corespunzător pentru a nu-i afecta pe ceilalți. [1]

Scrierea unei resurse virtuale

Presupunând că este necesară o operațiune de scriere (de exemplu, pe resursa virtuală I A ), sistemul notează că acest identificator se referă la o resursă fizică partajată într-un regim de copiere la scriere și, în consecință:

  • interceptează și suspendă operația de scriere
  • creează o nouă resursă fizică R 2 ca o copie a R 1
  • asociază identificatorul I A la R 2

În acest moment, sistemul se află în următoarea stare:

  • I AR 2
  • I B → R 1

Operația de scriere suspendată inițial poate continua apoi, modificând starea lui R 2 fără a interfera cu cea a lui R 1 , care continuă să fie accesibilă prin identificatorul I B.

Principalele aplicații

Tehnica copiere-scriere este adesea utilizată de sistemele de operare pentru a gestiona paginile de memorie în modul de memorie virtuală : paginile partajate pot fi marcate doar ca citire, astfel încât accesele de scriere să fie interceptate de MMU- ul procesorului, ceea ce ridică o excepție și trece controlul către o funcție specială de gestionare a nucleului care asigură duplicarea fizică a paginii în cauză înainte ca reluarea și executarea scrierii.

Copierea pe scriere poate fi, de exemplu, exploatată atunci când un proces necesită (prin furculița apelului de sistem sau similar) crearea unui nou proces copil , inițial identic cu el însuși, [2] sau pentru a optimiza crearea bufferului de mari dimensiuni, mai ales când sunt împrăștiate . [3]

Notă

  1. ^ Cazul partajării reale a resursei este diferit, în care este în schimb normal și se așteaptă ca orice modificare făcută prin orice identificator asociat cu aceasta să fie vizibilă și prin toate celelalte.
  2. ^ Avantajul acestei abordări este deosebit de evident în sistemele în care încărcarea în memorie a unui nou program este descompusă în cele două operații de fork și exec : procesul copil care provine din fork nu trebuie să copieze datele procesului original , deoarece următorul apel la executare le va înlocui aproape imediat cu cele ale noului program.
  3. ^ Tampoanele mari inițializate la zero, precum cele produse de funcția calloc în C , pot fi simulate de sistem prin îndreptarea tuturor paginilor de memorie virtuală necesare pentru a o conține către o singură pagină fizică care conține doar octeți nuli; abia mai târziu, dacă și când aplicația încearcă să scrie în acest buffer, sistemul va aloca fizic paginile de memorie strict necesare.

Elemente conexe

Alte proiecte

linkuri externe