Sunteți pe pagina 1din 8

ELEMENTE DE GESTIUNE A MEMORIEI

De regul la microprocesoarele de 8 bii, adresa generat i depus pe magistrala extern de adrese


este folosita direct n adresarea unei locaii de memorie sau a unui dispozitiv de I/O. ncepnd cu
microprocesoarele de 16 bii apar noiunile de adres logic i adres fizic. Adresele generate de un
program sunt considerate adrese logice i totalitatea acestora formeaz spaiul adreselor logice. Totalitatea
adreselor ce corespund memoriei (i/sau dispozitivelor de I/O) formeaz spaiul adreselor fizice. Cele 2
spaii, al adreselor logice i fizice, pot s fie egale sau inegale. Ca urmare, trebuie s existe un mecanism de
conversie a adreselor, de translatare din adrese logice n adrese fizice. La microprocesoarele Intel din seria
x86 mecanismul de translatare este inclus pe acelai substrat de siliciu cu microprocesorul. La unele din
microprocesore (ca de exemplu Motorola MC68000) mecanismul de translatare din adresele logice n cele
fizice este preluat de un circuit extern microprocesorului denumit "unitate de administrare a memoriei"
(MMU - Memory Management Unit).
n general, tehnicile folosite pentru lucrul cu sistemul de memorie ntr-un calculator, fie c este
vorba de selecie, adresare, alocare de spaiu n memoria principal, folosesc un ansamblu de resurse
hardware i software, operaiile executate de acestea fiind incluse n noiunea general de management al
memoriei. Administrarea ntregii memorii (de pe toate nivelurile ierarhice) a calculatorului, incluznd i
modalitile de partiionare logic i adresare n spaiul adreselor logice (L) i n spaiul de memorare (M,
adrese fizice) se face cu ajutorul unei uniti hardware pe care o notm n continuare MMU (Figura 1).
Cnd un program trebuie rulat (lansat n execuie), el este mai nti adus din memoria auxiliar nmemoria
principal (n ntregime sau parial).
Pentru MMU se impun urmtoarele cerine de baz:
1. s realizeze translatarea adreselor i s susin alocarea dinamic a memoriei
nainte ca un program s fie executat, este necesar ca acestuia s i se aloce un spaiu n memoria
principal (spaiu de adrese n memoria fizic existent n calculator). Dac aceast atribuire de spaiu
(adrese) se face doar la ncrcarea programului n memoria principal, procedeul este numit alocare
static i prezint dezavantajul c adresele de ncrcare sunt fixe. Alocarea dinamic a memoriei se
caracterizeaz prin atribuirea spaiului necesar programelor, sau proceselor, n timpul execuiei acestora.
Adresa la care se ncarc programul n memoria principal nu mai este fix, ea putnd fi modificat, la
momente de timp diferite.
Figura 1. Organizarea ierarhica a memoriei
Se folosesc trei procedee de translatare a adreselor logice n adrese fizice toate bazndu-se pe o divizare a
spaiului adreselor logice n blocuri de adrese logice continue, dup cum urmeaz:
segmente de lungime arbitrar;
pagini (n spaiul adreselor logice) i cadre-pagin / blocuri (n cadrul adreselor fizice),
de lungime fix;
combinaii de adresare segmentat-paginat.
adrese fizice
MP MA (auxiliara) MMU Cache
UCP
adrese logice
control
date
(acces
direct)
(acces
indirect)
(acces
direct)
Mecanismul de translatare, indiferent c se folosesc pagini sau segmente, se produce n faza de execuie a
programului i include printre altele, un tabel de translatare prin care se face corespondena ntre adrese
logice i adrese fizice (principiul este prezentat n fig. 2).
Figura 2. Principiul tehnicilor de translatare a adreselor
De la microprocesor se recepioneaz adresa logic L. Dac elementul adresat nu se gsete n memoria
principal, atunci registrul (de adres) L va conine adresa din memoria extern unde se gsete
elementul respectiv i el va fi adus de rutine ale sistemului de operare n memoria principal, la o adres
fizic a crei valoare M se nscrie n registrul de adres L din tabela de translatare. Daca elementul
adresat este n memoria principal rezult c adresa fizic este M. Acest mecanism este totui ineficient,
cci tabela de translatare are dimensiunile egale cu ale memoriei principale. Pentru micorarea
dimensiunii tabelelor se folosete divizarea spaiului logic n segmente / pagini, iar referirile se fac doar
la nivelul de adres logic de bloc. Trebuie menionat c dac sunt lansate dou procese n execuie,
fiecare cu spaiul su de adrese logice, exist dou tabele de translatare spre memoria principal.
Sistemul de operare va reactualiza coninutul tabelei de translatare ori de cte ori va avea loc o relocare
(schimbare de poziie n spaiul adreselor fizice) a programelor n memorie.
2. s susin mecanismele de implementare ale memoriei virtuale
Mecanismul memoriei virtuale permite programelor s fie executate chiar dac numai o parte din
instruciunile lor se ncarc n memoria principal, iar restul se gsesc n memoria auxiliar de tip
disc magnetic. Adresele logice sunt numite adrese virtuale, n cazul implementrii memoriei
virtuale, pentru c nu exist fizic n memoria principal ci ele se gsesc n memoria auxiliar.
3. s poat furniza protecie i securitate pentru memorie
Cerina se refer la protecia informaiei, la alocarea de drepturi de acces la zone din memoria
principal i la zone din spaiul adreselor logice, (protecie la citire, scriere, tergere, copiere,
execuie). Se protejeaz memoria disponibil alocat programelor de sistem i programelor
utilizator, asigurndu-se securitatea informaiei (acces limitat la informaii), prin controlul accesului
la resursele sistemului.
Aa cum s-a pomenit i mai sus exist dou strategii folosite pentru implementarea MMU:
a) MMU se afl pe chip-ul procesorului; se aplic la microprocesoarele cu spaiul segmentat al
adreselor logice. De exemplu: Intel x86, Pentium, Zilog Z800, Z8000)
b) MMU este construit separat de UCP, variant aleas la microprocesoarele cu spaiu liniar
(organizare liniar a) al adreselor logice. De exemplu: MC 680x0, Z8001).
n cazul n care organizarea logic a memoriei este liniar, adresele ncep n mod obinuit de la 0 i
avanseaz liniar. Memoria poate fi apoi structurat prin software, la nivelul translaiei de adrese. n cazul n
care organizarea memoriei este segmentat, programele nu sunt scrise ca secvene liniare de instruciuni i
date, ci ca segmente separate de cod, date, sau stiv. Spaiul adreselor logice este spart n mai multe spaii cu
adresare liniar, fiecare cu lungime diferit, definit de compilator sau de programator. O adres logic
efectiv este calculat ca o combinaie ntre numrul segmentului (care indic adresa de baz a unui bloc de
memorie) i un deplasament (offset) n cadrul segmentului.
Tabel de
translatare
Adresa logic
de la UCP
Adresa
fizic
Cuvnt
adresat
Memoria
principal
M
M L
n general schemele de adresare liniar sunt mai potrivite pentru manipularea structurilor mari de
date, n timp ce segmentarea faciliteaz programarea, permind programatorului s structureze programele
n module segment. n plus adresarea segmentat simplific protecia i relocarea obiectelor n memorie.
Segmentarea faciliteaz gestiunea memoriei n sistemele de calcul multiuser, multitasking.
TRANSLATAREA ADRESELOR
Indiferent de schema de organizare a memoriei (liniar sau segmentat) procesorul trebuie s aib
un mecanism de translatare a adreselor, util n implementarea memoriei virtuale. Acest mecanism este de
asemenea util pentru protejarea informaiei din memorie. Translatarea de adrese este un proces atribuire i
organizare (mapare) a adreselor logice n adrese fizice de memorie. Mecanismul de translatare mparte
memoria principal n blocuri (cadre pagin). Aa cum am amintit mai sus se folosesc 2 scheme de
translatare:
(1) translatare prin paginare
(2) translatare prin segmentare
n sistemele paginate, memoria principal este mprit n blocuri de lungime fix n timp ce n
sistemele segmentate blocurile sunt de lungime variabil.
Paginile au n general lungimi de ordinul 256 - 4096 cuvinte, n timp ce segmentele cu lungimea definit de
compilator sau programator au 64 K-cuvinte, sau mai mult. n sistemele cu multiprogramare i time-
sharing
1
, mai muli utilizatori folosesc aceleai programe cum sunt editoare, compilatoare, programe
utilitare, biblioteci de programe etc. Att sistemele cu paginare ct i cele cu segmentare permit mecanisme
de partajare, ntre procesele utilizator, a paginilor, respectiv a segmentelor. Aceste mecanisme se bazeaz pe
intrri n tabele de mapare de pagin (sau segment) n care intrrile diferitelor procese indic ctre acelai
bloc din memoria principal. Combinaia ntre segmente i pagini presupune c un segment conine una sau
mai multe pagini virtuale. Mecanismul de segmentare administreaz spaiul virtual, mprind programele n
segmente, n timp ce paginarea este destinat administrrii memoriei fizice care este mprit n cadre
pagina (blocuri). Vom descrie n continuare mecanismele folosite pentru maparea segmentelor i paginilor.
Maparea adreselor folosind pagini
n cazul paginrii, implementarea tabelului pentru maparea adreselor este simpl pentru c
informaia din spaiile de adresare i memorare este divizat n blocuri de dimensiune fix. Memoria fizic
este mprit logic n blocuri de aceeai dimensiune (64-4096 cuvinte fiecare). Termenul pagin se refera la
blocuri, de aceeai dimensiune, de adrese din spaiul de adresare. De exemplu, presupunem un calculator
care are 20 de bii de adres i folosete doar 32KB n memoria principal (memorie implementat fizic prin
circuite de memorie); dac o pagin, respectiv un bloc, au dimensiuni egale cu 1 kB, atunci spaiul de adrese
e divizat n 1024 pagini, iar spaiul de memorie e divizat n 32 de blocuri.
Se consider c i programele sunt mprite n pagini. Poriuni din programe sunt mutate din memoria
auxiliar n memoria principal n nregistrri egale cu mrimea paginii. n loc de bloc de memorie e folosit
uneori termenul de cadru pagin (page frame).
n cazul maprii prin paginare adresa virtual este reprezentat printr-un singur cuvnt de adres
mprit ntr-un cmp corespunztor numrului paginii (adresa paginii) i un cmp pentru deplasament. La
maparea prin segmentarea un singur cuvnt de adres nu mai este suficient; dimensiunea variabil a
segmentelor conduce la existena a dou cuvinte de adresare, n care primul indic numrul (adresa)
segmentului, iar cel de-al doilea deplasamentul n cadrul segmentului.
ntr-un calculator cu 2
p
cuvinte pe pagin, p bii sunt folosii pentru a specifica o adres de linie iar
cei mai semnificativi bii rmai n adresa virtual specific numrul de pagin. Fie de exemplu un sistem
simplu cu o adres virtual cu dimensiunea de 16 bii i pagini cu 4096 cuvinte. Pentru c o pagin are 2
12
cuvinte, cei patru bii mai semnificativi vor specifica una din cele 16 pagini, iar cei 12 bii mai puin
semnificativi indic adresa liniei n cadrul paginii.

