Care este diferența dintre dimensiunea paginii și dimensiunea intrării tabelului de pagini?

Cel mai bun răspuns

Ei bine, dimensiunea paginii este spațiul necesar pentru o pagină. (Este destul de simplu )

Pentru a avea doar un pic de fundal aici, un tabel de pagini este un tabel de conversii de la adrese virtuale la adrese fizice pe care sistemul de operare le utilizează pentru artificial crește cantitatea totală de memorie principală disponibilă într-un sistem. Memoria fizică este biții reali aflați la adresele din memorie (DRAM), memoria virtuală este locul în care sistemul de operare se află în procesele pentru a le spune unde se află pentru a face lucruri cum ar fi permite 2 ^ 64 de biți de spațiu de adrese, în ciuda faptului că 2 ^ 34 de biți este cea mai mare memorie RAM utilizată în mod normal. (2 ^ 32 biți este de 4 gigaocteți, deci 2 ^ 34 este 16 gb.)

Acum, cele mai multe dimensiuni implicite dimensiunile tabelului de pagină sunt 4096 kb pentru fiecare proces, dar numărul de intrări în tabelul de pagini poate crește dacă procesul are nevoie de mai mult spațiu pentru proces. Mărimile tabelului de pagină pot fi, de asemenea, inițial alocate cantități mai mici sau mai mari sau memorie, doar că 4 kb este de obicei cea mai bună dimensiune pentru majoritatea proceselor. Deci dimensiunea intrării tabelului de pagină ar fi exact cantitatea potrivită de spațiu pentru a păstra orice adresă într-un spațiu de adrese de 32 de biți.

Să luăm în considerare un exemplu aici: Luați în considerare un sistem cu un spațiu de adrese logice de 32 de biți. Dacă pagina dimensiunea într-un astfel de sistem este de 4 KB (212), atunci un tabel de pagini poate consta în până la 1 milion de intrări (232/212). Presupunând că fiecare intrare este formată din 4 octeți , fiecare proces poate avea nevoie de până la 4 MB spațiu de adresă fizică numai pentru tabelul de pagini.

Cum să îl înțelegem pe deplin?

Răspuns: 4 octeți (32 de biți) ) este exact cantitatea potrivită de spațiu pentru a păstra orice adresă într-un spațiu de adrese de 32 de biți. Deoarece 1 milion de intrări de 4 octeți fiecare face 4 MB, un proces „poate” să aibă nevoie de până la 4 MB de spațiu de adrese fizic.

Răspuns

A pagina ta ble este menținut de sistemul de operare pe bază de proces. Fiecare proces are propriul său tabel de pagini și de aceea nu trebuie să stocăm niciun identificator de proces în tabelul de pagini. Tabelul de pagini mapează un anumit număr de pagină logică / virtuală cu cadrul fizic real / adresa paginii.

Adresa logică pentru o referință de memorie este de forma:

Adresa logică:

Numărul paginii (numărul paginii virtuale) este folosit pentru a efectua căutarea în tabelul de pagini și pentru a obține adresa de bază a cadrului fizic la care este mapat. Adresa de bază a cadrului (f) este apoi combinată cu decalajul în pagina (d) pentru a obține adresa cadrului de memorie fizică ca:

f = page-table [p]

Adresă fizică:

Acum, luați în considerare un sistem cu:

1. spațiu de adresă logică: 32 de biți 2. dimensiune pagină: 4KB (2 ^ 12) 3. dimensiune intrare tabel pagină: 4 octeți 4. memorie fizică: 2 GB

Rețineți că 4 octeții unei intrări în tabelul de pagini stochează în mod eficient mai multe tipuri de informații, în afară de adresa de bază a cadrului fizic. Aceste informații pot fi pentru protecția memoriei (bit valid / invalid), tipul de acces (citire / scriere), contabilitate etc. Deci, când Mă refer la adresa cadrului fizic (f), mă refer de fapt la această parte specială a intrării pe 4 octeți.

Să calculăm dimensiunea unui tabel de pagină:

Dimensiunea tabelul paginii = (Nr. intrări * dimensiunea fiecărei intrări).

Având în vedere parametrii de mai sus, o adresă logică pe 32 de biți va fi partiționată în:

sau

.

Acum putem calcula că numărul de intrări din tabelul de pagini (numărul total de pagini virtuale) poate fi de 2 ^ 20. Prin urmare, dimensiunea tabelului de pagini ar fi:

