Sunteți pe pagina 1din 11

Curs 10

Gestiunea memoriei

Sisteme de operare
Lect. Dr. Ozten CHELAI

Facultatea de Matematica si Informatica


Universitatea Ovidius Constanta

Curs10 SO - lect. dr. Ozten Chelai, 2009-2010 1


Nivele si tipuri de memorie
 Arhitectura sistemului de memorie este stratificata. Exista in sistem mai multe
tipuri de memorie organizate ierarhic, astfel, excluzand registrii
microprocesorului avem:
 memorie cache,
 memorie principală (operativă, internă) (MP),
 memorie secundară (MS)
 Memoria cache este transparentă pentru programator şi introduce un
mecanism pentru creşterea performanŃelor sistemului pe baza principiului
localibilităŃii spaŃiale şi temporale a datelor şi programelor. Ea poate să apară
oriunde între alte două nivele de memorie; există memorii cache între regiştrii
microprocesor.
 Memoria operativă este memoria adresabilă de către programe. Memoria
operativă este, în general, componenta fizică realizată în tehnologii RAM. În
sistemele moderne memoria adresabilă de către programe are o capacitate mai
mare decât memoria fizică disponibilă pe sistemele de calcul; ea se suprapune
peste memoria fizică extinsă cu un spaŃiu suplimentar pe disc magnetic prin
implementarea conceptului de memorie virtuală.
 Memoria secundară este compusă din dispozitivele de memorie externă şi este
vizibilă programelor ca spaŃiu logic format din fişiere. Sistemul de operare oferă
un mecanism de memorare şi acces on-line la acest spaŃiu de memorie. Un tip
special de memorie este:
 Memoria de arhivare este formată din suporturile de memorare destinate păstrării în
siguranŃă şi pe termen lung a informaŃiilor. Ea este suprapusă peste diferite tipuri de
medii de memorare, iar suporturile de informaŃii se conectează temporar la diferite
dispozitive de interfaŃă cu sistemul de calcul (ex. Suport pe bandă magnetică conectat
la unitatea de bandă magnetică, suport CD conectat la CD-drive, etc).
Managerul de memorie
 Sistemul de operare este gestionarul resurselor sistemului de calcul.
Componenta sistemului de operare responsabilă cu gestiunea memoriei este
managerul de memorie. Principalele funcŃii ale acestuia sunt:
 organizarea spaŃiului de memorie,
 evidenŃa spaŃiilor libere şi ocupate,
 alocarea/eliberarea zonelor de memorie pentru procese,
 comutarea informaŃiilor între MP şi extensia sa în MS (swapping).
 Organizarea spaŃiului de memorie,
 în sistemele cu monoprogramare spaŃiul de memorie este format din zona destinată
procesului utilizator curent şi zona ocupată de sistemul de operare.
 La sistemele cu multiprogramare spaŃiul util, adică cel destinat proceselor utilizator,
este împărŃit în partiŃii, ocupate de mai multe procese existente simultan în sistem.
EvidenŃa spaŃiilor libere şi ocupate ca şi alocarea şi eliberarea memoriei se face în
termeni de astfel de partiŃii. Caracteristicile şi gestionarea acestor partiŃii diferă funcŃie
de complexitatea sistemului de operare.
 Comutarea informaŃiilor între memoria principală şi memoria secundară,
realizarea acestei operaŃii depinde de raportul dintre resursele fizice şi
necesităŃile de resurse ale proceselor din sistem. Daca nu exista resurse fizice,
se extinde memoria principala cu un spatiu din memoria externa (swap), iar
tehnica este de swapping.
 Gestiunea spatiului swap este automat realizata de SO prin conceptul de memorie
virtuala.
 La SO vechi se realiza de programator cu module de tip overlay.
Relocare şi protecŃie
 Pe parcursul elaborării sale un program parcurge, în general, următoarele faze:
 cod sursă
 cod obiect
 cod executabil
 Translatarea este operaŃia de transformare cod scris în limbaj de nivel superior în cod al unui limbaj
Ńintă, de nivel inferior.
 Un program poate fi format din mai multe module (ex. proceduri). Translatarea fiecărui modul se face
într-un spaŃiu de adrese propriu acestuia, care este un spaŃiu liniar ce începe cu adresa 0. De asemenea,
programul poate folosi proceduri din biblioteca limbajului în care este scris şi care sunt disponibile în cod
obiect. În acest context este necesară operaŃia de editare de legături între toate aceste module obiect.
 Linkeditarea (editarea de legături) este operaŃia de combinare într-un singur spaŃiu de adrese a
programului principal, procedurilor utilizator şi procedurilor de bibliotecă. În urma acestei operaŃii se
obŃine un singur modul ce conŃine codul executabil şi la a cărui generare are loc unificarea spaŃiilor de
adresare independente într-un singur spaŃiu liniar care începe la adresa 0. O discuŃie mai rafinată asupra
acestui subiect ia în considerare faptul că sistemele pot folosi biblioteci cu încărcare dinamică (DLL-
dynamic linking library), caz în care parte din codul modulelor de bibliotecă se va încărca în spaŃii
independente de adresare ce sunt ataşate spaŃiului procesului curent la momentul execuŃiei.
 La încărcarea unui proces în memorie, sistemul de operare îi alocă una din partiŃiile libere. În ambele
cazuri problema este aceeaşi, anume faptul că modulele de cod executabil sunt generate în spaŃii
independente de adresare, începând cu adresa 0, iar încărcarea propriu-zisă a codului în memorie se
face funcŃie de spaŃiul disponibil, la adrese diferite de fiecare dată.
 SoluŃia acestei probleme, numită problema relocării, este dată de modificarea instrucŃiunilor care conŃin
adrese de memorie la momentul încărcării programului în memoria principală, astfel încât adresele sa fie
actualizate conform amplasarii acestora în memoria alocată curent.
 O altă problemă, problema protecŃiei, apare la sistemele cu multiprogramare unde trebuie asigurată
protecŃia faŃa de accesele la zone alocate altor procese, deci independenŃa spaŃiilor de adresare ale
diferitelor procese din sistem. De acestă dată soluŃia constă în protejarea fiecarei zone de memorie cu un
cod ataşat procesului căreia i-a fost alocată, cod păstrat şi în PSW (registru microprocesor cu indicatorii
de stare).
Organizarea spaŃiului de memorie
 O soluŃie bună şi completă pentru relocare şi protecŃie este utilizarea a doi
regiştrii cu următoarele funcŃii:
 registru de bază = conŃine adresa de început a zonei alocată procesului
 registru de limită = conŃine dimensiunea zonei de memorie alocată
 Relocarea se va face prin adresare relativă la bază (adică adresa se va
construi prin operaŃia de adunare “baza + offset”). ProtecŃia se asigură prin
verificarea valorii “offset” faŃă de conŃinutul registrului limită.
 SpaŃiul de memorie principală este organizat în partiŃii care pot avea dimensiuni
fixe sau variabile.
 PartiŃiile fixe se obŃin prin împărŃirea memoriei disponibile în zone de dimensiuni
prestabilite, fixe, ce vor fi alocate ca atare (partiŃii diferite pot avea dimensiuni diferite).
 Alocarea se face astfel încât dimensiunea partiŃiei să fie cel puŃin egală cu capacitatea
de memorie solicitată de proces.
 Problema care apare aici este legată de faptul că cerinŃele proceselor nu sunt identice
cu capacităŃile acestor partiŃii, deci apare fenomenul de fragmentare internă, adică
spaŃii nefolosite în interiorul partiŃiilor.
 PartiŃiile variabile asigură alocarea memoriei în zone de dimensiune variabilă,
conform solicitării de către fiecare proces. În acest caz apare problema fragmentării
externe, concretizată prin spaŃii rămase nefolosite între partiŃii, pe măsura eliberării şi
relocării acestora. SoluŃia constă în compactarea zonelor adiacente libere.
 O altă problemă este legată de variaŃia dimensiunii procesului pe măsura execuŃiei
sale, adică a dimensiunii zonei de date pe seama structurilor cu dimensiune varibilă şi
a zonei ocupată de stivă odată cu apelurile şi revenirile din subrutine. Pentru
soluŃionarea acestei probleme se prevede un spaŃiu de extindere între zona de date
şi stivă.
EvidenŃa spaŃiilor libere şi ocupate
 În cazul organizării memoriei în partiŃiilor fixe, evidenŃa acestor spaŃii este directă,
