Sunteți pe pagina 1din 13

Gestiunea memoriei externe

Gestionarea datelor şi a memoriei externe

Datele constituie una dintre cele mai importante resurse ale unui sistem de calcul, în primul rând
pentru cã activitatea de stocare, prelucrare şi transfer de date este activitatea care justificã
existenţa sistemelor de calcul, în al doilea rând pentru cã, de cele mai multe ori, datele gestionate
de o aplicaţie sunt de neînlocuit, în cazul pierderii lor.

Activitatea de gestionare a datelor sub controlul sistemului de operare constã în organizarea


datelor pe suporţii de memorie externã în scopul stocãrii lor şi pentru a permite regãsirea lor, în
vederea realizãrii schimbului de date cu celelalte componente ale sistemului de calcul.

Atât stocarea cât şi accesul utilizatorului la date trebuie sã se facã în mod unitar, indiferent de
suportul de memorie externã folosit; în plus, sistemul de operare trebuie sã faciliteze accesul
utilizatorului la date, acţionând ca un element de interfaţã între utilizator şi echipamentele care
realizeazã stocarea datelor.

Fişierul reprezintã unitatea logicã de organizare a datelor pe suportul de memorie externã, în


scopul realizãrii operaţiei de stocare a datelor şi de manevrare a lor între diferite dispozitive de
memorie externã sau dispozitive de intrare/ieşire.
Componenta sistemului de operare care asigurã gestiunea datelor pe suporţii de memorie externã
se numeşte sistemul de gestiune a fişierelor (SGF).
Sistemul de operare realizeazã o abstractizare a proprietãţilor fizice ale diferitelor echipamente
periferice: dispozitive de memorie externã, pentru stocarea datelor, sau echipamente de
intrare/ieşire, pentru realizarea schimbului de date între sistemul de calcul şi utilizatori. În acest
scop, sistemul de operare defineşte unitãţi logice, corespunzãtoare acestor echipamente, unitãţi
logice numite device-uri. Pentru fiecare tip de device, sistemul de operare furnizeazã câte un
program de interfaţã numitdriver.

Schimbul de date gestionat de SGF se realizeazã la nivel de fişier, prin cooperarea rutinelor SGF
cu programele driver corespunzãtoare echipamentelor periferice implicate.

Funcţiile îndeplinite de SGF pentru gestionarea datelor stocate pe suporţii de memorie externã
sunt:
 funcţia de evidenţã a fişierelor, care trebuie sã ofere date despre fişiere şi despre modul de
organizare a fişierelor pe suport cât şi despre drepturile de acces ale utilizatorilor la fişiere;
 funcţia de alocare a memoriei externe, pentru stocarea fişierelor; pentru realizarea acestei
funcţii, sistemul de operare trebuie sã realizeze şi o evidenţã a ocupãrii dispozitivelor de memorie
externã;
 funcţia de dezalocare a memoriei externe, prin eliberarea memoriei externe ocupate;
 funcţia de acces la date, care trebuie sã faciliteze accesul utilizatorului la date, prin
localizarea înregistrãrii dorite şi accesarea ei, conform drepturilor de acces.
Utilizând conceptul de fişier, se poate spune cã SGF este acea componentã a sistemului de operare
care implementeazã operaţiile de creare, întreţinere şi exploatare a fişierelor.

Ţinând cont de funcţiile pe care trebuie sã le îndeplineascã în sistemul de calcul, SGF trebuie sã
satisfacã urmãtoarele condiţii:
 sã asigure un mecanism de lucru cu fişierele cât mai accesibil pentru utilizator;
 sã permitã o utilizare cât mai eficientã a dispozitivelor de memorie externã;
 sã asigure o independenţã maximã a programelor faţã de particularitãţile hardware ale
sistemului de calcul;
 sã permitã accesul concurent la fişiere;
 sã asigure securitatea şi integritatea datelor memorate în fişiere.
Evidenţa fişierelor

Funcţia SGF de evidenţã a fişierelor pe suporţii de memorie externã trebuie sã rezolve


urmãtoarele probleme:
 identificarea fişierului şi memorarea caracteristicilor generale ale sale;
 organizarea unui sistem de cataloage pentru înregistrarea tuturor fişierelor de pe un
dispozitiv de memorie externã.
Dintre toate dispozitivele de memorie externã, discurile magnetice necesitã cea mai complexã
evidenţã a fişierelor pe care le memoreazã, pentru cã sunt dispozitive care permit stocarea
simultanã a mai multor fişiere (dispozitive multifişier) şi sunt direct adresabile, deci modul de
organizare a evidenţei fişierelor pe suport trebuie sã permitã accesul direct la fişiere.

Fiecare volum de disc conţine câte o tabelã cu informaţii despre fişierele memorate în volumul
respectiv, tabelã numitã catalog de fişiere sau director. Accesul la fişiere se face pe baza datelor
din aceastã tabelã; fiecare intrare în tabela director conţine câte un descriptor de fişier, ce
cuprinde date despre fişier, şi anume:

 identificatorul de fişier, format dintr-o pereche de valori, de forma (Nume,Indicativ), unde