(2 ^ 20) * 4bytes = 4MB de spațiu (per proces).

Acest spațiu ar fi necesar în memoria fizică pentru tabelul de pagini al fiecărui proces. Nu uitați că avem doar 2 GB de memorie principală și să aveți 4 MB din acest spațiu pentru tabelul de pagini al fiecărui proces poate să nu fie o idee bună. De asemenea, multe dintre adresele virtuale ar putea să nu aibă nicio adresă de pagină fizică mapată la acestea. , totuși dimensiunea tabelului de pagini va fi mare. Chiar dacă bitul „valid” nu este setat pentru un număr de pagină virtuală, un spațiu pentru acesta va trebui să existe în tabelul de pagini.

În caz de partajare memorie, având un tabel de pagini pe proces va necesita o intrare a aceleiași pagini fizice în tabelul de pagini al fiecărui proces care are acces partajat la acea pagină. Astfel, sistemul va ajunge să păstreze mai multe intrări pentru aceeași adresă de cadru fizic. Nu este o utilizare foarte bună a memoriei fizice.

De asemenea, putem înțelege că o tabelă de pagini pentru fiecare proces va conține o intrare pentru fiecare adresă virtuală. Dimensiunea tabelului este astfel proporțională cu dimensiunea logică / virtuală spațiu de adresă care se poate dovedi a fi enorm.

Scopul nostru este de a reduce / optimiza cantitatea de memorie fizică necesară pentru stocarea tabelelor de pagini. Tabelul de pagini inversate este o astfel de soluție.

Tabelul de pagini inversate este un tabel de pagini global menținut de sistemul de operare pentru toate procesele. Există un singur tabel de pagini în întregul sistem, ceea ce implică faptul că trebuie adăugate informații suplimentare în tabelul de pagini pentru a identifica intrările din tabelul de pagini corespunzătoare fiecărui proces.

Stochează o intrare pe cadru fizic și este o matrice liniară în care conținutul de la fiecare locație este și indexul fiecărei locații este adresa cadrului fizic. Formula se va modifica acum:

= page-table [f]

Acest lucru implică imediat că căutările nu se mai pot întâmpla pe numărul paginii virtuale. Întreaga tabelă trebuie căutată intrare cu intrare pentru a găsi o intrare potrivită cu pid egal cu „id” și numărul paginii virtuale egal cu „p”. Locația index corespunzătoare potrivirii este adresa cadrului fizic (f), care apoi combinată cu offsetul (d) oferă adresa fizică.

Putem deduce cu ușurință acel timp de căutare într-o pagină inversată tabelul poate fi semnificativ mai mare în comparație cu un simplu tabel de pagini .

Cu toate acestea, deoarece tabelul stochează o intrare pentru fiecare adresă de cadru fizic și există o singură tabelă de pagini în întregul sistem, cantitatea de memorie utilizată de tabelul de pagini inversate s-a redus considerabil. Cum?

Luați în considerare din nou aceiași parametri:

1. spațiu de adresă logic: 32 de biți 2. dimensiune pagină: 4KB (2 ^ 12) 3. dimensiune intrare tabel pagină: 4 octeți. 4. memorie fizică: 2 GB (2 ^ 31)

Numărul de intrări în tabelul de pagini = Număr de pagini fizice =

(2 ^ 31) / (2 ^ 12) = 2 ^ 19 pagini fizice sau cadre.

Să spunem că folosim identificatori de proces de 1 octet. Dimensiunea fiecărei intrări în tabelul de pagini ar fi:

8 biți (PID) + 20 biți ( numărul paginii virtuale) + 4 biți (informații de acces) = 32 biți = 4 octeți.

Dimensiunea tabelului paginii = (2 ^ 19) * 4 = 2MB pentru întregul sistem.

Performanța tabelelor de pagini inversate este de obicei abordată prin tabele de pagini hash. Dar există încă un dezavantaj al utilizării tabelelor de pagini inversate în afară de performanță. Este memorie partajată.

Deoarece există o singură intrare în tabelul de pagini pentru fiecare cadru fizic și care conține exact un număr de pagină virtuală, nu mai putem asocia același cadru fizic la mai multe numere de pagini virtuale în diferite procese. Există modalități în acest sens, dar nu conștientizăm detaliile de scris aici .

Sursă – Concepte ale sistemului de operare (Silberschatz și colab.)

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *