Sunteți pe pagina 1din 24

UNIVERSITATEA DIN BUCURESTI

FACULTATEA MATEMATICA-INFORMATICA
SPECIALIZAREA TEHNOLOGIA INFORMATIEI - ZI

SISTEME DE OPERARE

COORDONATOR Studenti:
Prof. Dr. Univ. Marin Vlada Badea Alin
Neacsu Bogdan
Gestiunea memoriei
Memoria constituie unul din elementele de bază ale structurii unui sistem de calcul,
rolul său fiind acela de a retine în primul rând programul şi datele care se
prelucrează. La început, calculatoarele dispuneau de putină memorie şi era nevoie
de multă inventivitate din partea programatorilor pentru ca aceasta să ajungă pentru
programe,care tindeau să devină tot mai lungi. Odată ce tehnologia a oferit
posibilitatea ca memoria să poată fi obtinută la un pret acceptabil, ea s-a diversificat
încontinuu,apărând mai multe tipuri de memorie într-un calculator, fiecare din
acestea având locul şi rolul său bine stabilit. Tehnologic există două tipuri principale
de memorie:

- memorie RAM
- memorie ROMA.

Memoria RAM
Numele acesteia provine de la denumirea ei în engleză: Random AccessMemory.
Informatia care se găseşte stocată în ea la diferite adrese (instructiuni sau date)
poate fi citită sau înscrisă cu o nouă valoare. Se spune că suportă atât operatii
decitire (read), cât şi operaTii de scriere (write). Informatia elementară care
sememorează este o informatie binară, putând deci lua valoarea 0 sau 1, iar circuitul
fizic elementar care poate memora această informatie se numeşte bistabil(are două
stări stabile: 0 sau 1).O primă formă de implementare fizică este memoria RAM de
tip static sauSRAM (Static RAM), numită astfel deoarece informatia odată înscrisă se
păstrează nealterată până eventual la oprirea calculatorului, când se pierde. Bistabilii
de tipSRAM sunt alcătuiti din doi tranzistori.Folosind o tehnologie diferită, s-a reuşit
ca pentru o celulă de memorie să se folosească un singur tranzistor (deci densitatea
de informatie memorată va fi dublă fată de cea anterioară), obtinându-se un tip de
memorie numit dynamic sau DRAM(Dynamic RAM). Aceşti tranzistori pot să-şi
piardă sarcina electrică pe care o înmagazinează (deci informatia memorată în
ultimă instantă) şi atunci este nevoie deo operatie de reîmprospătare periodică
(refresh), care se realizează cu ajutorul unor circuite concepute în acest scop (în
general la fiecare 2 ms). Memoria de tip DRAM este considerabil mai lentă decât cea
SRAM, dar are o densitate de integrare mai mare(acelaşi număr de celule de
memorie ocupă mai putin spatiu) şi este mai ieftină, motiv pentru care este folosită
pe scară largă în sistemele de calcul.Blocurile de memorie RAM au în general o
organizare matriceală. Dacă laînceput aveau forma unor circuite integrate distincte,
o dată cu evoluTia tehnologieiaceste cipuri au fost plasate pe plăcuTe de memorie
cu 30, 72, 162... picioare, iar capacitatea lor a crescut în timp de la 256Ko, 1Mo,
2Mo, ... până la 256Mo, 512Mosau 1Go şi chiar mai mult.
Memoria ROM
Această memorie nu suportă decât citirea datelor din ea (ROM = Read OnlyMemory
- memorie numai pentru citire). La fel ca şi în cazul memoriei RAM,capacitatea ei a
crescut o dată cu evolutia tehnologiei, de la circuite de 1Ko sau 2Ko la64Ko, 128Ko
etc.Initial, informatia era înscrisă într-un modul ROM la fabricarea acestuia şi numai
putea fi schimbată. Avansul tehnologiei a permis realizarea unor circuite în care
informatia se poate şterge şi rescrie (desigur, nu de către procesor, ci cu ajutorul
unor dispozitive dedicate, care nu se găsesc în calculator). Spunem că aceste
circuite sunt de tip ROM programabil sau PROM.Cel mai des folosite sunt circuitele
EPROM, la care scrierea informatiei se realizează pe cale electrică.
Dacă ştergerea se face cu lumină ultravioletă printr-ofereastră de cuart plasată
deasupra cipului, avem circuite de tip UVEPROM. Dacă ştergerea se face electric,
avem EEPROM. O variantă mai nouă a tehnologiei EEPROM este memoria de tip
Flash, care este larg utilizată în diverse dispozitive destocare. Un mare avantaj al
acesteia din urmă îl reprezintă posibilitatea de a şterge sauînscrie doar o parte a
informatiei memorate. Numărul de ştergeri şi reînscrieri care pot fi aplicate asupra
unui asemeneacircuit, indiferent de tehnologia folosită, este limitat (în majoritatea
cazurilor în jurul a 50-100). Exceptie face memoria Flash, care permite până la
100000 de ştergeri şi reînscrieri. Oricum, limitarea nu este deranjantă, deoarece
memoria ROM se foloseşteîn calculator pentru memorarea programelor BIOS.
Operatia de actualizare a BIOS-ului poate fi necesară în unele situatii, dar foarte rar;
dincolo de acest caz particular,este chiar de dorit ca BIOS-ul să nu poată fi modificat
de programe.
Cresterea puterii de calcul si a spatiului adreselor la microprocesoarele moderne a
condus la extinderea gamei de aplicatii, incluzind cimpuri de tipul sistemelor
multiutilizator cu functionare in timp real, pe timpuri rezervate doar calculatoarelor
mari sau minicalculatoarelor. Realizarea acestor aplicatii sofisticate nu se poate face
lasind gestionarea memoriei in sarcina unui singur programator, fie el foarte bun, asa
cum se intimpla in cazul microprocesoarelor de 8 biti. In schimb, se impune
realizarea gestionarii automate a resurselor de memorie de catre un sistem de
operare adecvat, fapt ce are ca efect o mai buna utilizare a spatiului disponibil.

Ideile ce stau la baza implementarii mecanismelor de gestiune a memoriei nu sint


noi, ci sint imprumutate din solutiile folosite in calculatoare mari sau minicalculatoare.
Totusi, aceste idei sint noi in lumea microprocesoarelor, fapt ce a determinat
descrierea in acest capitol a celor mai frecvent utilizate metode pentru utilizarea
eficienta a memoriei, ca si pentru protectia impotriva accesului neautorizat, voit sau
eronat.

Utilizarea rationala a memoriei se realizeaza prin luarea in considerare a


urmatoarelor :

- exista mai multe tipuri de memorie, cu diverse viteze si costuri pe bit (cum sint cele
cu semiconductoare si cele magnetice). In general, capacitatea memoriilor rapide
este limitata de cost sau posibilitati tehnologice, in timp ce memoriile ieftine
au timpuri lungi de acces;

- intr-un sistem complex, asa cum este calculatorul multiprogramat functionind prin
divizarea timpului,nu este necesar a pastra simultan toate programele in memoria
primara, deoarece numai o submultime a acestora este gata de rulare, in timp ce
altele pot astepta terminarea unor operatii I/O sau pot fi temporar blocate.

In general este convenabil a considera sistemul de memorie drept constind din mai
multe subsisteme, cu capacitati diferite si timpi de acces diferiti. Intr-o astfel de
configurare mecanismele de gestiune a memoriei vor distribui informatia intre
diversele tipuri de memorie, incercind a pastra datele si programele la care accesul
este mai frecvent in memoriile mai rapide, restul informatiilor fiind plasat in memoriile
mai lente.
Desigur, alocarea memoriei nu este statica, intrucit, in cele din urma, sistemul va
prelucra toate informatiile memorate. Deci, datele si programele vor fi mutate dintr-o
zona de memorie in alta. Fluxul acestor informatii poate fi controlat de catre
programator, sistemul de operare, hardware sau o combinatie a tuturor acestor
factori. Fiecare din ei poate gestiona un anumit subsistem al memoriei, asa cum se
va vedea mai tirziu.

Ierarhizarea memoriei

Principiile de gestiune a memoriei evidentiate in paragraful 4.1. conduc la


organizarea ierarhizata a diferitelor subsisteme de memorie. La virful ierarhiei se
gaseste memoria cea mai mica si cea mai rapida, in timp ce baza este constituita din
memoria cea mai lenta si cu cel mai mare volum. In general transferul de date are
loc doar intre niveluri adiacente ale ierarhiei.

Intrucit organizarea memoriei bazata pe localitatea programelor ofera valori bune


pentru raportul cost/performanta, ideea este larg folosita in noile microprocesoare.
Trebuie remarcat ca ierarhia memoriei pentru aceste sisteme are un numar mai
mare de niveluri decit in modelele anterioare.

Fig. 4.1. indica o organizare posibila a ierarhizarii memoriei pentru un sistem bazat
pe un microprocesor evoluat. Aceasta organizare a memoriei include nivelurile cele
mai obisnuite. Nu orice sistem contine nivelurile din figura, desi ar fi posibil.

Principiul localitatii programelor este valabil pentru orice tip de referire la memorie.
Totusi, diferitele niveluri ale ierarhiei necesita modalitati diferite de manipulare a
instructiunilor, datelor si informatiilor in scopul gestionarii memoriei, ceea ce rezulta
si din figura 4.1.

Este important de remarcat ca, in timp ce termenul "adresa virtuala " poate fi utilizat
pentru a indica adresa manipulata de catre programele utilizatorului, notiunea
"adresa fizica" este folosita pentru a indica zone de memorie de masa rapida in care
este memorata o parte a programului ce se executa, indiferent de celelalte niveluri
ale ierarhizarii memoriei.
4.4.1. Registre

Registrele interne 121d34b ale CPU reprezinta cea mai rapida si cea mai mica
memorie din sistem, deoarece ele sint direct conectate la diversele subunitati de
prelucrare din cadrul CPU, cum sint unitatea aritmetica si logica (ALU),
decodificatorul instructiunii sau unitatea aritmetica de evaluare a adresei.

Registrele de uz general constituie nivelul 0 al memoriei pentru date (incluzind


adresele programului) si registrul instructiunii este nivelul 0 al memoriei pentru cod.
Caracteristica noua a unor procesoare de 16 si 32 biti, cum este iAPX286 (ce se va
discuta in urmatorul capitol), consta in faptul ca ele dispun de citeva registre
dedicate pastrarii de informatii temporare necesare gestiunii memoriei. Aceste
registre se pot afla, partial, sub controlul programului (privilegiat) dar, in general, sint
gestionate de catre CPU.

4.4.2. Memorie cache pe circuit

Cresterea continua a vitezei de prelucrare a noilor microprocesoare necesita si


sisteme mai rapide de memorie. Intrucit timpul de acces al circuitelor de memorie
descreste in mod constant, timpul total de raspuns este afectat intr-o masura
importanta de intirzierile de interfatare, incluzind penalizarea de timp a transferului
prin frontierele circuitului.

Avind in vedere aceste conditii tehnologice, devine rationala introducerea unui nou
nivel de ierarhizare compus din memoria care nu este direct conectata la subunitatile
de prelucrare, dar implementata pe aceeasi placheta de siliciu ca si CPU. Desi acest
nivel, nivelul 1 al memoriei, este mai lent decit registrele, el necesita unele circuite
de interfata; totusi ea este mai rapida decit memoria realizata in exteriorul circuitului.
La acest nivel inca persista distinctia intre date, cod si informatii de gestiune a
memoriei. Memoria cache pe circuit destinata programului este, uneori, organizata
ca stivele de tip FIFO, al carui virf este constituit de registrul instructiunii. Aceasta
organizare simpla devine posibila ca urmare a modului aproape liniar al extragerii
instructiunilor, cu perturbari create de executia instructiunilor de salt. Deciexista o
probabilitate ridicata ca urmatorul cuvint de cod ce trebuie sa fie extras sa se afle la
adresa urmatoare.

Instructiunile de salt videaza stiva FIFO, deoarece distrug traseul liniar prin spatiul
de adresare. Deci, pentru un scurt timp, efectul favorabil al memoriei cache pe circuit
dispare, ca urmare a necesitatii de a aduce noi cuvinte de cod din memoria externa.
Dar instructiunile necesita un anumit timp pentru executia lor in interiorul CPU, ceea
ce permite unitatii de gestiune a tamponului de memorie sa umple rapid stiva FIFO
mai rapid decit are loc vidarea ei de catre CPU, care extrage instructiuni. Deci, dupa
executia unei instructiuni de salt, sirul de asteptare in interiorul circuitului a
instructiunilor se reface.

Poate aparea un conflict intre CPU, care trebuie sa execute un ciclu de


citire/inscriere a memoriei externe, si unitatea de gestiune a stivei FIFO, care trebuie
sa execute un ciclu de citire din memorie pentru a completa sirul de instructiuni. In
astfel de situatii ciclul necesar prelucrarii de date este prioritar.

Referirile necesare accesului la date se fac dupa un model mai putin predictibil decit
cel pentru acces la cod, motiv pentru care memoria cache pe circuit este organizata
ca o memorie cu acces aleator, compusa dintr-o parte de date si o alta de eticheta
(tag), asa cum se vede in figura 4.2. In general, atit componenta DATA, cit si cea
TAG, au acelasi numar de cuvinte. DATA pastreaza valorile datelor, iar TAG
pastreaza informatia corespunzatoare despre adresa CPU utilizata pentru acces la
date. Cind CPU emite o adresa, unitatea de comanda a memoriei cache efectueaza
operatiile din figura 4.3. Acest tip de organizare cache, folosita pentru memoria
cache pe circuit, este numit "complet asociativ", deoarece memoria TAG este
adresata prin continutul sau.

Adresa CPU
Fig. 4.2. Organizarea generala a memoriei cache

Implementarea memoriei cache pe circuit indica un numar de probleme arhitecturale.


In primul rind, memoria TAG este mare comparativ cu memoria DATA, deci se
consuma o mare arie de siliciu pentru gestiunea memoriei. In al doilea rind unele
studii efectuate prin simulare [17] au aratat ca introducerea memoriei cache pe
circuit creste, in loc sa descreasca, viteza ceruta pentru transferul prin frontiera
circuitului. Exista un mic numar de implementari cache pe circuit, cum este cazul
microprocesorului Zilog Z8000 [18]. Memoriile cache pe circuit, in adevaratul inteles
al notiunii, sint, in prezent, limitate la instructiuni, intrucit ele nu ridica mari probleme
si reprezinta o imbunatatire fata de sirurile de instructiuni, fiind posibila memorarea
intregului cod pentru o mica bucla in memoria circuitului microprocesorului, ceea ce
elimina necesitatea reincarcarii codului buclei la fiecare noua executie, asa cum este
cazul sirului de instructiuni. Pe de alta parte, costul implementarii sirului de
instructiuni este mai mic decit cel pentru implementarea mecanismului cache pentru
instructiuni.

In fine, tehnica de tip cache este folosita si pentru a memora informatiile cu cea mai
ridicata fracventa de utilizare, destinate gestiunii memoriei in acelasi circuit cu CPU
sau intr-un circuit destinat special gestiunii memoriei (memory management
Fig. 4.3. Operarea unitatii de comanda a memoriei cache (pe chip)

unit - MMU). O astfel de unica memorie cache este comandata pe baza principiului
LRU (least recently used - cea mai veche informatie folosita), care inlocuieste cea
mai veche informatie folosita cu noile date cerute de catre CPU si copiate din
memoria externa acesteia. Nu toate mecanismele de comanda a memoriei cache pe
circuit sint necontrolabile prin program, dar ele sint implementate prin mijloace
hardware si prezenta lor tinde sa fie transparenta fata de programator.

4.4.3. Memorii cache pe placheta

Aceleasi motive care justifica introducerea de memorii cache pe circuit recomanda


realizarea lor pe aceeasi placheta cu a CPU. Intr-adevar, intirzierea introdusa de
circuitele de interfatare, ca si de transmisia si regimurile tranzitorii ale informatiilor
pe magistrala sistemului necesita, adesea, introducerea unei stari de asteptare (wait
state), mai ales pentru microprocesoa- rele foarte rapide, atunci cind se adreseaza
memoriei care nu se afla pe aceeasi placheta. Mai mult, desi memoria cache pe
placheta este realizata utilizind circuite cu semiconductoare ca memorie pe
urmatorul nivel de ierarhizare (memorie primara), exista intotdeauna memorii cu
semiconductoare avind diferite viteze. Deci, memoria cache pe aceeasi placheta
permite obtinerea de timpi de acces la sistemul de memorie apropiati de cei oferiti de
memoria cache de mare viteza, dar la un pret apropiat de cel al memoriei mai mari si
mai lente (memorie primara).

In sistemele multiprocesor apare un motiv suplimentar de introducere a memoriei


cache. In acest sistem, concurenta intre diferitele CPU pentru accesul la memorie
conduce la intirzieri care au ca efect cresterea timpului mediu de acces la memorie.

Gestiunea memoriei de tip cache presupune existenta unui anumit tip de hardware.
Organizarea din fig. 4.2. ramine valabila si pentru memoria cache pe aceeasi
placheta cu CPU, dar, intrucit memoria cache in acest caz este mai mare, sint
necesare alte mecanisme de gestionare pentru a mentine diversiunea memoriei
TAG cit mai mica posibila.

S-au studiat cerintele pentru asemenea mecanisme suplimentare. Pentru ilustrarea


lor este necesara introducerea urmatorilor parametri:

- dimensiunea cache: dimensiunea memoriei DATA, exprimata in numar de


unitati adresabile de catre CPU;

- dimensiunea blocului: dimensiunea celei mai mici unitati de memorie care poate fi
manipulata de mecanismul de gestiune cache. Fiecare acces la alocatie de
memorie in cadrul unui bloc este privit ca o referinta la bloc. Mai mult,orice
transfer in conjunctie cu memoria primara se face printr-un bloc intreg (in general,
dimensiunea blocului este o putere a lui 2);

- dimensiunea multimii (set size): numarul de locuri diferite in memoria DATA unde
organizarea cache permite stocarea oricarui bloc citit din memoria primara
(si dimensiunea multimii este, in general, o putere a lui 2).

Fig. 4.4 indica un mod posibil de a converti adresele emise de catre CPU in adrese
ale memoriei DATA. Fie n numarul de biti de adresa a CPU si k < n numarul de biti
necesari pentru a adresa memoria DATA.

Dindu-se dimensiunea blocului B=2b, cei mai putini semnificativi b biti de adresa ai
CPU sint copiati in adresa memoriei DATA, deoarece offsetul in cadrul blocului nu
este luat in considerare de catre mecanismul de conversie a adreselor.

Fig. 4.4. Mecanismul de conversie a adresei pentru memoria cache cu S=2s

Daca se noteaza cu S dimensiunea multimii, adresa CPU poate fi transformata in