Nume este numele simbolic al fişierului, recunoscut de utilizator, iar Indicativ este un numãr prin
care fişierul este identificat intern, de cãtre SGF;
 informaţii de adresã care permit localizarea fişierului în disc; natura acestor informaţii
diferã, în funcţie de modul de alocare a discului folosit pentru generarea fişierului;
 informaţii pentru controlul accesului la fişier, prin care sistemul de operare realizeazã
funcţia de protecţie a datelor:
 atributele de fişier (de exemplu: fişier read-only, fişier sistem, fişier ascuns aplicaţiilor
obişnuite)
 utilizatorii şi drepturile de acces la fişier pe care le au (de exemplu: W acces în scriere, R
acces în citire, A acces pentru modificare, D acces pentru ştergere)
 drepturi de partajare a fişierului, de exemplu în cadrul unei reţele de calculatoare;
 informaţii despre date calendaristice, de exemplu: data când a fost creat fişierul, data
ultimei actualizãri, data ultimei consultãri;
 alte informaţii despre fişier, de exemplu: modul de organizare, dupã modul de alocare a
suportului (contiguã, înlãnţuitã, indexatã), tipul de fişier, dupã formatul articolului (cu format fix,
variabil, nedeterminat), dupã modul de codificare a datelor (fişier binar, fişier text), dupã durata
stocãrii pe suport (permanent, temporar, la termen), numãrul de accese la fişier, etc.

Modul de organizare a sistemului de fişiere în directori poate fi:

 cu un singur nivel, definind un director unic pentru fiecare volum de disc; acest director
are dimensiune fixã, deci numãrul de intrãri în director este fix, adicã numãrul maxim de fişiere
care pot fi memorate în volumul de disc este limitat de aceastã valoare maximã. Pentru o astfel de
organizare a sistemului de fişiere, pe un volum de disc poate fi un singur fişier cu un anumit nume
(identificator);
 cu douã niveluri, între care existã o relaţie de subordonare:

 pe primul nivel se defineşte un director principal MFD (Master File Directory), având câte o
intrare pentru fiecare utilizator; în felul acesta se asigurã protecţia datelor între utilizatori, pentru
cã drepturile de acces ale unui utilizator se pot limita la fişierele din propriul sãu director;
 pe al doilea nivel sunt definiţi directorii utilizatorilor, UFD (User File Directory), care conţin câte
o intrare pentru fiecare fişier al utilizatorului respectiv. Pentru o astfel de organizare, pot exista
pe un volum de disc mai multe fişiere cu acelaşi nume, cu condiţia sã aparţinã la UFD-uri diferite;

 cu structurã de arbore, care extinde modul de organizare de mai sus la mai multe niveluri;
fiecare volum conţine un director principal, numit rãdãcinã; intrãrile unui director conţine
descriptori pentru toate fişierele pe care le include; un director este tot un fişier, care diferã de
fişierele utilizator numai prin conţinut; rezultã cã un director poate conţine oricâţi directori sau
oricâte fişiere, cu condiţia ca orice fişier sã se gãseascã într-un singur director;
 cu structurã de graf aciclic, asemãnãtoare organizãrii în arbore de directori, dar cu
deosebirea cã un fişier poate sã aparţinã la mai mulţi directori.

Evidenţa ocupãrii volumului de disc.

Pentru a realiza alocarea spaţiului din disc, sistemul de operare trebuie sã asigure o evidenţã a
modului în care este ocupat fiecare volum şi a spaţiului liber din disc. În acest scop, volumul este
împãrţit în unitãţi de alocare de lungime fixã, numite blocuri şi numerotate secvenţial; existã mai
multe modalitãţi de realizare a evidenţei blocurilor libere şi a celor ocupate:
 cu ajutorul tabelei de ocupare a volumului (TOV), care are atâtea poziţii câte blocuri are
volumul; în fiecare poziţie se memoreazã câte un indicator, care este setat pe 0 dacã blocul nu este
ocupat şi pe o valoare diferitã de 0 la ocuparea blocului;
 cu ajutorul unei liste înlãnţuite a blocurilor libere; în directorul volumului se memoreazã
un pointer la primul bloc liber de pe volum; fiecare bloc liber conţine un pointer la urmãtorul bloc
liber; ultimul bloc liber conţine un indicator de sfârşit de listã; alocarea unui bloc se face cu
scoaterea lui din listã (de obicei de la unul din capetele listei); eliberarea unui bloc se face cu
inserarea blocului în listã; dezavantajul este cã pentru consultarea listei, de exemplu pentru a
determina numãrul blocurilor libere din disc, trebuie încãrcate în memoria internã atâtea blocuri
câte se consultã;
 metodã mai eficientã este evidenţa printr-o listã înlãnţuitã şi indexatã a ocupãrii
volumului; în primul bloc liber din volum se memoreazã câte adrese de blocuri libere încap; acest
bloc se numeşte bloc de index; dacã numãrul blocurilor libere depãşeşte capacitatea blocului de
index, pe ultima poziţie din blocul de index se memoreazã adresa unui nou bloc de index, şamd;
în directorul volumului se memoreazã un pointer cãtre primul bloc de index; alocarea de blocuri
libere ca şi inserarea unor blocuri eliberate în blocurile de index se realizeazã la nivelul ultimului
bloc de index.
Alocarea spaţiului pe disc

În funcţie de modalitatea de alocare a discului se determinã modul de acces la fişier şi informaţiile


care se memoreazã în descriptorul de fişier, pentru a permite accesarea fişierului. Existã mai
multe moduri de alocare a discului pentru generarea unui fişier:

 alocarea este contiguã atunci când fişierul ocupã un set de adrese consecutive în disc;
pentru a face posibil accesul la fişier, în descriptorul de fişier trebuiesc precizate: adresa de
început a fişierului şi lungimea fişierului; în cazul utilizãrii alocãrii contigue poate sã aparã, în
timp, o fragmentare a discului şi necesitatea compactãrii datelor din volum;
 alocarea înlãnţuitã se realizeazã când blocurile fişierului alcãtuiesc o listã înlãnţuitã;
acest mod de alocare permite numai accesul secvenţial la fişier; în descriptorul de fişier se
memoreazã adresa primului bloc al fişierului, pentru a permite citirea fişierului şi adresa
ultimului bloc, pentru a permite extinderea fişierului;
 alocarea indexatã foloseşte un bloc suplimentar, numit bloc de index, care se genereazã
odatã cu fişierul; în blocul de index se memoreazã, în ordinea alocãrii lor, adresele blocurilor
fişierului; pentru fişiere mari, blocurile de index se pot înlãnţui; aceastã alocare permite accesul
direct la un bloc de date din fişier; în descriptorul de fişier se memoreazã adresa primului bloc de
index şi numãrul de blocuri alocate fişierului.

Gestiunea memoriei interne


Tehnica de gestionare a informaţiilor din memoria internã
Sistemele de calcul includ diverse dispozitive de memorare organizate în final pe
două nivele:
· memoria internă
· memoria externă.
Pentru a fi executate, programele trebuiesc încãrcate în memoria internã a sistemului de
calcul, în zone contigue de memorie; aici, ele sunt parcurse secvenţial şi executate, instrucţiune
cu instrucţiune. Tot în memoria internã trebuiesc aduse şi datele asupra cãrora se fac prelucrãri,
pentru cã aceasta este memoria pe care CPU o poate accesa direct şi care constituie memoria sa
de lucru. Lucrul cu memoria internã condiţioneazã, deci, executarea programelor într-un sistem
de calcul. În acelaşi timp, existenţa în memoria internã a informaţiilor (programe şi date) este
condiţionatã de transferul acestora cu memoria externã, care constituie suportul permanent de
memorare a lor.
În stabilirea modalitãţilor de folosire a memoriei interne trebuie plecat de la urmãtoarele premize:
 în timpul execuţiei programelor existã un permanent schimb de date între memoria
internã şi memoria externã, memoria internã reprezentând memoria de lucru iar memoria
externã reprezentând memoria de stocare;
 la un moment dat, în memoria internã, sunt încãrcate mai multe programe, pentru
execuţie (procese generate de programe utilizator sau de programe ale sistemului de operare);
 zonele de memorie alocate fiecãrui proces trebuiesc protejate de accesul celorlalte procese
la ele (de exemplu, programele sistemului de operare trebuiesc protejate de accese nepermise ale
programelor utilizator);
 pe durata execuţiei unui program, necesarul de memorie internã, pentru acest program,
este variabil (de exemplu, în cazul programelor segmentate);
 spaţiul memoriei interne este limitat şi este de dorit ca acest lucru sã limiteze cât mai puţin
dimensiunea programelor care pot fi executate în sistemul de calcul sau numãrul programelor
executate concurent, acolo unde este cazul.
Gestiunea memoriei are rolul de a decide cum trebuie organizată informaţia pe cele
două nivele şi cand trebuie transferată informaţia între acestea; tehnicile de gestiune a
lucrărilor (multiprogramare, multitasking, time-sharing,etc) implică existenţa unor metode
eficiente pentru gestiunea memoriei: tehnici de alocare dinamică şi memoria virtuală.
Gestionarea memoriei trebuie sã asigure urmãtoarele funcţii:

 organizarea informaţiilor în memoria internã (gestionarea informaţiilor);


 evidenţa ocupãrii memoriei interne;
 organizarea schimbului de informaţii între memoria internã şi memoria externã
(gestionarea schimbului de informaţii);
 asigurarea protecţiei informaţiilor memorate în memoria internã (protecţia memoriei).
Rezultatul activitãţii de gestionare a memoriei trebuie sã fie:
 asigurarea unei viteze de execuţie sporite a programelor, în condiţii de protecţie între
programe concurente, în timpul executãrii lor;
 limitarea restricţiilor legate de dimensiunea programelor care pot fi executate în sistem
sau de numãrul programelor care pot fi executate concurent.
Problemele privind gestiunea memoriei sunt rezolvate prin combinarea elementelor hard ale
sistemului de calcul cu componentele soft ale sistemului de operare.

Obiectivul activităţii de gestiune a memoriei este de a furniza o viteză de execuţie