1
time-sharing = partajarea timpului UCP
Figura 3. Paginarea memoriei
Ca urmare maparea trebuie fcut doar de la un numr de pagin la un numr de bloc din memoria
principal, pentru c adresa liniei e aceeai pentru ambele spaii. Organizarea de principiu a tabelului de
mapare a memoriei ntr-un sistem paginat poate arta ca n figura 3.
n tabelul paginii de memorie, adresa conduce la numrul paginii, iar coninutul indic numrul
blocului unde pagina este stocat n memoria principal. Se observ c paginile virtuale 2, 3, 5 i 8 se afl n
memoria principal, n blocurile 3, 0, 1 i respectiv 2. Un bit de prezen adugat fiecrei locaii a tabelului
indic dac pagina respectiv a fost mapat n memoria principal (i s-a alocat spaiu i a fost transferat din
memoria auxiliar n memoria principal). Valoarea 0 a bitului de prezen indic c pagina nu este n
memoria principal. n exemplul dat, cei 4 bii ai adresei virtuale specific att numrul paginii ct i adresa
n tabelul paginilor de memorie. Coninutul tabelului este citit n registrul ce indic blocul de memorie. Dac
bitul de prezen este 1, numrul de bloc e transferat n registrul ce pstreaz adresa fizic din memoria
principal. Dac bitul de prezen este 0 rezult c adresa virtual se refer la un articol ce nu se gsete n
memoria principal. n acest caz, se genereaz o cerere (n forma unei ntreruperi software, de tip eroare de
pagin
2
) ctre sistemul de operare (SO) pentru a aduce pagina cerut din memoria auxiliar n memoria
principal, nainte de reluarea programului care a accesat adresa din pagina respectiv.
O astfel de organizare n memoria principal a tabelului de translatare este ns ineficient, cci
tabelul are multe locaii goale. Dac presupunem un calculator cu spaiul de adrese de 4 GB (2
32
), cu pagini
de memorie de 32 KB (2
15
), iar spaiul memoriei fizice este 32 MB (2
25
) rezult 128 K-pagini virtuale de
memorie i 1024 blocuri (1 K-blocuri). Conform principiului din figura 6.24 tabelul de translatare ar avea