una din cele S adrese folosite pentru memoria DATA. Deci bitii s ai adresei cache
sint obtinuti prin transformarea prin intermediul memoriei TAG, in timp ce bitii ramasi
x = k-s-b sint determinati in mod unic din adresa CPU, apoi sint copiati. Intrucit bitii x,
ilustrati in fig. 4.4., determina setul de blocuri posibile in cadrul memoriei de date, iar
localizarea exacta in cadrul multimii nu este supusa la restrictiii din partea altor biti
de adresa, transformarea celor mai semnificativi n-b-x biti ai adresei emise de catre
CPU in cei mai semnificativi s biti ai adresei de memorie cache ar trebui efectuata, in
mod ideal, de un set de memorii asociative (cite una pentru fiecare set).

O alta solutie este cea din figura 4.5., unde se folosesc doar memorii RAM. In acest
caz, numarul de biti utilizati pentru memoria TAG sint dati de

2k-b * (n-k+s),

care realizeaza corespondenta intre dimensiunea memoriei cache (2k), dimensiunea


blocului (2b), dimensiunea multimii (2s) si dimensiunea spatiului adreselor CPU (2n).
Prin modificarea valorii lui s se obtin urmatoarele trei organizari clasice:

a) s=0 (organizarea indexata): fiecare bloc din memoria primara este transformat
intr-un unic bloc al memoriei cache;

b)0 < s < h-b (organizarea partial asociativa de seturi): orice bloc din memoria
primara poate fi transformat intr-un numar limitat de seturi ale blocurilor memoriei
cache;

Fig. 4.5 Implementarea memoriei TAG pentru scheme de tip set cache, fara a utiliza
memorie asociativa

c)s = h-b (organizarea complet asociativa): orice bloc al memoriei primare poate fi
transformat in orice bloc al memoriei cache.
Din relatia data mai sus rezulta ca valorile mari ale lui s conduc la dimensiuni mari
ale memoriei TAG. Pe de alta parte, unele rezultate experimentale [19] au evidentiat
in mod clar ca, prin cresterea dimensiunii setului, creste probabilitatea de acces in
memoria cache. In acelasi timp, aceleasi studii au aratat ca dimensiunea de 2 sau 4
a setului conduce la performante foarte apropiate de cele ale organizarii complet
asociative.

Din cele de mai sus decurge preferinta proiectantului pentru memorii cu organizare
partial asociativa, cu o dimensiune mica a setului. De exemplu, VAX 11/780 are o
memorie cache de 8 kocteti cu dimensiunea setului 2 si dimensiunea blocului 8.

Realizari de memorie cache - 1


4.4.4. Memoria primara

Memoria primara constituie cel mai mare subsistem de memorie adresabil direct de
catre CPU. Toate programele ce se ruleaza (cod si date) trebuie memorate in
memoria primara, ca si informatiile necesare gestionarii memoriei. Totusi, nu toate
programele sint gata de a rula in paralel si, chiar cind un program este executat, el
foloseste doar un subset al spatiului sau virtual de adresare pe durata unei anumite
faze.

Tehnicile de gestiune a continutului memoriei primare necesita un anumit suport


hardware, dar algoritmii sint implementati prin software. De aici decurge o varietate
de solutii posibile.

Trebuie remarcat ca memoria primara si registrele sint doua niveluri ierarhice


prezente intotdeauna intr-un sistem, in timp ce celelalte niveluri s-ar putea sa
lipseasca.

4.4.5.Memoria de masa
Informatia care nu este imediat necesara CPU (programe care nu sint gata de rulare
sau subspatii de adresare care nu sint necesare in faza curenta) este memorata in
dispozitive cu mediu magnetic de stocare, care ofera un mare volum de memorare la
costuri unitare mici, dar cu timpi de acces cu cel putin trei ordine de marime mai mari
decit cei ai memoriei primare.

4.4.6. Consideratii privind costul si performanta

Succesul organizarii ierarhizate a memoriei este datorat bunelor performante si


costuri implicate, deoarece costul pe bit este apropiat de cel al celei mai lente
memorii din sistem, in timp ce performantele obtinute sint comparabile cu cele ale
celor mai rapide memorii din ierarhie.

In tabelul 4.1. sint indicate caracteristicile memoriilor folosite la diferitele niveluri ale
ierarhiei; ele permit evaluarea costurilor si performantelor unui sistem de memorie.
Costul pe bit de memorie este dat de formula:

unde mi reprezinta dimensiunea nivelului i al ierarhiei, iar ci este costul


corespunzator pe bit. Din acelasi tabel se poate vedea ca dimensiunea intregii
memorii este dominata de cea a novelurilor celor mai lente, fapt ce justifica afirmatia
privind costul global pe bit.

Tabelul 4.1. Caracteristicile diferitelor niveluri ale unui sistem ierarhic de memorie

NUME DIMENSIUNE TIMP ACCES

Registre 16 -32 0.1 ns

