Sunteți pe pagina 1din 12

6.7.

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

anumit calculator, adresele sale virtuale trebuie translatate n spaiul de adrese


reale R , definit de memoria care este prezent fizic n calculator. Acest proces
este numit translatare a adreselor sau mapare a adreselor. Spaiul de adrese
reale R este o secven liniar de numere 0, 1, 2, ...., n-1, corespunznd
locaiilor adresabile de memorie i este distribuit pe toate nivelurile ierarhiei de
memorii. Spaiul de adrese virtuale V este o colecie de liste, tablouri
multidimensionale i alte structuri neliniare, astfel nct este mult mai complex
dect R .
Asignarea i translatarea adreselor poate fi efectuat n diferitele etape ale
unui program i anume:
de ctre programator n timpul scrierii programului;
de ctre compilator n timpul compilrii programului;
de ctre programul utilitar care realizeaz ncrcarea programului ce
urmeaz s fie executat.
de ctre sistemul hardware i/sau software de gestiune a memoriei.
Specificarea explicit a adreselor reale de ctre programator a fost
necesar la primele calculatoare, care nu aveau un sistem hardware sau
software de gestiune a memoriei. In cazul calculatoarelor moderne,
programatorii utilizeaz n mod normal doar adrese virtuale. Un sistem hardware
sau software specializat determin n mod automat adresele reale cerute de
execuia programului.
Translatarea adreselor se numete static dac adresele virtuale sunt
convertit n adrese fizice n timpul compilrii. In acest caz adresele fizice rmn
constante pe toat durata execuiei programului.
Translatarea adreselor este dinamic dac spaiul adreselor virtuale este
modificat n timpul execuiei programului i n consecin convertirea acestora n
adrese fizice este, de asemenea, efectuat n timpul execuiei. Pentru
translatarea adreselor n timpul execuiei se utilizeaz uniti de gestiune a
memoriei (MMU - Memory Management Unit) implementate prin hardware.
Un program executabil cuprinde un set de blocuri care conin instruciunile
i datele programului. Fiecare dintre aceste blocuri este o secven de cuvinte
care trebuie memorate n locaii consecutive de memorie. Un cuvnt C dintr-un
bloc are propria adres real Ar , utilizat de UCP pentru accesul la acest
cuvnt. Adresa real a cuvntului C este specificat prin adresa de baz B a
blocului care conine cuvntul, mpreun cu adresa relativ sau deplasamentul
D (numit i offset) al cuvntului din cadrul blocului, dup cum se arat n figura
6.14. Deci adresa real a unui cuvnt de memorie se calculeaz cu relaia:
Ar = B + D
Adesea B furnizeaz biii de ordin superior ai adresei reale, n timp ce D
furnizeaz biii de ordin inferior. In acest caz, adresa real este format simplu
prin concatenarea adresei de baz B i a deplasamentului D, un proces care nu
crete n mod semnificativ timpul pentru generarea adresei.

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

La amplasarea blocurilor n memorie, unitatea de gestiune a memoriei


trebuie s evite depirea limitelor unui bloc. O metod obinuit pentru
realizarea acestui deziderat este specificarea adresei maxime Li , numit adres
limit, pe care o poate accesa blocul. O alt posibilitate este de a se specifica
dimensiunea blocului. Adresa de baz Bi i adresa limit Li , sunt memorate n
tabela de adrese ale memoriei. Fiecare adres real Ar generat de bloc este
comparat cu Bi i Li ; accesul la memorie este efectuat dac i numai dac
este satisfcut urmtoarea condiie:
Bi Ar Li
Figura 6.16 indic modul n care unitatea de gestiune a memoriei
efectueaz translatarea adreselor. Adresa de intrare Av este o adres virtual
constnd dintr-o adres de baz virtual Bv, concatenat cu un deplasament
D . Adresa de baz real asignat adresei virtuale Bv este memorat ntr-o
tabel de adrese a memoriei principale. Aceast tabel poate avea dimensiuni
mari. Pentru creterea vitezei procesului de translatare, o parte a tabelei de
adrese ale memoriei este plasat ntr-o memorie de vitez ridicat din UCP,
numit buffer de translatare (TLB - Translation Look-aside Buffer). Intrarea n
TLB este deci partea adresei de baz Bv a adresei virtuale Av , iar ieirea
acestuia este adresa de baz real corespunztoare Br . Aceast adres este
apoi concatenat cu partea de deplasament D din Av pentru a obine adresa
real complet Ar .
Buffer de translatare TLB

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

Cadru de pagin i+1

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).

Astfel, dat fiind faptul c paginile P0 i P2 ale procesului 1 sunt ncrcate


n cadrele 1 i 3, adresele de baz reale ale acestor cadre (n memoria
principal) vor fi 1 * 4096=4096, respectiv 3 * 4096=12288. Dac la adresa de
baz real a cadrului de adaug deplasamentul se obine adresa real a datei
solicitate de UCP.
Procesul de conversie a adreselor virtuale n adrese fizice poate fi efectuat
mai rapid prin utilizarea unui buffer de translatare TLB (Translation Look-aside
Buffer) care va memora o parte dintre fiele coninute de tabela de pagini a
procesului respectiv. Pentru micorarea timpului de rspuns al TLB acesta
poate fi implementat printr-o memorie asociativ.
Eficiena unui sistem de memorie virtual depinde de minimizarea
numrului lipsurilor de pagin. Deoarece timpul de acces al memoriei secundare
este mult mai ridicat dect timpul de acces al memoriei principale, un numr
excesiv al lipsurilor de pagin poate ncetini sistemul n mod semnificativ.
O problem special o ridic situaia n care una dintre paginile din
memoria principal a fost modificat. In aceast situaie pagina respectiv
trebuie copiat pe disc. Pentru a determina care pagin a fost modificat se
adaug la fiecare pagin un bit suplimentar numit bit de modificare sau bit de
inconsisten. Dac o anumit pagin a fost modificat, bitul corespunztor de
modificare este setat la 1. Dac bitul de modificare al unei pagini este 1 i
aceast pagin a fost selectat pentru a fi eliminat din memorie, atunci vor fi
necesare dou accesuri la disc: unul pentru salvarea respectivei pagini n
memoria secundar i nc unul pentru aducerea paginii noi n memoria
principal. Dac bitul de modificare este 0 (aceasta nsemnnd c nu au fost
modificri ale acestei pagini), nu este necesar scrierea paginii pe disc aceasta
putnd fi tears.
6.7.4. Segmentarea
O alt metod de implementare a memoriei virtuale este numit
segmentare. In acest caz, un program este mprit n seciuni de lungime
variabil numite segmente. Un segment poate corespunde unei entiti logice
cum ar fi un set de date sau o funcie n cadrul unui program. Fiecare proces
pstreaz o tabel de segmente n memoria principal, tabel care conine n
principiu aceleai informaii ca i tabela de pagini, ns, spre deosebire de
pagini, segmentele au lungimi diferite i ele pot ncepe n orice zon din
memorie. Pentru acest motiv, eliminarea unui segment din memoria principal
nu asigur ntotdeauna spaiu suficient pentru aducerea altui segment.
Un cuvnt dintr-un segment este referit specificnd o adres de baz,
numit adres de segment i un deplasament n cadrul segmentului. Un
program i datele sale pot fi considerate ca o colecie de segmente nlnuite.
Legturile provin din faptul c un segment de program utilizeaz sau apeleaz
alte segmente.
Avantajul principal al segmentrii const n faptul c limitele segmentelor
corespund limitelor programului i ale datelor. In consecin, informaiile care
sunt partajate ntre diferii utilizatori sunt organizate adesea n segmente. Din

cauza independenei logice ntre segmente, un segment de program poate fi


modificat i recompilat n orice moment fr a afecta alte segmente. Anumite
proprieti ale programelor, ca de exemplu, domeniul de definiie al unei
variabile sau drepturile de acces, pot fi specificate n mod natural de ctre
segmente. Aceste proprieti necesit ca accesurile la segmente s fie verificate
pentru a preveni utilizarea lor neautorizat.
Dezavantajul segmentrii const n utilizarea ineficient a memoriei
principale. La sistemele care utilizeaz segmentarea, blocurile de dimensiuni
diferite tind s prolifereze n memoria principal, lsnd ntre ele spaii
neutilizabile. Acestea pot fi eliminate prin procesul de compactare a memoriei.
Existena unui spaiu inutilizabil ntre zonele ocupate de segmente este numit
fragmentare extern. In cazul paginrii, deoarece cadrele de pagin sunt
contigue, fragmentarea extern nu apare.
Comparnd paginarea i segmentarea, paginarea necesit un sistem mai
simplu de alocare a memoriei dect segmentarea, deoarece paginile au aceeai
dimensiune. Pe de alt parte, paginile nu au semnificaie logic, deoarece ele
nu reprezint elemente de program.
Administrarea memoriei virtuale poate fi simplificat prin combinarea
segmentrii cu paginarea. Utiliznd aceast soluie se obine i o mai bun
utilizare a memoriei principale. Totui, dac un bloc de k cuvinte este mprit n
p pagini de cte n cuvinte, iar k nu este un multiplu de n, ultimul cadru de pagin
cruia i este asignat blocul nu va fi ocupat complet. Existena unui spaiu
inutilizabil n interiorul unui cadru de pagin ocupat parial este numit
fragmentare intern.
6.7.5. Paginarea i segmentarea
Paginarea i segmentarea pot fi combinate pentru a obine avantajele
ambelor soluii. In acest caz, fiecare segment este mprit n pagini. Avantajul
principal al divizrii unui segment n pagini este c se elimin necesitatea de a
plasa segmentul ntr-o zon contigu din memoria principal. In loc de aceasta,
este nevoie doar de un numr de cadre de pagin egal cu numrul paginilor n
care s-a mprit segmentul. Deoarece aceste cadre de pagin nu trebuie s fie
contigue, este mai uor de plasat un segment de dimensiuni mari n memoria
principal.
Atunci cnd paginarea este combinat cu segmentarea, o adres virtual
are trei componente: un index de segment SI , un index de pagin PI i un
deplasament (offset) D . In acest caz, tabela de adrese ale memoriei const din
una sau mai multe tabele de segmente i tabele de pagini. Pentru translatarea
rapid a adreselor, se pot utiliza dou buffere de translatare TLB, unul pentru
tabelele de segmente i unul pentru tabelele de pagini (figura 6.19).
Fiecare adres virtual Av, generat de un program, este translatat printrun proces n dou etape. Mai nti, se utilizeaz indexul de segment SI pentru a
citi tabela curent de segmente cu scopul de a obine adresa de baz PB a
tabelei de pagini necesare.
Aceast adres de baz este combinat cu indexul de pagin PI (care

este un deplasament n cadrul tabelei de pagini) pentru a genera o adres de


pagin, care este utilizat apoi pentru accesul la o tabel de pagini. Rezultatul
este o adres real de pagin, deci un numr al cadrului de pagin, care poate
fi combinat cu partea de deplasament D a adresei virtuale Av pentru a obine
adresa real final Ar .
2

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

6.7.6. Alocarea memoriei


Diferitele niveluri ierarhice ale unui sistem de memorie sunt mprite n
seturi de pagini sau segmente, care pstreaz blocuri de date. Blocurile sunt
transferate n mod automat ntre aceste niveluri n scopul minimizrii timpului de
acces al ierarhiei de memorie. Plasarea acestor blocuri ntr-un sistem de
memorie se numete alocarea memoriei. Metoda de selectare a prii memoriei
principale M 1 n care trebuie plasat un nou bloc K constituie strategia de
nlocuire. Strategiile simple de nlocuire plaseaz blocul K n memoria M 1
numai atunci cnd este disponibil o regiune neocupat cu o dimensiune
suficient (alocare non-preemptiv). Alte strategii realizeaz realocarea

(mutarea) blocurilor existente n memorie pentru a face loc blocului K (alocare


preemptiv). In general, metodele de alocare ale memoriei care sunt eficiente
au ca efect o rat ridicat de succes i un timp mediu de acces sczut. O
alocare eficient a memoriei minimizeaz de asemenea spaiul neocupat din
memoria M 1 .
Atunci cnd un bloc este transferat din memoria M 2 n memoria M 1 ,
sistemul de gestiune a memoriei creaz o intrare corespunztoare n lista
spaiilor ocupate. Atunci cnd un bloc nu mai este necesar n memoria M 1 ,
acesta este eliberat (dealocat) i regiunea pe care o ocup este transferat din
lista spaiilor ocupate n lista spaiilor disponibile. Un bloc este dealocat atunci
cnd un program care l utilizeaz i termin execuia sau cnd blocul este
nlocuit de ctre un alt bloc.
6.7.6.1. Alocarea non-preemptiv
Presupunem c un bloc Ki, de ni cuvinte trebuie transferat din memoria
M 2 n M 1 . Dac nici unul din blocurile care ocup deja memoria M 1 nu poate fi
nlocuit de ctre blocul Ki, atunci este necesar s se gseasc sau s se creeze
o regiune disponibil de ni, sau mai multe cuvinte, care permite plasarea
blocului Ki. Acest proces este cunoscut ca alocare non-preemptiv a memoriei.
Alocarea non-preemptiv poate fi implementat mai simplu ntr-un sistem
cu paginare, unde toate blocurile (paginile) au o dimensiune fix. Harta
memoriei (tabela de pagini) este parcurs pentru a gsi un cadru de pagin
disponibil; dac se gsete unul, acesta este asignat blocului Ki. Aceast
metod simpl de alocare este motivul principal al utilizrii pe scar larg a
paginrii. Dac spaiul de memorie este divizat n regiuni de lungime variabil
(segmente), devine ns mai dificil s se aloce n mod eficient noi blocuri.
Doi algoritmi utilizai pe scar larg pentru alocarea non-preemptiv a
blocurilor de dimensiune variabil (segmente care nu sunt paginate, de
exemplu) sunt primul potrivit, cel mai potrivit i cel mai nepotrivit.
Primul potrivit. Aceast metod plaseaz blocul dat n prima regiune liber
cu dimensiunea potrivit. Se parcurge harta memoriei n mod secvenial pn
cnd se gsete o regiune disponibil Rj de ni sau mai multe cuvinte, iar apoi se
aloc blocul Ki regiunii Rj .
Principalul avantaj al acestei metode este c favorizeaz formarea unor
zone libere la adresele mari de memorie prin plasarea blocurilor la adresele
joase de memorie ori de cte ori este posibil. Totui, aceast metod produce
zone libere care pot fi prea mici pentru a pstra un bloc. Aceast problem este
cunoscut sub numele de fragmentare. Atunci cnd apare fragmentarea, pn
la urm trebuie rulat un anumit algoritm de compactare pentru a colecta toate
zonele libere de dimensiuni mici ntr-o zon cu dimensiunea mai mare. Aceasta
procedur poate reduce performanele.
Cel mai potrivit. Aceast metod aloc regiunea disponibil cu
dimensiunea cea mai mic, care este suficient de mare pentru a pstra blocul
dat. Ca i strategia primului potrivit, strategia celui mai potrivit produce de
asemenea, fragmentarea memoriei. Aceast strategie poate crea un numr

