Paginare

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

Paginarea (sau paginarea), în calcul , este tehnica prin care sistemul de operare al computerului , prin intermediul pagingului lor de algoritmi respectivi, împarte memoria în părți de dimensiuni mai mici și alocă programului de executat folosind pagini ca un bloc minim de lucru. [1]

Descriere

Beneficii

Deoarece programele rareori folosesc toate părțile codului și datelor în același timp, este convenabil să implementați mecanismul de memorie virtuală , care constă în scrierea blocurilor de memorie, numite „pagini”, pe disc și reîncărcarea lor în memorie, citirea acestora din același disc atunci când este necesar. Abilitatea de a implementa acest mecanism este unul dintre avantajele paginării față de alte tehnici concurente.

Dezavantaje

Cel mai mare dezavantaj al paginării este natura relativ mai complexă a codului de program necesar pentru realizarea acestuia, mai ales dacă este implementată memoria virtuală. Un dezavantaj minor este necesitatea de a avea procesoare echipate cu funcționalitatea numităunitate de gestionare a memoriei (MMU), care nu este prezentă pe cele din generațiile mai vechi (de exemplu în familia Intel x86 , începând cu 80386 au MMU).

De asemenea, poate apărea fragmentarea, de exemplu atunci când, pentru a stoca o anumită cantitate de date, este necesar puțin mai mult spațiu decât cel pus la dispoziție de o pagină. În acest caz, devine necesară alocarea unei pagini complet noi, din care este utilizată doar o mică parte din spațiul disponibil. Același tip de fragmentare apare atunci când cantitatea de memorie care trebuie salvată este mai mică decât dimensiunea unei pagini. În acest caz vorbim de fragmentare internă.

Un alt dezavantaj este cu siguranță cel al performanței. Fără paginare computerul va funcționa cu siguranță mai repede. Dar cu o pierdere excesivă de funcționalitate în comparație cu viteza câștigată. Nu puteți implementa o mulțime de lucruri, inclusiv tehnici de reducere a utilizării memoriei (cum ar fi schimbarea pe disc).

Principiul de funcționare

În paginare, accesul la memorie se realizează la nivel hardware , în conformitate cu o schemă de tabel de pagini administrată de MMU. Așa cum s-a explicat mai sus, memoria fizică este împărțită în blocuri mici (de obicei mai mici de 4 kilobyți) și fiecărui bloc i se atribuie un număr de pagină. Sistemul de operare păstrează o listă a acestor pagini în memoria sa internă sau, mai rar, poate decide să testeze memoria de fiecare dată când este trimisă o cerere de alocare. În orice caz, de fiecare dată când un program trimite o cerere de memorie, sistemul de operare alocă un număr suficient de pagini programului și păstrează o listă a paginilor alocate. Iată un exemplu:

Cadru Se solicită programul Adresa fizică a memoriei
0 Programul A.0 1000: 0000
1 Programul A.1 1000: 1000
2 Programul A.2 1000: 2000
3 Programul B.0 1000: 3000
4 Programul B.1 1000: 4000
5 Programul D.0 1000: 5000
6 Programul D.1 1000: 6000
7 Programul B.2 1000: 7000

Această listă este un exemplu de tabel de alocare, în care fiecare pagină ocupă 4 kilobyți. Alocarea efectivă s-ar fi putut produce în această succesiune:

  1. Programul A necesită 3 pagini de memorie
  2. Programul C necesită 2 pagini de memorie
  3. Programul D necesită 2 pagini de memorie
  4. Programul C se încheie, lăsând 2 pagini goale
  5. Programul B necesită 3 pagini de memorie și obține cele 2 pagini goale lăsate de programul C, plus o pagină suplimentară după programul D.

În consecință, tabelul de mapare va conține:

  • Programul A: 0 => 0, 1 => 1, 2 => 2
  • Programul B: 0 => 3, 1 => 4, 2 => 7
  • Programul D: 0 => 5, 1 => 6

Acum să vedem ce se întâmplă atunci când un program trebuie să-și acceseze memoria. Presupunând că programul A conține instrucțiunile:

ÎNCĂRCAȚI datele stocate la adresa 20FE

Într-un sistem pe 16 biți, reprezentarea binară a lui 20FE este 0010000011111110, deci atunci când este trimisă cererea,unitatea de gestionare a memoriei „o vede” astfel:

0010000011111110 = 20FE
| __ || __________ |
 | |
 | v
 v Adresa relativă a memoriei în cadrul paginii (0FE)
Număr pagină (2)

Deoarece există pagini cu lungimea de 4096 de octeți (4096-1 = 4095 poate fi reprezentat în formă binară cu 12 biți), MMU le utilizează pentru a le adresa primii 4 biți ca număr de pagină și următorii 12 pentru adresa relativă din interiorul pagină. Dacă paginile ar avea 2048 de octeți, MMU ar folosi primii 5 biți pentru numărul paginii și următorii 11 biți pentru adresa relativă. Rezultă că atunci când dimensiunea paginii este mai mică, prin paginare este posibil să se adreseze un număr mai mare de pagini.