Cache pe circuit 16 kB - 256 kB 1 - 2 ns

Cache pe placheta 265 kB - 1 MB 8 - 10 ns


Memorie principala 128 MB - 1 GB 50 - 70 ns

Memorie secundara 8 GB - 128 GB 10 ms

Performantele depind de localizarea adresei memoriei la care se face acces in


cadrul ierarhiei. Intrucit fiecare nivel are proprii timpi de acces si de transfer, timpul
de acces la memorie poate fi evaluat doar ca valoare medie, sau probabila, folosind
urmatoarea expresie:

Prin pi s-a notat probabilitatea ca adresa de acces sa se afle in nivelul i, iar T i este
timpul de acces la datele implicate. Nivelurile ridicate sint gestionate la nivel de bloc,
indeosebi pentru memoriile pe medii magnetice. De aceea valoarea lui T i trebuie sa
ia in consideratie timpul necesar pentru transferul intregului bloc.

Valoarea lui T depinde in masura esentiala de probabilitatile p i. Ar fi de dorit ca pi sa


fie cu atit mai mare cu cit i este mai mic. Experienta arata ca valorile lui T i sint
apropiate de timpul de acces pentru memoriile cache pe aceeasi placheta cu CPU.
Pentru memoriile cache pe circuit nu se dispune de date concludente, deoarece
numarul de microprocesoare folosind aceasta structura este foarte mic.

4.4.7. Ierarhizarea memoriei in sistemele multiprocesor.

Organizarea ierarhizata a memoriei are mai multe avantaje, dar poate genera
probleme in sistemele multiprocesor, deoarece structura ierarhizata intra in conflict
cu necesitatea de a efectua, in mod corect, multiple operatii de citire/inscriere.
Problema majora in utilizarea unui sistem ierarhizat de memorie in sisteme
mutliprocesor consta in existenta mai multor copii ale acelorasi date in mai multe
niveluri, fapt ce impune acualizarea tuturor acestor copii pentru a pastra integritatea
datelor.

Pentru mai multa claritate se considera un exemplu. Se presupune ca un sistem este


compus din mai multe plachete cu microprocesoare si cu memorie proprie, fiecare
placheta fiind conectata, prin intermediul unei magistrale multiprocesor la o memorie
comuna (fig. 4.6.). Memoria are o structura ierarhica ale caror niveluri cu numar mic
(0,1,2) sint implementate in memoria locala, in timp ce nivelurile cu numar mare (3 si
4) sint realizate in memoria comuna. S-au folosit aceleasi numere de niveluri ca in
fig. 4.1.
Daca programul rulat de procesorul i realizeaza accesul la locatia x, continutul
acesteia este copiat in memoria cache proprie la adresa x'; apoi are loc modificarea
continutului lui x', asa ca valorile continute in x si x' nu mai sint identice. Daca un al
doilea program, rulat de procesorul j, are nevoie de continutul aceleiasi locatii x, el
va folosi o valoare diferita de cea curent utilizata in procesorul i, in pofida faptului ca
este vorba de aceeasi adresa virtuala.

Solutia acestui tip de probleme depinde de ierarhizarea nivelurilor implicate.


Problema memoriei cache proprii a fost intens studiata [20],[21],[22]. De asemenea
ramine deschisa aceeasi problema pentru memoria cache pe circuit. Ca urmare,
introducerea tehnicii de tip cache la microprocesoarele evoluate intirzie, folosindu-se
doar pentru operatia de tip read-only, adica pentru operatii implicind programe.

Fig. 4.6. Exemplu de organizare ierarhizata a memoriei intr-un sistem multiprocesor

4.5. Mecanisme simple de gestiune

In acest subcapitol sint comentate tehnici simple de gestiune a memoriei, care nu


necesita suport hardware, dar ofera un grad redus de flexibilitate pentru gestionarea
spatiului aflat la dispozitia utilizatorului. Aceste metode ofera exemple de gestiune
sub controlul deplin sau partial al programului si ilustreaza avantajele altor tehnici,
devenite posibile in urma disponibilitatii microprocesoarelor moderne.

4.5.1. Memorii cu bancuri suplimentare

Aceasta tehnica este specifica sistemelor cu microprocesoare din perioada de


inceput, ea fiind conceputa pentru extinderea memoriei adresate dincolo de limitele
impuse de numarul de linii de adresa (de regula 16) ale microprocesoarelor de 8
biti. Ideea de baza este aceea a extinde cimpul de adrese prin adaugarea de biti
suplimentari. Ca urmare a limitarilor CPU, acesti biti suplimentari trebuie produsi de
catre microprocesor intr-o operatie separata fata de cea de adresare normala.

In figura 4.7. se indica organizarea hardware a memoriei. Selectarea unuia din mai
multele bancuri de memorie se face pe baza continutului unui unic registru R, care
contine bitii cei mai semnificativi ai adresei, partea cea mai putin semnificativa a
acesteia fiind produsa de catre CPU. Dupa inscrierea registrului R cu informatia
necesara selectarii unui anumit banc, accesul la datele si codul din acesta se face
doar cu ajutorul submultimii de adrese emise de catre CPU. Cind apare necesitatea
referirii la o locatie dintr-un alt banc are loc modificarea continutului lui R, ceea ce
rezulta in comutarea bancurilor.

Fig. 4.7. Memorie sub forma de bancuri comutabile.

Tehnica descrisa nu necesita un suport hardware special, toate functiile de gestiune


fiind efectuate de catre programator. Aceste operatii sint:

- partitionarea datelor si codului programului astfel incit fiecarecomponenta sa


incapa intr-un alt banc, iar comutarea intre bancuri sa nu fie prea frecventa;

- scrierea programelor prin considerarea operatiilor posibile de comutare a


bancurilor pentru accesul la operanzi, scriere care necesita inserarea de cod
necesar modificarii continutului registrului exterior R.

Trebuie notat ca a doua din operatiile mai sus descrise poate fi efectuata daca
programul este scris in limbaj de asamblare; programele in limbaje de nivel inalt
necesita compilatoare si editoare de legaturi speciale care sa poata face fata
problemei comutarii bancurilor. Astfel de instrumente de dezvoltare a programelor nu
sint disponibile in mod curent, fapt ce complica elaborarea programelor pentru
sistemele ce adopta solutia mentionata.

Un alt dezavantaj al metodei consta in alocarea statica, rezultat al necesitatii


gestionarii prin program a datelor si codului. In felul acesta se suprima orice
posibilitate de realocare automata, cu scopul folosirii mai eficiente atunci cind starea
sistemului necesita reasignarea memoriei.

4.5.2. Overlay

A doua tehnica discutata a fost larg utilizata in minicalculatoare, indeosebi in


modelele PDP 11 ale firmei DEC la care nu se folosea paginarea la cerere. Ea mai
este utilizata pentru rularea de programe mari pe microcalculatoare personale.
Tehnica presupune ca programul este partial rezident in memoria principala, restul
fiind memorat pe disc. Cind o parte a programului stocat pe disc devine necesara
unitatii centrale, aceasta parte este adusa in memoria principala in locul altei parti a
programului, care nu este necesara la acel moment. Intrucit diferitele subspatii ale
spatiului programului se pot incarca in aceeasi zona de memorie, apare
suprapunerea acestor subspatii; de aici decurge si numele tehnicii de gestiune a
memoriei: overlay (suprapunere).

Este esentiala evitarea situatiilor cind doua parti distincte si care se pot suprapune
ale programului sa fie simultan necesare in memorie pentru executarea programului.
Singurul care poate face aranjamentele cerute de tehnica overlay este
programatorul, pentru ca el cunoaste modul de evolutie a programului si care anume
sectiuni ale lui trebuie sa fie rezidente in memorie la un anumit moment de timp.

Aceasta partitionare se poate efectua prin structurarea intregului program intr-un


arbore de module, pentru care toate modulele de pe un nivel se pot suprapune.
Arborele de suprapunere se poate construi urmarind arborele apelarii procedurilor.
Radacina este reprezentata de programul principal, care este permanent rezident in
memoria principala, iar toate procedurile apelate direct de catre programul principal
se pot suprapune, pentru ca ele sint apelate una cite una, nici una din ele ne
necesitind prezenta alteia.

Din nefericire, un numar de motive fac realizarea arborelui de suprapunere o


problema netriviala. In primul rind, modulele superpozabile trebuie sa aiba,
aproximativ, aceeasi dimensiune,ca sa poata fi continute in acelasi spatiu de
memorie. Pentru exemplificare se poate considera fig. 4.8. O a doua problema este
generata de minimizarea operatiilor de instalare in si evacuarea din memoria
principala a modulelor (swapping). Cu cit numarul acestor operatii este mai mare, cu
atit eficienta de ansamblu este mai mica. Aceasta cerinta conduce la recomandarea
realizarii de module de mari dimensiuni. Pe de alta parte, gestionarea memoriei se
face cu mai buna eficienta daca modulele superpozabile sint de mici dimensiuni.
Deci, la realizarea arborelui de suprapuneri, programatorul trebuie sa realizeze
compromisul intre cerintele privind memoria si cele referitoare la eficienta executiei.

Fig. 4.8. Exemplu de alocare a memoriei in tehnica overlay.


a) arbore de suprapuneri; b) alocarea initiala a memoriei; c) alocarea dupa apelarea
modulului E; d) alocarea dupa apelarea modulului C; e)alocarea dupa apelarea
modulului F; f) alocarea dupa apelarea modulului G.

O data solutionate problemele referitoare la elaborarea arborelui de suprapuneri,


