Sunteți pe pagina 1din 9

Capitolul 9: Gestionarea Memoriei Introducere

 Introducere  Programul trebuie să fie adusă în memorie şi plasat într-un


 Swapping proces pentru a putea fi rulat.

 Alocarea continuă
 Coada de intrare (Input queue) – colecţie de procese aflate pe
 Paginarea disc care aşteaptă să fie aduse în memorie pentru a rula
 Segmentarea programul.
 Segmentare cu paginare
 Programele utilizator trec prin mai mulţi paşi înainte de a fi rulate.

Operating System Concepts with Java 9.1 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.2 Silberschatz, Galvin and Gagne ©2003

Legarea instrucţiunilor şi a datelor în memorie Fazele procesării unui program utilizator

Legarea instrucţiunilor şi a datelor la adrese de memorie poate avea loc


la trei etape diferite.

 La compilare: Dacă locaţia de memorie este cunoscută


apriori, se poate genera cod absolut; trebuie recompilat în
cazul schimbării locaţiei de start.
 La încărcare: Dacă locaţia de memorie nu este
cunoscută la compilare atunci trebuie generat cod
relocatabil.
 La execuţie: Legarea este amânată până la execuţie
dacă procesul poate fi mutat în timpul execuţiei dintr-un
segment de memorie în altul. Necesită suport hardware
pentru maparea adreselor (ex., regiştri de bază şi limită).

Operating System Concepts with Java 9.3 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.4 Silberschatz, Galvin and Gagne ©2003

Spaţiul de adrese logice vs. fizice Unitatea de Gestionare a Memoriei (MMU)


 Conceptul de spaţiu de adrese logice care este legat la un spaţiu  Dispozitiv hardware care mapează adresele virtuale la adrese
separat de adrese fizice este esenţial pentru o gestionare fizice.
corespunzătoare a memoriei.
 Adresă logică – generat de CPU; referit deasemenea ca şi adresă  În schema MMU, valoarea în registrul de relocare este adăugată
virtuală. la fiecare adresă generată de un proces utilizator în momentul în
 Adresă fizică – adresa văzută de unitatea de memorie. care este trimisă memoriei.

 Adresele logice şi cele fizice sunt aceleaşi în schemele de legare  Programul utilizator foloseşte adrese logice; acesta nu va vedea
a adreselor la compilare şi la încărcare; adresele logice (virtuale) niciodată adresa fizică reală.
şi fizice diferă în schema de legare la execuţie.

Operating System Concepts with Java 9.5 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.6 Silberschatz, Galvin and Gagne ©2003

1
Relocarea dinamică folosind un registru de
relocare Încărcarea dinamică
 Rutina nu este încărcată până când este apelată
 O mai bună utilizare a spaţiului de memorie; rutinele nefolosite
nu sunt încărcate niciodată.
 Folositoare când cantităţi mari de cod sunt necesare pentru a
trata cazuri cu apariţii rare.
 Nu necesită suport special din partea sistemului de operare, fiind
implementat prin designul programului.

Operating System Concepts with Java 9.7 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.8 Silberschatz, Galvin and Gagne ©2003

Legarea dinamică Overlay-uri


 Legarea amânată până la execuţie.  Păstrarea în memorie doar a acelor instrucţiuni şi date care sunt
 Se foloseşte un fragment de cod, stub, pentru localizarea rutinei necesare în oricare moment dat.
corespunzătoare din librăria aflată în memorie.
 Stub-ul se auto-înlocuieşte cu adresa rutinei şi execută rutina.  Necesar când un proces este mai mare decât cantitatea de
memorie alocată acestuia.
 Sistemul de operare trebuie să verifice dacă rutina este în spaţiul
de adresare a procesului.
 Implementat de utilizator, nu este necesar nici un suport special
 Legarea dinamică este îndeosebi folositoare pentru librării. din partea sistemului de operare, designul structurii de overlaz-
uri este complexă.

Operating System Concepts with Java 9.9 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.10 Silberschatz, Galvin and Gagne ©2003

Overlay-uri pentru un asamblor cu doi paşi Swapping


 Un proces poate fi eliminat temporar din memorie pe un mediu de
stocare secundar şi adus înapoi în memorie pentru continuarea
execuţiei.

 Mediul de stocare secundar – disc rapid destul de mare pentru a putea


stoca copii ale tuturor imaginilor de memorie pentru toţi utilizatorii;
trebuie să ofere acces direct la aceste imagini de memorie.

 Roll out, roll in – variantă de swapping folosită pentru algoritmi de


planificare bazate pe prioritate; procesul de prioritate scăzută este
eliminat astfel încât un proces de prioritate mai mare să poată fi încărcat
şi executat.

 Majoritatea timpului de swap este timpul de transfer; timpul total de


transfer este direct proporţional cu cantitatea de memorie transferată
(schimbată).

 Versiuni modificate de swapping sunt folosite de multe sisteme (i.e.,


UNIX, Linux, and Windows).

Operating System Concepts with Java 9.11 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.12 Silberschatz, Galvin and Gagne ©2003

2
Vedere schematică a Swapping-ului Alocarea contiguă
 Memoria principală este împărţită de obicei în două partiţii:
 Sistemul de operare rezident, de obicei aflat în partea de jos
împreună cu vectorul de întrerupere.
 Procesele utilizator aflate în memoria înaltă.

 Alocarea într-o singură partiţie


 Schemă de registru de relocare folosit pentru protejarea proceselor
utilizator unele de altele şi de la schimbarea codului şi datelor
sistemului de operare.
 Registrul de relocare conţine valoarea celei mai mici adrese fizice;
registrul limită conţine intervale de adrese logice – fiecare adresă
logică trebuie să fie mai mică decât registrul limită.

Operating System Concepts with Java 9.13 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.14 Silberschatz, Galvin and Gagne ©2003

Suport hardware pentru relocare şi regiştri limită


Alocarea contiguă (Cont.)
 Alocarea cu partiţii multiple
 Bloc liber (Hole) – bloc de memorie disponibilă; blocuri libere de
diverse dimensiuni sunt răspândite prin memorie.
 Când apare un proces, ii este alocată memorie dintr-un bloc liber
destul de mare ca să satisfacă cererea.
 Sistemul de operare menţine informaţii despre:
a) partiţiile alocate
b) partiţiile libere (găuri)

OS OS OS OS

process 5 process 5 process 5 process 5


process 9 process 9

process 8 process 10

process 2 process 2 process 2 process 2

Operating System Concepts with Java 9.15 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.16 Silberschatz, Galvin and Gagne ©2003

Problema alocării dinamice a memoriei Fragmentarea


 Fragmentare externă – există spaţiu de memorie total pentru a
satisface cererea, dar nu este contiguă.
Cum să satisfaci o cerere de dimensiune n dintr-o listă de găuri libere.
 Fragmentare internă – memoria alocată poate fi puţin mai mare
 First-fit: Alocă primul bloc liber care este destul de mare. decât memoria cerută; această diferenţă de dimensiune este
internă unei partiţii, dar nu este folosită.
 Best-fit: Alocă cel mai mic bloc care este destul de mare;
trebuie căutată întreaga listă, cu excepţia cazului în care lista  Fragmentarea externă se poate reduce prin compactare
este ordonată după dimensiune. Produce cel mai mic bloc  Rearanjează conţinutul memoriei astfel încât se plasează toată
rămas. memoria liberă împreună într-un singur bloc mare.
 Worst-fit: Alocă cel mai mare bloc liber; trebuie deasemenea  Compactarea este posibilă doar dacă relocarea este dinamică şi
să caute întreaga listă. Produce cel mai mare bloc rămas. este făcută în timpul execuţiei.
First-fit şi best-fit sunt mai bune decât worst-fit în  Probleme de I/E
termeni de viteză şi utilizarea spaţiului.  Procesul este blocat în memorie cât timp este implicat în I/E.
 Efectuează I/E doar în buffere ale SO.

Operating System Concepts with Java 9.17 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.18 Silberschatz, Galvin and Gagne ©2003

3
Paginarea Schema de translatare a adreselor
 Spaţiul de adrese logice ale unui proces poate fi necontinuu;  Adresa generată de CPU este împărţită în:
procesului îi este alocată memorie fizică când acesta din urmă  Număr de pagină (p) – folosit ca şi index într-o tabelă de pagini care
devine disponibilă. conţine adresa de bază a fiecărei pagini din memoria fizică.
 Divide memoria fizică în blocuri de dimensiune fixă numite cadre
(dimensiunea este putere a lui 2, între 512 şi 8192 octeţi).  Offset de pagină (d) – combinat cu adresa de bază pentru a defini
adresa fizică de memorie care este trimisă unităţii de memorie.
 Divide memoria logică în blocuri de aceeaşi dimensiune numite
pagini.
 Gestionează toate cadrele libere.
 Pentru a rula un program de dimensiune n pagini, trebuie să
găsim n cadre libere şi să încărcăm programul.
 Se pregăteşte o tabelă de pagini pentru translatarea adreselor
logice la cele fizice.
 Fragmentare internă.

Operating System Concepts with Java 9.19 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.20 Silberschatz, Galvin and Gagne ©2003

Arhitectura de translatare a adreselor Exemplu de paginare

Operating System Concepts with Java 9.21 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.22 Silberschatz, Galvin and Gagne ©2003

Exemplu de paginare Cadre libere

Înainte de alocare După alocare

Operating System Concepts with Java 9.23 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.24 Silberschatz, Galvin and Gagne ©2003

4
Implementarea tabelei de paginare Memoria asociativă
 Tabela de pagini este ţinută în memoria principală.  Memoria asociativă – căutare paralelă
 Registrul bază tabela pagini (Page-table base register (PTBR)) Page # Frame #
indică la tabela de pagini.
 Registrul lungime tabela pagini (Page-table length register
(PRLR)) indică dimensiunea tabelei de pagini.
 În această schemă fiecare acces la date/instrucţiune necesită
două accese la memorie. Una pentru tabela de pagini şi una
pentru date/instrucţiune. Translatarea adresei (A´, A´´)
 Problema dublei accesări a memoriei poate fi rezolvată prin  Dacă A´ este într-un registru asociativ, prezintă cadrul #.
folosirea unei componente cache hardware speciale pentru  Altfel adu cadrul # din tabela de pagini în memorie
regăsire rapidă numite associative memory sau translation look-
aside buffers (TLBs)

Operating System Concepts with Java 9.25 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.26 Silberschatz, Galvin and Gagne ©2003

Hardware de paginare cu TLB Timpul de acces efectiv


 Regăsirea asociativă =  unitate de timp
 Presupunem că ciclul de memorie este de 1 microsecundă
 Hit ratio – procentul de câte ori un număr de pagină este găsit în
regiştri asociativi; rată legată de numărul de regiştri asociativi.
 Hit ratio = 
 Effective Access Time (EAT)
EAT = (1 + )  + (2 + )(1 – )
=2+–

Operating System Concepts with Java 9.27 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.28 Silberschatz, Galvin and Gagne ©2003

Bit Valid (v) sau Invalid (i) într-o tabelă de


Protejarea memoriei paginare
 Protecţia memoriei este implementată prin asocierea unui bit de
protecţie cu fiecare cadru.

 Bit valid-invalid ataşat fiecărei intrări în tabela de pagini:


 “valid” indică faptul că pagina asociată este în spaţiul de adrese
logice al procesului şi deci este o pagină legală.
 “invalid” indică faptul că pagina nu este în spaţiul de adrese logice al
procesului.

Operating System Concepts with Java 9.29 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.30 Silberschatz, Galvin and Gagne ©2003

5
Structura tabelei de paginare Tabele de paginare ierarhice
 Paginare ierarhică  Împarte spaţiul de adrese logice în multiple tabele de paginare.

 Tabele de paginare hash  O tehnică simplă este o tabelă de paginare pe două nivele.

 Tabele de paginare inversate

Operating System Concepts with Java 9.31 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.32 Silberschatz, Galvin and Gagne ©2003

Exemplu de paginare pe două nivele Schema tabelei de paginare pe două nivele

 O adresă logică (pe maşini de 32-biţi cu pagini de 4K) este


împărţită în:
 un număr de pagină din 20 biţi.
 un offset de pagină din 12 biţi.
 Deoarece tabela de paginare este paginată, numărul de pagină
este împărţit mai departe în:
 un număr de pagină de 10-biţi.
 un offset de pagină de 10-biţi.
 Astfel o adresă logică se compune din:
page number page offset
pi p2 d

10 10 12

unde pi este un index în tabela externă de paginare şi p2 este


offset-ul în cadrul paginii a tabelei externe de paginare.

Operating System Concepts with Java 9.33 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.34 Silberschatz, Galvin and Gagne ©2003

Schema de translatare a adreselor Tabela de paginare hash


 Schema de translatare a adresei pentru o arhitectură de  Comună în spaţii de adrese > 32 biţi.
paginare pe 32-biţi pe două nivele

 Numărul virtual de pagină este hash-uit intr-o tabelă de pagini.


Această tabelă de pagini conţine un lanţ de elemente hash-uite
la aceeaşi locaţie.

 Numerele virtuale de pagină sunt comparate în acest lanţ pentru


o potrivire. Dacă se găseşte o potrivire atunci cadrul fizic
corespunzător este extras.

Operating System Concepts with Java 9.35 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.36 Silberschatz, Galvin and Gagne ©2003

6
Tabela de paginare hash Tabela de paginare inversată
 O intrare pentru fiecare pagină reală de memorie.
 Intrarea constă din adresa virtuală a paginii stocate la acea
locaţie reală de memorie, cu informaţie despre procesul care
deţine acea pagină.
 Scade memoria necesară pentru stocarea fiecărei tabele de
pagini, dar creşte timpul necesar pentru căutarea tabelei când
apare o referire la o pagină.
 Folosirea unei tabele hash poate reduce căutarea la una sau cel
mult câteva intrări de tabelă.

Operating System Concepts with Java 9.37 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.38 Silberschatz, Galvin and Gagne ©2003

Arhitectura tabelei de paginare inversate Pagini partajate


 Cod partajat
 O copie de cod read-only (reentrant) partajată între procese (ex.,
editoare de text, compilatoare, sisteme de ferestre).
 Codul partajat trebuie să apară în aceeaşi locaţie în spaţiul de
adrese logice al tuturor proceselor.

 Cod şi date private


 Fiecare proces menţine o copie separată a codului şi a datelor.
 Paginile codului si datelor private pot apărea oriunde în spaţiul logic
de adrese.

Operating System Concepts with Java 9.39 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.40 Silberschatz, Galvin and Gagne ©2003

Exemplu pagini partajate Segmentarea


 Schemă de gestionare a memoriei care suportă vederea
utilizator asupra memoriei.
 Un program este o colecţie de segmente. Un segment este o
unitate logică ca de exemplu:
program principal,
procedură,
funcţie,
metodă,
obiect,
variabile locale, variabile globale,
bloc comun,
stiva,
tabela de simboluri, tablouri

Operating System Concepts with Java 9.41 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.42 Silberschatz, Galvin and Gagne ©2003

7
Vederea utilizator despre un proram Vederea logică a segmentării

4
1

3 2
4

spaţiul utilizator spaţiul memoriei fizice

Operating System Concepts with Java 9.43 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.44 Silberschatz, Galvin and Gagne ©2003

Arhitectura de segmentare Arhitectura de segmentare (Cont.)


 Adresa logică constă dintr-un tuplu cu două elemente:  Relocarea.
<număr-segment, offset>,  dinamică

 Tabela segment – mapează adrese fizice bi-dimensionale;  prin tabela segment


fiecare intrare în tabelă are:
 bază – conţine adresa fizică de start unde segmentele rezidă în  Partajare.
memorie.  segmente partajate
 limita – specifică lungimea segmentului.  acelaşi număr de segment
 Registrul bază tabela segment (Segment-table base register
(STBR)) indică la locaţia tabelei segment în memorie.  Alocare.
 Registrul lungime tabela segment (Segment-table length register  first fit/best fit
(STLR)) indică numărul de segmente folosite de un program;  fragmentare externă
numărul de segment s este legal dacă s < STLR.

Operating System Concepts with Java 9.45 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.46 Silberschatz, Galvin and Gagne ©2003

Arhitectura de segmentare (Cont.) Hardware de segmentare


 Protecţia. Cu fiecare intrare în tabela de segmente se asociază:
 Bit de validare = 0  segment ilegal
 Privilegii de read/write/execute
 Biţi de protecţie asociaţi cu segmentele; partajarea codului apare
la nivel de segment.
 Deoarece segmentele variază în lungime, alocarea memoriei
este o problemă de alocare dinamică a memoriei.
 Un exemplu de segmentare este discutat în următoarea
diagramă

Operating System Concepts with Java 9.47 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.48 Silberschatz, Galvin and Gagne ©2003

8
Exemplu de segmentare Partajarea segmentelor

Operating System Concepts with Java 9.49 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.50 Silberschatz, Galvin and Gagne ©2003

Segmentare cu paginare – MULTICS MULTICS Schema de translatare a adreselor

 Sistemul MULTICS a rezolvat problema fragmentării externe şi a


timpilor mari de căutare prin paginarea segmentelor.

 Soluţia diferă de segmentarea pură în aceea că intrarea în tabela


de segmente conţine nu adresa de bază a segmentului ci adresa
de bază a tabelei de pagini pentru acest segment.

Operating System Concepts with Java 9.51 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.52 Silberschatz, Galvin and Gagne ©2003

Segmentare cu paginare – Intel 386 Intel 30386 Translatarea adreselor

 Asa cum este arătat în următoarea diagramă, procesorul Intel


386 foloseşte segmentare cu paginare pentru gestionarea
memoriei cu o schemă de paginare pe două nivele.

Operating System Concepts with Java 9.53 Silberschatz, Galvin and Gagne ©2003 Operating System Concepts with Java 9.54 Silberschatz, Galvin and Gagne ©2003

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