sporită a programelor, prin menţinerea în memoria internă a acelor părţi din programe care
sunt referite cu o frecvenţă mare de către CPU (de regulă, programe independente intre ele);
deoarece în memoria internă există simultan mai multe programe independente între ele,
pentru a utiliza eficient CPU apar următoarele aspecte:
- introducerea în memoria internă a programului ce urmează a fi executat necesită un
spaţiu de memorie determinat de dimensiunea sa, de spaţiul liber din memoria internă în
acel moment şide modul de ocupare al memoriei interne de către alte programe;
- pentru zonele de memorie alocate diferitelor programe, trebuie să se asigure
protecţia acestora faţă de anumite interferenţe şi adresări cu alte programe.
Execuţia unui program este condiţionatã de încãrcarea acestuia în memoria internã, într-o
zonã contiguã de memorie, adicã o zonã din memoria internã formatã din locaţii de memorie
succesive. Fiecare entitate din cadrul unui program (instrucţiune sau datã care se prelucreazã) se
caracterizeazã prin douã adrese în memoria internã:
 adresa din memoria internã la care este memoratã în timpul execuţiei programului,
numitã adresã fizicã; aceastã adresã este caracteristicã procesului generat pentru o anumitã
execuţie a programului
 adresa determinatã ca distanţã de la adresa de început a programului pânã la adresa
entitãţii respective, numitã adresã relocabilã sau adresã relativã.
Pentru execuţii diferite ale aceluiaşi program, adresa relativã este întotdeauna aceeaşi, în
timp ce adresa fizicã se modificã, de obicei, de la o execuţie la alta, în funcţie de adresa de încãrcare
a programului în memorie; adresa de încãrcare în memorie a unui program se numeşte adresã de
bazã şi se memoreazã în registrul de bazã al programului. Adresa relocabilã are proprietatea cã,
prin adunare la adresa de bazã, determinã adresa fizicã a entitãţii, în cadrul procesului respectiv.
Se numesc programe relocabile programele care folosesc adrese relocabile; aceste adrese
se genereazã în procesul de translatare a programului şi în etapa de editare a legãturilor pentru
program. Programele care folosesc numai adrese fixe de memorie (adresele fizice ale entitãţilor
lor) se numescprograme nerelocabile; aceste programe trebuiesc încãrcate întotdeauna la
aceeaşi adresã de memorie, pentru a fi executate.
Translatarea adreselor logice în adrese fizice se realizează printr-o funcţie de
translatare care precede execuţia instrucţiunii respective.
Execuţia unui program este condiţionatã de încãrcarea acestuia în memoria internã, într-o zonã
contiguã de memorie, adicã o zonã din memoria internã formatã din locaţii de memorie succesive.
Fiecare entitate din cadrul unui program (instrucţiune sau datã care se prelucreazã) se
caracterizeazã prin douã adrese în memoria internã:
execuţiei (adresa din memoria internã la care este memoratã în timpul execuţiei programului,
numitã adresã fizicã; aceastã adresã este caracteristicã procesului generat pentru o anumitã
execuţie a programului)(numite şi adrese fizice) în etapele scrierii şi translatării programelor
a căror adrese de memorie, sunt simbolice (adresa determinatã ca distanţã de la adresa de
început a programului pânã la adresa entitãţii respective, numitã adresã relocabilã sau adresã
relativã.)(numite adrese logice). Translatarea adreselor logice in adrese fizice se realizează
printr-o funcţie de translatare care precede execuţia instrucţiunii respective.
Activitatea de gestiune a memoriei are la bază trei algoritmi (fig.3.2.):
1) algoritmul de transfer care determină cand un bloc trebuie transferat din memoria
externă în memoria internă - inaintea execuţiei sau in timpul execuţiei;
2) algoritmul de plasare care determină ce zonă nealocată din memoria internă este
folosită pentru plasarea blocului incărcat din memoria externă;
3) algoritmul de reamplasare care determină care blocuri şi la ce moment trebuie
reincărcate în memoria internă.

Fig.3.2. Activitatea de gestiune a memoriei


Pentru execuţii diferite ale aceluiaşi program, adresa relativã este întotdeauna aceeaşi, în timp ce
adresa fizicã se modificã, de obicei, de la o execuţie la alta, în funcţie de adresa de încãrcare a
programului în memorie; adresa de încãrcare în memorie a unui program se numeşte adresã de
bazã şi se memoreazã în registrul de bazã al programului. Adresa relocabilã are proprietatea cã,
prin adunare la adresa de bazã, determinã adresa fizicã a entitãţii, în cadrul procesului respectiv.
Organizarea memoriei interne se referã la modul de împãrţire a memoriei interne în zone
contigui numite partiţii, în scopul alocãrii lor proceselor generate în sistem.
Alocarea memoriei este operaţia de ocupare a partiţiilor de memorie cu secvenţe de cod
executabil sau de date ce aparţin unui proces din sistem. Gestionarea alocãrii memoriei interne
trebuie sã rezolve urmãtoarele probleme:
 generarea partiţiilor de memorie, realizarea evidenţei partiţiilor şi a ocupãrii lor
 alocarea partiţiilor de memorie la procesele care le solicitã (de exemplu, la generarea unui
proces)
 dezalocarea partiţiilor alocate, atunci când nu mai sunt utilizate de procesul la care au fost
