Documente Academic
Documente Profesional
Documente Cultură
Memoria virtual
6.7.1. Principii
Memoria virtual permite sistemului de calcul utilizarea unei memorii cu o
dimensiune mult mai mare dect dimensiunea real fizic a memoriei principale.
Intr-un sistem de memorie virtual, memoria principal i cea secundar se
prezint pentru un program al utilizatorului ca o memorie unic, de dimensiuni
mari i adresabil direct.
Inaintea apariiei memoriei virtuale, dac spaiul de adrese al unui program
depea dimensiunea memoriei principale disponibile, programatorul era
responsabil pentru mprirea programului n fragmente mai mici, astfel nct
fiecare fragment s poat fi ncrcat n memoria principal. Toate aceste
fragmente erau pstrate n memoria secundar, de exemplu, pe disc, fiind
ncrcate n memoria principal pe msur ce erau necesare. Acest proces
necesita cunoaterea locului n care fragmentele trebuiau stocate pe disc,
cunoaterea operaiilor de intrare/ieire necesare pentru accesul fragmentelor i
pstrarea evidenei ntregului proces de fragmentare. Acesta presupunea
operaii foarte complexe, ceea ce complica i mai mult programarea unui
calculator.
Conceptul memoriei virtuale a fost creat n principal pentru a elibera
programatorul de aceast sarcin. Memoria virtual permite utilizatorului s
scrie programe care depesc limitele fizice ale memoriei principale. De
asemenea, memoria virtual permite multiprogramarea, prin care memoria
principal este partajat ntre mai muli utilizatori ntr-un mod dinamic. In cazul
multiprogramrii, poriuni ale mai multor programe sunt plasate n memoria
principal n acelai timp, iar procesorul i mparte timpul de execuie ntre
aceste programe. Procesorul execut un program pentru o perioad scurt de
timp (numit cuant de timp), iar apoi comut la un alt program; acest proces
continu pn cnd fiecare program este terminat.
Atunci cnd se utilizeaz memoria virtual, sistemul de memorie este
adresat printr-un set V de adrese logice sau virtuale, fiind numite astfel
deoarece, la execuia programului, ele sunt translatate, n adrese ale memoriei
fizice sau reale.
Un set de adrese fizice sau reale R identific locaiile fizice de memorare
din fiecare unitate de memorie. Adresele virtuale sunt generate de obicei n
timpul compilrii i sunt translatate de procesor n adrese fizice n timpul
execuiei. Un mecanism eficient pentru implementarea translatrii adreselor este
esenial pentru un sistem de memorie virtual. Cele dou metode principale
pentru implementarea unei memorii virtuale sunt paginarea i segmentarea.
6.7.2. Translatarea adreselor
Setul de locaii abstracte pe care le poate adresa un program reprezint
spaiul de adrese virtuale V al programului. Adresele virtuale pot fi specificate
explicit sau implicit de identificatorii pe care programatorul i asigneaz
variabilelor i etichetelor de instruciuni. Pentru execuia unui program pe un
Deplasament
D
Adresa
de baz B
Adres reala
(fizic) Ar
B
C1
0
1
B+1
Ci
B+i
C0
B+m-1
m-1
Cm-1
Fig. 6.14
Un mod simplu de implementare a translatrii adreselor este de a pstra
adresele de baz ale blocurilor ntr-o tabel de adrese ale memoriei controlat
de sistemul de gestiune a memoriei. Tabela poate fi pstrat n memorie, n
registrele UCP sau n ambele. Logica de generare a adreselor utilizat de UCP
const n calcularea adresei reale Ar prin combinarea deplasamentului D cu
adresa de baz corespunztoare B .
Blocurile pot fi relocate cu uurin n memorie prin manipularea adreselor
de baz ale acestora. Figura 6.15 ilustreaz relocarea blocurilor utiliznd
modificarea adreselor de baz. Presupunem c dou blocuri sunt alocate n
memoria principal dup cum se arat n figura 6.15a. Se dorete ncrcarea
unui al treilea bloc K 3 n memoria principal, dar nu este disponibil un spaiu
liber contiguu cu o dimensiune suficient. O soluie la aceast problem const
n mutarea blocului K 2 , dup cum se arat n figura 6.15b, prin asignarea
acestuia a unei noi adrese de baz B2 i rencrcarea blocului n memorie.
Astfel, se creaz un spaiu n care poate fi ncrcat blocul K 3 , prin asignarea
acestuia a unei adrese de baz corespunztoare.
B1
B1
Bloc K1
Bloc K1
L1
L1
B2
B2
Bloc K2
Bloc K2
L2
B3
L2
Bloc K3
b
Fig. 6.15
L3
Adres de
baz virtual Bv
Adres virtual Av
Deplasament
(offset) D
Adres de
baz real
Br
Adres real Ar
La sistemul
de memorie
Fig. 6.16
Dac adresa virtual Bv nu este gsit n bufferul de translatare TLB,
atunci partea tabelei de adrese ale memoriei principale, care conine Bv este
transferat mai nti din memoria extern n TLB. Deci, bufferul de translatare
are rolul unei memorii cache pentru translatarea adreselor. Din acest motiv,
bufferul de translatare este numit uneori memorie cache de adrese.
6.7.3. Paginarea
Paginarea este tehnica de divizare a unui program (numit n continuare
proces) n blocuri mai mici cu dimensiuni identice i stocarea acestor blocuri n
memoria secundar sub forma unor pagini. Aceste pagini pot fi ncrcate apoi n
memoria principal n locaii, de aceeai dimensiune cu paginile, numite cadre
de pagin.
Adresa virtual generat de UCP
Adresa de baz
Deplasament
Registru de baz
Dimens. cadru
Tabela de pagini
P
Acces
Adresa
*
+
Adresa de baz
real a paginii
Cadru de pagin i
Adresa real
Memoria principal
Fig. 6.17
Pentru ca aceast metod s funcioneze corect, fiecare proces trebuie s
pstreze n memoria principal o tabel de adrese ale nceputului fiecrui cadru
de pagin, numit tabel de pagini. n aceast tabel fiecrei adrese virtuale de
pagin i corespunde o adres real a unui cadru de pagin. Figura 6.17
ilustreaz modul n care funcioneaz metoda paginrii. S presupunem c se
caut adresa real a unui cuvnt de memorie a crui adres virtual a fost
generat de UCP. O adres virtual const din dou pri: o adres de baz i
un deplasament.
Registrul de baz conine adresa de nceput a tabelei de pagini a fiecrui
proces. Tabelele de pagini conin cte o fi (entry) pentru fiecare pagin care
aparine procesului. Aceste fie conin, de obicei, un cmp de prezen de un
bit, un cmp de acces i un cmp de adres. Cmpul de prezen P specific
dac pagina a fost ncrcat n memoria principal. Cmpul de acces specific
tipul operaiilor care pot fi executate asupra paginii. Acest cmp determin dac
pagina poate fi doar citit (R/O - Read Only) sau citit i scris (R/W
Read/Write). Cmpul de adres specific numrul cadrului n care este
ncrcat pagina. Adresa real de nceput a cadrului de paginii, n memoria
principal, este determinat nmulind numrul cadrului cu dimensiunea
cadrului. In continuare la adresa real a nceputului de cadru se adun
deplasamentul i se obine adresa real a cuvntului solicitat.
Atunci cnd se solicit un cuvnt de memorie care nu este ncrcat n
memorie, este raportat o lips de pagin (page fault) iar pagina care conine
cuvntul solicitat este ncrcat n memorie. Pagina este depus ntr-un cadru
liber, dac un asemenea cadru exist. Dac nu exist un cadru liber trebuie
selectat una din paginile procesului, care va fi tears, iar noua pagin va fi
memorat n locul acesteia. Criteriul pentru selectarea paginii care se va nlocui
constituie strategia de nlocuire sau algoritmul de nlocuire.
P0
P1
P2
Nr. pagin
Adres
fizic
Adres
Acces
R/O
R/O
R/O
Nr. cadru
Tabela de pagini
pentru procesul 1
Proces 1
4K
1
P0
8K
P0
12K
Nr. pagin
Adres
Acces
R/W
R/W
P2
Memorie principal
Tabela de pagini
pentru procesul 2
P0
P1
Proces 2
Fig. 6.18
S considerm urmtorul exemplu. In figura 6.18 sunt prezentate
coninutul tabelelor de pagini pentru dou procese, Proces 1 i Proces 2.
Procesul 1 are trei pagini, P0 , P1 i P2 , iar procesul 2 are dou pagini, P0 i P1.
Presupunem c toate paginile procesului 1 au acces numai pentru citire, iar
paginile procesului 2 au acces pentru citire i scriere. Adresa fizic de nceput a
fiecrui cadru se calculeaz nmulind numrul cadrului cu dimensiunea
acestora.
S presupunem c fiecare cadru are o dimensiune de 4 KB (4096 B).
TLB
TLB
tabel de
pagini
Adres de baz a
tabelei de
pagini PB
Adres de baz a
tabelei de
segmente SB
pentru un proces
4
5
tabel de
segmente
Cadru de
pagin
Index de
segment SI
Index de
pagin PI
Adres virtual Av
Deplasament
(offset) D
Adres real Ar
La sistemul
de memorie M
Fig. 6.19
urmtorul acces la variabila global, va apare o nou lips a blocului, iar blocul
va trebui rencrcat, nlocuind un alt bloc.
Strategia LRU (Least Recently Used) selecteaz pentru nlocuire blocul
care nu a fost utilizat de cel mai mult timp. Aceast strategie se bazeaz pe
presupunerea rezonabil c blocul cel mai puin recent utilizat este cel mai puin
probabil de a fi utilizat n viitor. Strategia LRU evit nlocuirea blocurilor
ncrcate de mai mult timp, dar frecvent utilizate, ca n cazul strategiei FIFO.
Totui, strategia LRU este mai dificil de implementat dect FIFO, deoarece
sistemul de gestiune a memoriei trebuie s pstreze informaii despre
momentele referinelor la toate blocurile din memoria M 1 . Strategia LRU poate fi
implementat prin asocierea unui contor hardware sau software pentru fiecare
bloc din M 1 . De fiecare dat cnd un bloc este referit, contorul acestuia este
setat la o valoare pozitiv predeterminat. La intervale fixe de timp, contoarele
tuturor blocurilor sunt decrementate. In orice moment, blocul cel mai puin
recent utilizat este cel al crui contor conine valoarea cea mai mic.