2
page fault = eroare de pagin
Adres
tabel
Tabel
pagini
de
memorie
Registru bloc
de memorie
Memoria principal
BLOCK 0
BLOCK 1
BLOCK 2
BLOCK 3
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0000
0
Adresa virtual
Numr
pagin
Numr linie
Adresa fizic
(real) de memorie
principal
1 0 0 0 0 0 0 0 0 0 0 0 0 1
00
01
10
11
Bit
prezen
0001
0
0010 11
1
0011 00
1
0100
0
0101 01
1
0110
0
0111
0
1000 10
1
1001
0
1010
0
1011
0
1100
0
1101
0
1110
0
1111
0
10
0
Sistemul de memorie 151
131071 (2
17
= 128 K) linii i doar 1024 locaii ar fi ocupate (cu bit de prezen 1), restul fiind goale,
neutilizate. O soluie a acestei probleme o constituie folosirea unei memorii asociative, ca n figura 4,
(tabel asociativ de pagini de memorie) cu numr de locaii egal cu numrul de blocuri din memoria
principal.
Figura 4. Translatarea adresei de pagin cu memorie adresabila prin continut
n fiecare locaie de memorie se stocheaz numrul paginii virtuale i numrul corespunztor al
blocului de memorie principal alocat.
Adresa logic se compar combinaional cu coninutul tabelului asociativ, doar pentru poziiile
binare ce corespund la 1 logic n registrul de mascare, deci n figura 4, doar pentru cmpul de adres al
numrului de pagin virtual. Dac la apelarea unei pagini virtuale, aceasta nu este mapat n memoria
principal, operaia de adresare este o ratare (miss) i evenimentul este rezolvat printr-o rutina de servire a
sistemului de operare care aduce pagina respectiv din memoria auxiliar. i acest tabel asociativ de
translatare poate avea dimensiuni mari uneori. De aceea se folosesc tabele asociative de mare vitez la care
numrul liniilor este mai mic dect numrul de blocuri (cadre pagin) i n care se salveaz numai o parte
din maprile realizate. Acest registru asociativ este numit TLB (Translation lookaside buffer) i este descris
mai jos.
Mapare prin segmentare
La acest tip de mapare spaiul adreselor logice este mprit n segmente, care spre deosebire de
pagini, nu au o dimensiune fix. Segmentele sunt spaii de adrese continue (liniare), care includ programe
sau poriuni din programe cu atribute comune. Mecanismul de translatare este prezentat n schema de
principiu din figura 5.
Spre deosebire de operaia de paginare, la segmentare nu se mai face concatenarea (alturarea)
adresei de deplasament (din adresa logic) la adresa fizic. Aici adresa de deplasament este adunat cu
adresa fizic a segmentului (adresa sa de baz) citit din tabelul de translatare al segmentelor, specific unui
anumit proces.
1111
0 0
0010 11
0011 00
0101
01
1000 10
1000
Numr linie
Numr pagin
Adres logic
Registru argument
Registru masc
Numr pagin Numr bloc
Figura 5: Segmentarea memoriei
Adres logic
Adres liniar
(fizic)
Adresa de baz a
segmentului
Adres fizic
segment
Nr.segment Offset
Segment
Tabel de translatare
a segmentelor
Noiuni privind protecia memoriei
Inventarea multiprogramrii, la care un procesor este partajat ntre mai multe programe aflate n
execuie, a condus la noi cerine privind protecia ntre programe. Mecanismele de protecie sunt strns
legate de implementarea memoriei virtuale.
Multiprogramarea conduce la conceptul de proces. Un proces este constituit dintr-un program aflat
n execuie plus orice stare necesar pentru continuarea rulrii sale. Partajarea timpului (time-sharing) este
o variant a multi-programrii care partajeaz UCP i memoria ntre diferii utilizatori simultani, iar
mecanismul de partajare d iluzia c toi utilizatorii au propriile maini. Astfel c, n oricare dintre variante,
trebuie s fie posibil s se comute de la un proces la altul. Aceast comutare este numit comutare de proces
sau comutare de context.
Un proces trebuie s se execute corect indiferent dac se execut continuu de la start pn la
terminare, sau dac este ntrerupt n mod repetat pentru a se face comutarea ctre alte procese.
Responsabilitatea meninerii comportrii corecte a proceselor cade att n sarcina resurselor hardware, care
asigur salvarea i restaurarea corect a proceselor ce ruleaz pe UCP ct i n sarcina sistemului de operare
care trebuie s garanteze c un proces nu interfereaz cu celelalte i c un proces nu poate modifica datele
altor procese. Aceasta nseamn asigurarea proteciei datelor de ctre sistemul de operare. n afar de
protecie, sistemul de operare permite, n anumite condiii, i partajarea codului i a datelor ntre diferite
procese pentru salvare de spaiu de memorie prin reducerea numrului de copii de informaii identice.
Cel mai simplu mecanism de protecie este constituit de o pereche de registre care verific fiecare
adres, astfel nct s nu se permit accesul n afara unor limite alocate n spaiul de adrese. Aceste registre
sunt numite registru - baz i registru limit. O adres este valid dac se ncadreaz ntre cele dou adrese
coninute n registre:
Baz Adres Limit
La unele sisteme adresa este considerat ca un numr fr semn, care se adun ntotdeauna la o adres de
baz, astfel c testul de adres limit se reduce la:
(Baz + Adres) Limit
Dac proceselor utilizator li s-ar permite s modifice registrele de adrese de baz i limit, atunci
acest mecanism de protecie nu ar putea funciona. Modificarea respectivelor registre este permis doar
sistemului de operare, pentru asigurarea proteciei ntre procese.
Pentru asigurarea proteciei sistemul de operare (SO) are trei responsabiliti principale:
1. S furnizeze cel puin dou moduri de execuie indicnd c procesul aflat n rulare este un proces
utilizator, sau un proces al sistemului de operare. La diferite SO ultimul tip de proces este numit n
diferite feluri: proces kernel (nucleu), proces supervizor, sau proces executiv.
2. S prevad o poriune a strii CPU pe care procesul utilizator o poate doar citi, dar nu o poate scrie.
Aceasta include registrele baz / limit, indicatori (bii) pentru moduri utilizator / supervizor i
indicatori pentru validare / invalidare evenimente de tip excepie.
Capitolul 6 158
3. S prevad un mecanism prin care UCP poate trece din mod utilizator (user) n mod supervizor i
viceversa. Primul sens de trecere este specific apelurilor sistem (system calls apeluri de servicii
oferite de SO), implementate ca instruciuni speciale care transfer temporar controlul la o locaie
precis din spaiul de cod al supervizorului. Registrul contor de program corespunztor locului unde
se face un apel sistem este salvat, iar UCP trece n mod supervizor. Revenirea la modul utilizator este
similar cu cea produs la o revenire din procedur.
Adresele de baz i limit constituie minimul unui sistem de protecie. Mecanismul memoriei virtuale
ofer alternative mai complexe i mai sigure dect modelul simplu prin baz i limit. Aa cum s-a vzut,
adresele virtuale sunt translatate n adrese fizice pe baza unor tabele de translatare. Acest mod de mapare,
prin tabele, ofer posibilitatea introducerii de informaii pentru controlul erorilor de program (intenionate
sau nu) care ncearc s treac peste mecanismele de protecie. Cea mai simpl cale este introducerea unor
indicatori de permisie pentru fiecare pagin sau segment. De exemplu pot exista indicatori care s permit
doar citire, doar execuie, sau care s interzic accesul unui proces utilizator la anumite pagini / segmente.
Fiecare proces poate face adresare doar ctre paginile proprii de memorie, procesul utilizator neavnd
dreptul s modifice tabelele sale de pagin / segment.
Protecia poate fi extins chiar pe mai mult dect dou niveluri (nu doar utilizator i supervizor),
privite ca i inele concentrice de protecie, n centru gsindu-se nivelul de protecie cel mai nalt. n aceast
ierarhie de niveluri de protecie un program poate accesa doar date de pe nivelul su de protecie i de pe
nivelurile inferioare n ierarhie. Poate face ns operaii de apelare (call) a serviciilor sistemului de operare,
servicii oferite de rutine ce se afl pe niveluri superioare de protecie. Adesea se face comparaia, n
oarecare msur nefericit, cu clasificri de tip militar ale sistemelor: top secret, secret, confidenial i
neclasificat. Programele utilizator (civilii n exemplul militar) au doar dreptul de acces la nivelul de
protecie cel mai de jos: ne-clasificat. La sistemele de protecie de tip inele concentrice, deosebirea fa de
exemplul anterior, este c se pot face apelri la rutine situate pe niveluri superioare de protecie, dac exist
chei de acces ctre acele niveluri. Poate exista dreptul de apelare a unor servicii ale sistemului de operare,
prin mecanismul de comutare a proceselor.
Aa cum am pomenit i mai sus, informaia de protecie este setat n registre speciale ataate fiecrei
intrri n tabelele de translatare, registre setate doar de rutine de control al sistemului de operare. Drepturile
de acces pot fi de tipul:
a. Atribuirea de privilegii complete de citire i scriere. Aceste drepturi se atribuie programului atunci cnd
execut propriile instruciuni.
b. Read-only (protecie la scriere). Protecia la scriere este util la operaiile de partajare a unor rutine de
sistem (utilitare, biblioteci, etc.).
c. Execute only (program protection). Protejeaz programul la copiere. Restricioneaz referirea la
segment doar n timpul fazei de fetch a instruciunii i nu i n timpul fazei de execuie. Asta permite
utilizatorului s execute instruciunile segmentului de program, dar nu permite citirea instruciunilor ca
date cu scopul de a copia coninutul lor.
Sistemul de protecie a memoriei, n sensul celor spuse mai sus, se construiete pentru:
(a) memorie (detecteaz orice eroare de adresare nainte ca aceasta s creeze erori accidentale sau
voite);
(b) programe (previne ca programele utilizator (de aplicaii) s fac modificri ilegale n rutinele SO);
(c) utilizatori (programele utilizatorilor ntre ele);
(d) securitate informaie (acces limitat la informaiile unde utilizatorul nu are drept de acces).

S-ar putea să vă placă și