mare de blocuri mici care sunt inutilizabile n majoritatea cazurilor.


Comparnd algoritmii primului potrivit i celui mai potrivit, algoritmul
primului potrivit are avantajul timpului de execuie mai redus. Studiile de
simulare sugereaz c, n practic, algoritmul primului potrivit tinde s aib
performane mai bune dect algoritmul celui mai potrivit.
Cel mai nepotrivit. Aceast metod aloc, pentru blocul ce urmeaz s fie
adus n memorie, regiunea disponibil cu dimensiunea cea mai mare. Aceast
metod, ca i celelalte dou metode, produce fragmentarea memoriei. Totui,
spre deosebire de primele dou metode, metoda celui mai nepotrivit reduce
numrul regiunilor mici.
6.7.6.2. Alocarea preemptiv
Alocarea non-preemptiv nu poate utiliza eficient memoria n toate situaiile.
Este posibil s apar refuzarea unei cereri de alocare a memoriei datorit
spaiului insuficient, dei memoria M1 este doar parial ocupat. Utilizarea mult
mai eficient a spaiului disponibil din memorie poate fi realizat prin relocarea
blocurilor existente n memorie M1, pentru a face loc blocurilor ce urmeaz a fi
aduse din memoria M2.
Dac, la aducerea unui bloc din memoria M2, nu se mai gsete totui un
spaiu suficient pentru acesta este necesar nlocuirea (dealocarea) unor
blocuri, neutilizate sau mai puin utilizate, din memoria M1. Metod preemptiv
necesit deci o strategie de selecie a blocurilor care trebuie dealocate.
Dealocarea necesit stabilirea unei distincii ntre blocurile care au fost
modificate de la ncrcarea lor n memoria M 1 i blocurile care nu au fost
modificate. Blocurile de instruciuni rmn nemodificate, n timp ce blocurile de
date pot fi modificate. Pentru nlocuirea unui bloc care nu a fost modificat,
sistemul de gestiune a memoriei poate nlocui n mod simplu blocul dealocat cu
noul bloc i poate actualiza intrarea acestuia n harta memoriei. nainte ca un
bloc modificat s fie nlocuit, acesta trebuie copiat n memoria M 2 .
Strategiile de nlocuire mai des utilizate sunt:
- FIFO (First-In, First-Out);
- LRU (Least Recently Used).
FIFO este una din cele mai simple strategii de nlocuire. Blocul selectat
pentru nlocuire este blocul cel mai puin recent ncrcat n memoria M 1 .
Avantajul strategiei FIFO const n faptul c este foarte simplu de implementat.
Fiecrui bloc i se asociaz un contor n lista spaiilor ocupate; contoarele
asociate cu blocurile indic secvena lor de ncrcare. De fiecare dat cnd un
bloc este transferat n memoria M 1 , contoarele indicnd secvena de ncrcare
sunt actualizate. Prin inspectarea acestor contoare, unitatea de gestiune a
memoriei poate determina cu uurin primul bloc care a fost ncrcat.
Dezavantajul strategiei FIFO este c poate mri n mod semnificativ timpul
necesar pentru execuia unui proces, deoarece poate nlocui cu aceeai
probabilitate blocuri utilizate intens i blocuri utilizate rar. De exemplu, dac un
bloc ncrcat n memorie de mai mult timp conine o variabil global care este
utilizat n mod constant, acest bloc va fi unul din primele care va fi nlocuit. La

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.

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