alocate (de exemplu la distrugerea procesului sau la evacuarea unui proces din memoria internã).
Aceste sarcini pot fi realizate de operatorul uman, sau automat, de componenta de gestiune a
memoriei interne, în funcţie de complexitatea sistemului de operare. De exemplu, pentru
sistemele exploatate în multiprogramare, definirea partiţiilor de memorie fixe se realizeazã
manual, la configurarea unei sesiuni de lucru a sistemului; la sistemele în time sharing sau în timp
real, partajarea memoriei interne între procese se face în mod dinamic şi se gestioneazã automat.
Existã diferite modalitãţi de organizare şi de alocare a memoriei interne; ele sunt determinate de
funcţiile pe care le asigurã componenta de gestiune a memoriei interne a sistemului de operare şi
de tehnica de exploatare a sistemului de calcul utilizatã.
Atunci când procesul de alocare a memoriei interne se realizeazã exclusiv prin utilizarea memoriei
interne, modalitatea de alocare se numeşte alocare realã. În cazul în care, pentru alocarea
memoriei interne se foloseşte şi memoria externã, modalitatea de alocare se numeşte alocare
virtualã.Alocarea virtualã necesitã mecanisme mai complexe şi operaţii suplimentare de
transfer de date între memoria internã şi memoria externã.
Modul de realizare a alocãrii reale depinde de complexitatea sistemului de operare şi de tehnica
de exploatare a sistemului de calcul folositã:
a. un caz aparte al alocãrii reale este alocarea absolutã. Aceastã alocare se utilizeazã în cazul
programelor nerelocabile, adicã al programelor care lucreazã cu adrese fixe de memorie şi care
trebuie încãrcate întotdeauna în aceeaşi zonã a memoriei interne;
b. în cazul sistemelor exploatate în monoprogramare, alocarea realã a memoriei presupune
existenţa a douã partiţii de memorie:
 partiţia monitor, utilizatã de sistemul de operare
 partiţia utilizator, alocatã integral procesului generat de programul utilizator în execuţie;
gestionarea partiţiei utilizator este realizatã exclusiv de utilizator, de exemplu prin segmentarea
programului şi reacoperirea segmentelor, în timpul execuţiei programului (tehnici overlay), în
cazul execuţiei programelor mari;
c. în cazul sistemelor exploatate în multiprogramare se realizeazã organizarea memoriei interne
în partiţii fixe de memorie, definite la lansarea unei noi sesiuni de lucru a sistemului. Alocarea
realã cu partiţii fixe este folositã pentru a putea încãrca în memorie, la un moment dat, mai multe
procese în execuţie, corespunzãtor mai multor fire de aşteptare. Organizarea lucrãrilor, pentru a
fi lansate în execuţie, poate fi fãcutã în douã moduri:

 lucrãrile sunt organizate de la început în fire de aşteptare şi fiecare fir de aşteptare are
alocatã câte o partiţie de memorie. În acest caz, operatorul uman stabileşte alcãtuirea firelor de
aşteptare, înainte de lansarea în execuţie a loturilor de lucrãri. Sistemul de operare încarcã fiecare
proces pe care îl genereazã în partiţia de memorie care corespunde firului de aşteptare din care
face parte lucrarea. Procesul ocupã aceastã partiţie pe toatã durata execuţiei sale şi o elibereazã la
distrugerea sa. În funcţie de spaţiul de memorie care îi este necesar, un proces va ocupa într-o
mãsurã mai mare sau mai micã partiţia care i-a fost afectatã. Rezultã cã acest mod de alocare a
memoriei realizeazã o utilizare mai eficientã a memoriei interne decât în cazul monoprogramãrii,
dar încã mai pot exista partiţii utilizate ineficient. În funcţie de numãrul şi durata de execuţie a
lucrãrilor din fiecare fir de aşteptare, se poate ajunge, la limitã, în situaţia în care toate lucrãrile
rãmase în sistem, pentru a fi executate, aparţin unui singur fir de aşteptare; în acest caz,
multiprogramarea este, practic, inefectivã. Pentru a evita astfel de situaţii, firele de aşteptare se
pot organiza în clase, realizându-se punerea în comun a partiţiilor alocate firelor de aşteptare ale
unei clase pentru toate lucrãrile din clasa respectivã;
 prin organizarea unei singure cozi pentru toate partiţiile, caz în care, alocarea unei partiţii