programatorul se poate baza pe instrumente software de dezvoltare necesare
elaborarii taskului final, intrucit exista editoare de legaturi care se preteaza utilizarii
tehnicii overlay. La executie, cu program construit conform tehnicii mentionate
efectueaza apelari ale sistemului de operare ori de cite ori este necesar a folosi o
procedura care, la acel moment, nu este rezidenta in memoria principala. Se poate
vedea ca implementarea tehnicii overlay nu necesita mijloace hardware speciale, cu
exceptia unor unitati rapide de disc, care sa permita incarcarea cu mare viteza in
memoria principala a sectiunii cerute a programului. Adresele de program generate
de compilatoare nu depind de structura arborelui de suprapunere, intrucit apelurile la
procedurile externe sint solutionate de catre editorul de legaturi, fie in modul normal,
fie prin inserarea de apeluri catre sistemul de operare.

Tehnica overlay este un exemplu tipic pentru metodele care combina cunostintele
programatorului despre comportarea programului cu comutarea automata a
sectiunilor de program, cu scopul implementarii mecanismului de gestiune a
memoriei. Principalul dezavantaj al metodei este legat de pregatirea arborelui de
suprapuneri si necesitatea de a incarca in memorie un intreg modul, chiar daca doar
o parte a lui este necesara. Ca efect se pot obtine performante mai slabe decit cele
oferite de alte tehnici de gestiune, complet automate. Pe de alta parte, este perfect
posibila rularea unor programe cu dimensiuni superiore celei a memoriei fizice
disponibile.

4.6. Swapping

Intr-o masina functionind in regim de multiprogramare este posibila executia


concurenta a mai multor programe. De aceea, este salutara ideea de a pastra in
memoria principala doar programele care sint gata de rulare.

Conform politicii de swapping (comutare intre memoria principala si cea secundara),


un program care asteapta terminarea unei operatii I/O (care poate dura citeva
milisecunde),este evacuat din memorie (swapped out). Cind el devine din nou gata
de rulare, sistemul incearca sa gaseasca un spatiu adecvat in memoria primara, in
care sa incarce programul in discutie. Daca nu exista spatiul disponibil, programul
este inscris intr-o lista de asteptare, in vederea sosirii momentului la care se creeaza
spatiul necesar de memorie. La fiecare evacuare de program in memoria secundara,
rutinele de implementare a mecanismului de gestiune a memoriei incearca sa
incarce in memoria principala un program din lista de asteptare.

Conversia adresei virtuale in adresa fizica de memorie principala se face prin


adunarea adresei virtuale la adresa de inceput a zonei de memorie in care s-a
efectuat incarcarea. Deoarece aceasta operatie de relocare trebuie efectuata la
fiecare ciclu de memorie, apare necesitatea de hardware specializat, care sa
efectueze relocarea intr-un mod care sa nu conduca la lungirea timpului de executie
drept consecinta a aplicarii tehnicii swapping. Acest hardware specializat,
implementat adesea intr-un singur circuit, se numeste unitate de gestiune a
memoriei (MMU-memory management unit) si poate fi considerat drept o extensie
a CPU, care efectueaza cu mai mare viteza functii asociate gestiunii memoriei.
Fiecare tehnica de gestiune a memoriei necesita propriul tip de MMU. Totusi,
sistemele cu multiprogramare au intotdeauna nevoie de o astfel de unitate hardware.

Ori de cite ori un program este lansat sau relansat in executie, adresa de baza a
zonei dee memorie in care se afla stocat un program este incarcata intr-un registru
special al MMU. Un alt registru contine dimensiunea programului, fapt ce permite ca,
pe durata executiei acestuia, sa se poata detecta tentativa de adresare intr-un spatiu
exterior celui al programului curent. Acest test simplu permite protejarea fiecarui
program impotriva unor actiuni periculoase - involuntare sau nu - efectuate de catre
alte programe.

Fig. 4.9 Situatie in care tehnica swapping nu foloseste in mod optim memoria

Tehnica swapping de gestiune a memoriei este simplu de implementat, dar are si


dezavantaje ce nu se pot neglija. In situatia din fig. 4.9. programul PROG2 trebuie
evacuat, eliberind spatiul de memorie pe care il ocupa. Totusi, actiunea nu creeaza
suficient spatiu pentru a incarca in memorie nici unul din programele aflate in lista de
asteptare, chiar daca volumul total de memorie disponibila (1000 + 2000 = 3000
cuvinte) ar permite incarcarea lui PROG7. Tehnica swapping considera un program
drept un bloc a carui incarcare se poate face doar intr-o zona de locatii contigue de
memorie, deci ea nu permite folosirea micilor fragmente de spatii libere de memorie,
spatii a caror dimensiune totala devine importanta dupa un numar de operatii
swapping. Acest efect este numit fragmentarea memoriei si urmarile sale se pot
atenua,inlocuind tehnica swapping cu cea de segmentare.