Când un program face o cerere de acces la memorie, MMU examinează tabelul paginilor de memorie ocupate de program pentru a mapa numărul de pagină corespunzător. Apoi, când se face această solicitare de alocare a memoriei, MMU folosește tabelul de pagini ocupat de program pentru a mapa paginile corespunzătoare ale sistemului de operare. În exemplul prezentat aici, a doua pagină a Programului A mapează a doua pagină a sistemului de operare, iar apoi „fizic” mapează pagina sistemului de operare. A doua pagină mapată de OS este localizată la adresa de memorie fizică 1000: 2000 în timp ce adresa relativă la care programul necesită acces este 00FE; în consecință, MMU va returna programului datele conținute la adresa fizică 1000: 20FE.

Implementări de paginare

Cele de mai sus sunt o introducere generală, dar există variații în modul în care diferitele platforme implementează tehnica de paginare. De exemplu, în computerele bazate pe arhitectura i386 , CPU utilizează un cache special numit Translation Lookaside Buffer (TLB), care conține maparea între adresele de memorie virtuală și memoria fizică care constituie copia de rezervă a acesteia. În consecință, odată ce tabela de căutare este generată și înainte ca paginile de memorie fizică să fie eliberate sau schimbate , tabelele de căutare nu trebuie să fie regenerate (în detrimentul puterii de calcul a procesorului), deoarece conținutul lor este deja în cache în TLB. Sistemul de operare se va ocupa apoi de eliminarea mapărilor din tabel atunci când nu mai indică adrese valide. Utilitatea tehnicii de mapare a paginării poate fi bine înțeleasă dacă avem în vedere că poate salva mii (sau chiar milioane) de adrese făcute cu tehnica tradițională.

Schimbare și paginare

În cazul în care memoria fizică necesară diferitelor procese depășește o anumită limită (fiecare sistem de operare are propria limită stabilită și, în unele cazuri, ca în Linux , modificabilă), unele pagini trebuie stocate temporar pe hard disk și reîncărcate. în timp de nevoie. Această tehnică se numește swapping și vă permite să reduceți utilizarea memoriei. Cu toate acestea, accesul la memoria de masă, de obicei un hard disk, are loc în perioade mult mai lungi decât la memoria de lucru - accesul la RAM este de ordinul nanosecundelor, accesul la discul de milisecunde - riscă să încetinească în mod semnificativ inacceptabil computerul, ca să nu mai vorbim uzura discurilor care sunt folosite excesiv. Schimbul este implementat de toate sistemele de operare moderne, inclusiv Linux și Windows . Desigur, mecanismul de schimbare intră în joc numai atunci când sistemul este supus stresului și există multe procese care rulează și puțină memorie fizică disponibilă. De aceea, atunci când avem multe programe deschise, viteza de execuție a fiecăruia dintre ele scade semnificativ, atât pentru că timpul de execuție este împărțit pentru fiecare proces utilizat, cât și pentru că utilizarea memoriei fizice este mare și, prin urmare, paginile sunt schimbate.

Accesul la disc trebuie deci minimizat, stocând doar paginile despre care se așteaptă să fie numite cel mai puțin. Pentru a face acest lucru, există algoritmi numiți LRU care aleg paginile potrivite pentru a fi schimbate între cele LRU (Cel mai recent folosit - mai puțin recent utilizat). Cu toate acestea, este imposibil să se prevadă exact paginile care nu vor fi utilizate, așa că foarte des acești algoritmi fac greșeli schimbând o pagină care va fi utilizată în scurt timp și, prin urmare, încetinind computerul (de fapt, trebuie mai întâi să scrie pagina pe disc, apoi citiți-l din nou imediat după aceea) fără a reduce utilizarea memoriei.

Pagini partajate

Unele pagini de memorie pot fi disponibile pentru mai multe procese în plus față de sistemul de operare, în acest caz vorbim de pagini partajate sau pagini partajate . Pagini partajate sunt utilizate, de exemplu, pentru a permite proceselor să comunice între ele (gândiți-vă la simplul „copiere și lipire” care permite unui program să lipească text copiat de la altul). O altă utilizare importantă a paginilor partajate este gestionarea optimă a proceselor create prin fork () . Un proces copil, de fapt, teoretic are o copie exactă a memoriei tatălui, adică a tuturor variabilelor, precum și a fișierelor și conexiunilor deschise, dar de multe ori execuția sa este redusă la utilizarea a foarte puține pagini și foarte puțin cod , efectuarea oricărei operații de copiere a tuturor paginilor tatălui este inutilă. Prin urmare, de obicei sunt copiate doar primele pagini și apoi, eventual, cele care sunt solicitate prin tehnica Copy on Write , în plus, paginile care conțin codul pot fi aceleași.

Paginarea și memoria virtuală

Când tehnica de paginare este utilizată simultan cu cea a memoriei virtuale , sistemul de operare trebuie să-și amintească ce pagini sunt utilizate în prezent și care nu (sau cele care nu mai sunt folosite de ceva timp). Atunci când sistemul de operare consideră că a sosit momentul potrivit sau când un program solicită o pagină salvată pe disc, o altă pagină este salvată pe disc și încă una este încărcată în memorie. Acest mecanism vă permite să „vedeți” mai multă memorie decât este disponibilă fizic pe computer.

În general, nu recomandăm utilizarea memoriei virtuale mai mari de 3 ori sau mai mult din memoria RAM [2] și, în general, se recomandă o dimensiune între 1,5x până la 2x comparativ cu dimensiunea RAM a sistemului [3] . În Windows este setat automat la 1,5 ori RAM [4] .

Notă

Bibliografie

Elemente conexe

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