pentru un nou proces este realizatã de sistemul de operare. Aceastã metodã permite alegerea celei
mai potrivite partiţii pentru a fi alocatã unui proces, dar implicã o activitate suplimentarã pentru
sistemul de operare; când dimensiunea partiţiilor libere este prea micã pentru procesul care
urmeazã a fi generat în sistem, acesta trebuie sã aştepte eliberarea unei partiţii suficient de mari
care sã permitã încãrcarea lui, pentru execuţie. Una dintre problemele generate de alocarea cu
partiţii fixe se referã la fixarea lungimii partiţiilor: alegerea unor dimensiuni mari pentru partiţii
oferã mai uşor variante de alocare a unei partiţii, pentru lucrãrile mari; în acelaşi timp, însã, scade
numãrul partiţiilor din sistem, deci scade numãrul proceselor în execuţie, la un moment dat.
d. alocarea realã cu partiţii variabile, sau alocarea dinamicã, permite o utilizare mai
economicã şi mai puţin rigidã a memoriei interne; acest mod de organizare a memoriei interne
presupune împãrţirea memoriei în partiţii al cãror numãr şi dimensiune se stabilesc în funcţie de
necesitãţi şi se modificã automat. O partiţie se caracterizeazã prin adresa şi lungimea sa. Iniţial,
în memoria internã existã o singurã partiţie liberã. În momentul în care un proces este generat în
sistem, pentru a fi lansat în execuţie i se alocã, într-o partiţie liberã, o zonã de lungime suficient
de mare încât sã cuprindã cea mai lungã ramurã a sa. Restul partiţiei, rãmas liber, genereazã o
altã partiţie liberã, în care poate fi încãrcat un alt proces, şamd. În momentul eliberãrii unei
partiţii, aceasta poate fi alocatã unui alt proces care solicitã o partiţie de aceeaşi dimensiune, sau
mai micã. Se observã cã, pentru o sesiune de lucru mai îndelungatã, tendinţa este de creştere a
numãrului de partiţii, ocupate sau nu, în paralel cu scãderea lungimii lor. Aceasta înseamnã cã,
în timp, sistemul poate încãrca, spre execuţie, procese care solicitã un spaţiu de memorie din ce
în ce mai mic. Fenomenul acesta se numeştefragmentarea internã a memoriei şi constituie
principalul inconvenient al alocãrii cu partiţii variabile. Pentru înlãturarea acestui efect, în
momentul în care un proces nu poate fi încãrcat într-o partiţie liberã de memorie, sistemul de
operare poate acţiona în mai multe moduri:
 procesul aşteaptã pânã la eliberarea unei partiţii suficient de mari;
 se încearcã reconstituirea unei partiţii libere mai mari, din mai multe partiţii libere
adiacente (nu toate sistemele de operare pot realiza aceastã operaţie);
 se iniţiazã efectuarea unei operaţii de compactare a memoriei, care constã în deplasarea
partiţiilor active cãtre partiţia monitor şi crearea unei partiţii libere compacte, dupã ultima
partiţie ocupatã. Compactarea memoriei este o operaţie costisitoare (afecteazã timpul de execuţie
al proceselor) şi de aceea se poate recurge la soluţii de compactare parţialã a memoriei (doar
pentru eliberarea unei partiţii de lungime convenabilã) sau de mutare a unui proces într-o partiţie
mai micã, pentru eliberarea partiţiei mai mari pentru alt proces. Între alocarea cu partiţii fixe şi
cea cu partiţii variabile nu existã diferenţe hard de implementare; alocarea cu partiţii variabile se
realizeazã cu funcţii suplimentare ale sistemului de operare.

Memoria virtuală
Conceptul unui singur nivel de memorie- denumită memorie virtuală- oferă utilizatorului
iluzia că memoria internă are o capacitate foarte mare, partea de hardware realizand
automattransferul informaţiei din memoria internă în memoria externă şi invers.
Alocarea virtuala a memoriei interne permite extinderea logicã a memoriei interne, prin
utilizarea memoriei externe.
Alocarea virtualã se bazeazã pe urmãtoarele principii:
programul care se executã este încãrcat integral în memoria externã, numitã memorie virtualã,
respectând convenţiile de încãrcare în memoria internã, adicã:
 în locaţii succesive
 la adrese relocabile, numite adrese virtuale;
 în timpul execuţiei programului au loc schimburi permanente între memoria internã şi
memoria externã, la nivelul unor unitãţi de schimb numite pagini sau segmente, în funcţie de
tehnica de organizare a memoriei virtuale folositã;
 pentru a putea identifica entitãţile din program, prin intermediul adresei virtuale, se
realizeazã transformarea adresei virtuale în adresã fizicã, prin intermediul funcţiei de mapare; se
spune cã are loc proiecţia spaţiului virtual peste cel real; pentru a mãri viteza acestei operaţii,
funcţia de mapare se implementeazã hardware;
 între douã transferuri succesive între memoria internã şi memoria externã, se executã
secvenţa de instrucţiuni încãrcatã în memoria internã, conform principiului vecinãtãţii: în
majoritatea timpului, execuţia unui program se desfãşoarã într-o vecinãtate apropiatã a
instrucţiunii curente.
Unitatea de transfer intre memoria internă şi cea externă este pagina, aceasta reprezentand
o entitate a memoriei de dimensiune fixă de 512, 1024, 2048 sau 4096 kbytes; procesul de
deplasare al paginilor între memoria internă şi memoria externă este referit ca transfer de
pagini.
O adresă folosită de programator se numeşte adresă virtuală, iar adresa reală unde
este emorată se numeşte adresă fizică (dimensiunea spaţiului de adrese virtuale este mult
mai maredecat imensiunea spaţiului de adrese reale).
Funcţia de translatare a unei adrese virtuale ai in adresă reală bj se poate defini astfel:
ft = 0 dacă informaţia de la adresa virtuală solicitată (ai) nu este in acel moment rezidentă in
memoria internă;
ft = bj dacă adresa virtuală ai găseşte rezidentă adresa reală bj in memoria internă.
Dacă ft(ai) = 0 se emite un semnal de nerezidenţă şi se generează o intrerupere care are ca
efect plasarea din memoria externă in memoria internă, a informaţiei referite de procesor
prin adresa virtuală ai. La terminarea intreruperii (care lansează in execuţie algoritmii de
transfer, plasare şi reamplasare) ft(ai) va fi nenulă, avand loc o nouă iniţiere a activităţii
intrerupte. Dispozitivul de translatare este redat în fig.3.3.