reducându-se la evidenŃa partiŃiilor.
 În cazul utilizării partiŃiilor variabile, memoria este împărŃita în unităŃi de alocare, iar
fiecare proces va primi un număr întreg de unităŃi de alocare sub forma unei partiŃii. Există
două metode clasice pentru evidenŃa unităŃilor de alocare a memoriei: (v. fig.)
 cu hartă de biŃi
 cu listă înlănŃuită, având ca variante lista dublu înlănŃuită şi liste înlănŃuite separate pentru zonele
libere şi pentru cele ocupate.
 În cazul evidenŃei cu hartă de biŃi eliberarea unei unităŃi de alocare este tradusă în
înlocuirea cu 0 a poziŃiei corespunzătoare acesteia în harta de biŃi. Alocarea se face
căutând o zonă de dimensiune suficientă reprezentată de un număr corespunzător de
valori 0 succesive în harta de biŃi.
 La utilizarea listelor înlănŃuite, eliberarea unei partiŃii presupune modificarea indicatorului
de stare din lista înlănŃuită şi, dacă este posibil, compactarea zonelor adiacente evidenŃiate
prin intrări succesive în lista înlănŃuită care au identificatorul de stare “liber”. Pentru alocare
se caută un spaŃiu cu indicatorul “liber” de dimensiune suficientă, se împarte în spaŃiu
ocupat şi eventual un spaŃiu liber rămas şi se înlocuieşte, în lista înlănŃuită, intrarea
corespunzătoare acestuia cu intrări corespunzătoare noilor spaŃii formate.
1 1 1 1 0 0 0 1
Harta de biŃi
A 1 1 0 0 1 1 1 0

A 0 4 L 4 3 B 7 3
B

L 10 2 C 12 3 L 15 1
C

Lista înlănŃuită

ConfiguraŃia unei zone


de memorie EvidenŃa memoriei
Alocarea/eliberarea zonelor de memorie
 Alocarea partiŃiilor este realizată pe baza unor algoritmi creaŃi
astfel încât să se realizeze o utilizare eficientă a memoriei şi să
fie servite în mod echitabil solicitările proceselor.
 În cazul partiŃiilor fixe există varianta de organizare de şiruri de
aşteptare pentru fiecare partiŃie funcŃie de dimensiunea partiŃiei
şi de cea a solicitării.
 Aceasta poate conduce la situaŃii în care unele partiŃii sunt
nefolosite pe când altele au liste de aşteptare de dimensiuni
mari, chiar dacă procese din aceste liste ar putea folosi memorie
aflată în partiŃiile nefolosite.
 O soluŃie este organizarea unui şir unic de aşteptare şi alocarea
partiŃiilor libere către procesele cu solicitări care se încadrează în
dimensiunea fiecărei zone libere. Mai mult, procesele aflate în
lista de aşteptare pot avea priorităŃi diferite, alocarea facându-se
funcŃie de acestea.
 Problema care poate să apară aici este cea a fenomenului de
“înfometare” a proceselor cu priorităŃi scăzute.
 SoluŃia constă în a impune ca nici un proces să nu fie omis de la
servire de mai mult de un număr prestabilit de ori.
Alocarea/eliberarea zonelor de memorie
 În cazul partiŃiilor cu dimensiuni variabile se utilizează unul din algoritmii: first
fit, next fit, best fit, worst fit, quick fit.
 Algoritmul first fit parcurge structura cu evidenŃa a spaŃiilor libere şi ocupate şi
alege prima zonă liberă de capacitate superioară celei solicitate. La fiecare
lansare a sa structura este parcursă de la început.
 Spre deosebire de acesta, next fit alege de asemenea prima zonă ce poate
servi solicitarea, dar la fiecare nouă solicitare parcurge structura de date de
evidenŃă din poziŃia de după ultima alocare.
 Algoritmul best fit parcurge întreaga structură şi alege zona cu dimensiunea
cea mai apropiată de cea a solicitării, caz în care în urma alocării rămâne un
reziduu de dimensiune mică ce nu mai poate fi, în general, utilizat (fragmentare
externă).
 O soluŃie a acestei probleme este dată de algoritmul worst fit care, parcurgând
întrega structură, alege zona libera la care după alocare va rămâne un rezduu
maxim, deci utilizabil pentru o altă alocare.
 Quick fit permite găsirea mai rapidă a spaŃiilor de dimensiunea necesară, prin
evidenŃa în liste diferite a zonelor de alocare cu dimensiunile solicitate cel mai
uzual.
 Se poate utiliza metoda înjumătăŃirii (Buddy system) care crează dinamic
partiŃii cu dimensiuni egale cu puterile lui 2. Această metodă rezolvă atât
problema evidenŃei partiŃiilor cât şi pe cea a alocării, în mod performant.
 De cele mai multe ori la apariŃia unei solicitări de alocare nu există memorie
disponibilă suficientă. De aceea sistemul de operare trebuie să elibereze o zonă
de memorie, iar alegerea acesteia se face, de asemenea, pe baza unui
algoritm.
Memoria virtuala
 Memoria virtuală este o facilitate asigurată de sistemul de operare, prin care
programatorii pot folosi adrese dintr-un spaŃiu de adresare corespunzător câmpului de
adresă din instrucŃiuni, fără a fi preocupaŃi de capacitatea memoriei fizice instalată pe
calculator.
 Implementarea conceptului de memorie virtuală oferă programelor o modalitate de a utiliza
un spaŃiu de memorie fizic pentru a accesa un spaŃiu de memorie virtual.
 Conceptul de memorie virtuală se defineşte ca abstractizare ce oferă un model de
memorie diferit de memoria fizică, în care fiecare proces are la dispoziŃie un spaŃiu de
memorie protejat de dimensiune egală cu cea necesară procesului respectiv, tehnic egală
cu spaŃiul adresabil.
 Memoria virtuală a apărut ca răspuns la necesitatea de a elibera programatorul de
operaŃii de gestiune a memoriei. Sistemul de operare a preluat operaŃiilor de gestionare
a transferurilor între memoria principală şi memoria secundară necesare pentru
programele de dimensiuni mai mari decât spaŃiul de memorie internă (fizică) disponibil.
 În plus, la sistemele cu multiprogramare, se permite eliberarea memoriei ocupate de un
proces blocat, transferând imaginea sa memorie (cod + date + stivă) pe disc.
 Ideea care stă la baza implementării conceptului de memorie virtuală este separarea a
două concepte: spaŃiu de adresare în care informaŃia este identificată prin adrese
virtuale (av) generate de procese şi locaŃii fizice de memorie, aflate în memoria fizică,
unde informaŃia este identificată prin adrese fizice (af). Adresele generate de procese sunt
obŃinute prin adresare de orice tip.
 Suprapunerea spaŃiului virtual peste cel fizic se face utilizând o funcŃie numită harta
memoriei şi definită ca:
h : spaŃiul virtual → spaŃiul fizic
af = h(av).
 Datorită specificului aleator de lansare procese şi alocare memorie pentru acestea, funcŃia
este implementată în manieră tabelară.
Modele de memorie
 Există două modele de bază pentru organizarea spaŃiului virtual.
 Modelul unidimensional al memoriei virtual oferă un spaŃiu de memorie virtual liniar continuu, de la
adresa 0 la o adresă maximă conformă cu dimensiunea câmpului de adresă al instrucŃiunii. În acest caz
adresa virtuală are o singură componentă, necesară localizării informaŃiei în acest spaŃiu unidimensional,
adică av=adr(c1) unde c1 identifică localizarea informaŃiei în spatiu.

Memorie
C1 virtuală

uni-
dimensională

MAX

 Modelul bidimensional oferă o memorie virtuală formată din mai multe spaŃii unidimensionale liniare
independente. InformaŃiile sunt identificate în acest spaŃiu cu adrese formate din două componente,
adică av=adr(c1,c2). Componenta c1 identifică unul din spaŃiile unidimensionale, iar componenta c2
identifică localizarea informaŃiei în acesta.
0 0 0
spaŃiu spaŃiu
spaŃiu . . .
C1 uni- uni-
uni- dimensional dimensional
dimensional MAX2

MAX2
. MAX1

C2
BIBLIOGRAFIE
 Cristina Mindruta, Sisteme de operare –
suport de curs, www.univ-ovidius.ro/math

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