Fig.3.3. Mecanismul de translatare a adreselor virtuale în adrese fizice


Existã mai multe moduri de alocare a memoriei virtuale:
 alocarea paginatã
 alocarea segmentatã
 alocarea segmentatã şi paginatã.
Fiecãrui mod de alocare îi corespunde o metodã de mapare a memoriei virtuale peste memoria
internã.

a. organizarea la nivel de pagină


Organizarea la nivel de pagină conduce la reducerea necesarului de informaţie
conţinut în tabela ft deoarece spaţiul de adrese este divizat in blocuri de dimensiune
constantă numite pagini. Dimensiunea paginii virtuale coincide cu dimensiunea paginii reale
ceea ce implică netranslatarea adresei cuvantului de pagină. Dispozitivul de translatare
construieşte o tabelă a paginilor organizată în memoria internă (MTP) cu informaţii necesare
procesului de translatare din adrese virtuale înadrese fizice (fig. 3.5.).

Fig.3.5. Organizarea la nivel de pagină a memoriei virtuale


Pentru orice adresă virtuală ai se asociază perechea (P,C) unde P
reprezintă numărulcuvintelordin pagină, iar C numărul unui cuvant referit din P. Prin P se
intră in tabela de pagini, la unul din cuvintele de la 0 la 2p, de unde se extrage componenta Q
de o anumită dimensiune; dacă:
- RM (Q) are conţinut nenul, atunci adresa solicitată de procesor are drept corespondent
opagină de memorie rezidentă in memoria internă;
- RM (Q) = 0 atunci adresa virtuală solicitată nu are adresă de pagină reală in
memoria internă, ceea ce conduce la declanşarea celor 3 algoritmi ca urmare a setării
registrului de REZIDENT. Algoritmii vor determina transferul paginii corespunzătoare din
memoria externă în memoria internă, actualizand totodată şi MTP, după care procesorul
referă din nou adresa.
Organizarea la nivel de pagină oferă avantajul că un program se poate executa fără a avea
toate paginile încărcate în memoria internă, ele putand fi încărcate pe măsură ce devin
necesare înprelucrare, deci o utilizare mai eficientă a memoriei şi totodată, o protecţie mai
sigură a informaţiei.
Alocarea paginatã se realizeazã astfel:
 memoria internã se împarte în zone de lungime fixã, numite pagini fizice
 memoria virtualã alocatã unui proces se împarte în zone de aceeaşi lungime cu paginile
fizice, numite pagini virtuale
 pentru execuţia procesului, se încarcã, pe rând, pagini virtuale în pagini fizice libere din
memoria internã (proiecţia spaţiului virtual peste cel real se face la nivel de paginã)
 pentru fiecare proces în execuţie, care utilizeazã memoria virtualã, se creazã o tabelã de
pagini; în aceastã tabelã se memoreazã numãrul paginii fizice în care a fost încãrcatã fiecare
paginã virtualã; tabela de pagini a procesului este folositã de funcţia de mapare astfel: adresele
virtuale se compun din numãrul paginii virtuale şi deplasarea în cadrul acestei pagini (adresa
relativã la începutul paginii); funcţia de mapare determinã adresa fizicã pe baza numãrului paginii
fizice corespunzãtoare, preluat din tabela de pagini, şi a deplasãrii
 dacã, pentru o anumitã adresã virtualã, valoarea gãsitã în tabela de pagini este 0, înseamnã
cã pagina virtualã respectivã nu este încãrcatã în memoria internã; se genereazã o întrerupere şi
se lanseazã procedura de aducere a paginii virtuale în memoria internã, dupã care procesul poate
fi reluat.
Alocarea paginatã este folositã la sistemele de calcul compatibile IBM-PC pentru utilizarea
memoriei expandate.
b. organizarea la nivel de segment
Organizarea la nivel de segment imparte spaţiul de memorie in blocuri de dimensiune
variabilă, numite segmente (pot fi module de program sau anumite structuri de date)- fig.
3.6.

Fig.3.6. Organizarea la nivel de segment a memoriei virtuale


Adresa virtuală referită de procesor constă din numele segmentului S şi numele cuvantului în
segment C; adresa de memorie unde incepe segmentul S reprezintă adresa de bază R, iar prin
Dse specifică dimensiunea segmentului.
Adresa reală determinată prin R+C se obţine dacă registrul de buffer conţine adresa
extrasă din memoria tabelei de segmente, efectuandu-se şi comparaţia dintre C şi D; dacă R
= 0, atunci se vor declanşa cei trei algoritmi.
Alocarea segmentatã se realizeazã astfel:
 programul este împãrţit în segmente care pot avea lungimi diferite
 pentru execuţie, sunt încãrcate pe rând, în memoria internã, segmente ale programului
 fiecare segment se încarcã în memoria internã într-o partiţie liberã acoperitoare
 fiecare proces are definitã o tabelã de segmente, în care se memoreazã adresa fizicã de
încãrcare a fiecãrui segment
 pentru adresare, funcţia de mapare foloseşte tabela de segmente a procesului.
Avantajul suplimentar al alocãrii segmentate este cã se poate asigura o bunã protecţie a memoriei,
prin acordarea drepturilor de acces la nivelul segmentelor şi memorarea acestor drepturi în tabela
de segmente. Dezavantajul este cã, la fel ca în cazul alocãrii reale cu partiţii variabile, şi alocarea
segmentatã poate genera fragmentarea memoriei interne; pentru a înlãtura acest inconvenient se
poate utiliza alocarea segmentatã şi paginatã.
Organizarea la nivel de Segment-Pagină
Alocarea segmentatã şi paginatã combinã cele douã metode anterioare: programul este
împãrţit în segmente şi încãrcat în memoria internã segment cu segment fiecare segment este
împãrţit în pagini egale cu paginile fizice încãrcarea unui segment în memoria internã se face
prin proiecţia paginilor virtuale ale segmentului peste pagini fizice libere din memoria
internã fiecare proces are în memoria internã o tabelã de segmente în care se memoreazã adresa
tabelei de pagini a fiecãrui segment pentru determinarea adresei fizice, funcţia de mapare
foloseşte tabela de segmente şi tabela de pagini a segmentului cãutat.
Organizarea la nivel de segment-pagină divide adresele virtuale şi adresele
fizice în segmente, iar segmentele în pagini, în vederea fructificării avantajelor celor
două metode de organizare:
- paginarea, care oferă implementarea simplă şi cel mai sigur mijloc de protecţie
a informaţiei;
- segmentarea, care satisface intr-o mai mare măsură cerinţele programatorului prin
divizarea in segmente, deci ţinand seama de logica programului (fig.3.7.).

Fig. 3.7. Organizarea la nivel de segment-pagină a memoriei virtuale


În cadrul acestui mod de organizare, există o singură tabelă de segmente şi un număr
de tabele de pagini egal cu numărul de segmente.
Atunci cand procesorul referă o adresă virtuală, acesteia i se asociază:
- adresa virtuală a segmentului S;
- adresa virtuală a paginii in segment CP;
- adresa virtuală a cuvantului din cadrul paginii CC; iar registrul de acces segment este
setat.
Prin S din RV se caută in MTS; dacă se găseşte o adresă, aceasta este reprezentată prin:
- R - adresa tabelei de pagini;
- D - dimensiunea segmentului exprimată in pagini şi introdusă apoi in registrul de buffer.
Prin intermediul lui R din registrul de buffer se selectează o tabelă de pagini din MTP;
componenta CP din registrul de adrese şi R din registrul de buffer, permit extragerea din
tabela de pagini a cuvantului indicat prin CP din RV; cuvantul selectat are Q biţi şi
reprezintă una din paginile reale din memoria internă, fiind introdus in RM unde vine şi
componenta CC care indică adresa reală a cuvantului in pagină.
Dacă nu se găseşte prin S din RV nici o intrare in MTS, atunci segmentul virtual adresat nu are
corespondent in memoria internă, deci registrul de REZIDENT este setat şi se
declanşeazăalgoritmii de transfer din memoria externă in memoria internă a segmentului
solicitat actualizandu-se şi memoria tabelei de segmente.
Dacă CP din RV este mai mare decat D din registrul de buffer, registrul
de depăşire semnalizează o eroare de adresare poziţionandu-se pe 1.
Accesul in MTP se realizează prin poziţionarea registrului de acces la pagină pe 1,
iarcomponentele Q şi CC sunt introduse in RM.
În cazul proceselor concurente, gestiunea memoriei intre mai multe procese poate fi
analizatăprin - limitarea frecvenţei transferului de date şi programe;
- conservarea execuţiei programelor din memoria internă, in timp ce alte programe
sunt înaşteptare in memoria externă;
- transferul datelor şi programelor din memoria internă atunci cand procesele le solicită.
Acest mod de alocare are toate avantajele celor douã moduri de alocare anterioare; a fost
implementat pentru prima datã pe platforma MULTICS; este folosit de sistemul de operare VMS
şi de MS-DOS pentru lucrul cu memoria extinsã.
Avantajele alocãrii virtuale sunt:
 permite utilizarea mai eficient a memorie interne; în cazul alocãrii paginate nu existã zone,
în memoria internã, care nu pot fi alocate, pentru cã au o dimensiune prea micã, sau care sunt
alocate şi sunt ocupate parţial
 pot fi executate proceduri reentrante, prin încãrcarea lor o singurã datã în memoria
internã şi actualizarea
 diferitã a tabelelor de pagini ale proceselor care le apeleazã.

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