Sunteți pe pagina 1din 14

Sisteme de Operare

Curs nr. 8
4.2. Scheme de alocare a memoriei
Tehnicile de alocare a memoriei utilizate la diferite sisteme de operare se mpart
n:
1) alocare real:
- la sistemele monoutilizator;
- la sistemele multiutilizator:
- cu partiii fixe (static):
- absolut;
- relocabil;
- cu partiii variabile (dinamic)
2) alocare virtual:
- paginat;
- segmentat;
- segmentat i paginat,
4.2.1.1. Alocarea la sistemele monoutilizator:
La sistemele monoutilizator este disponibil aproape ntreg spaiul de memorie.
Gestiunea spaiului cade n sarcina utilizatorului, existnd tehnici de suprapunere
(overlay) pentru a-i putea rula programele mari:
0
Nucleu SO

Program utilizator

a
Parte
rezident
b

b
Zona de
suprapunere

Init

Prelucrri
curente

Terminare

c
m

Nefolosit

Fig. 4.2.1. Alocarea memoriei la un sistem monoutilizator folosind suprapunerea

Aceast tehnic presupune pstrarea n memorie a instruciunilor i datelor


necesare la un moment dat. Cnd este nevoie de alte instruciuni acestea sunt ncrcate
n memorie n locul celor de care nu mai este nevoie:
- zona dintre adresele 0 i a-1 este rezervat nucleului sistemului de operare ce
rmne acolo de la ncrcare i pn la oprirea sistemului. ntre c i m-1 este spaiul
nefolosit de ctre programul utilizator activ (dac memoria are m locaii). Adresa c
variaz de la un program utilizator la altul.

Sisteme de Operare
4.2.1.2. Alocarea cu partiii fixe:
Aceast alocare se mai numete i alocare static sau alocare MFT Memory Fix
Task. Acest lucru presupune decuparea memoriei n zone de lungime fix numite
partiii. O partiie este alocat unui proces pe toat durata execuiei lui, indiferent
dac o ocup complet sau nu ca n figura de mai jos:
0
40

Nucelul SO
Program1

Partiia 1

86
130

limit
Program2

Partiia 2

168

CPU

190
Program3
250

baz

<

DA

memorie

NU
Partiia 3

Eroare de adresare

255
Fig. 4.2.2. Alocarea memoriei cu partiii fixe

Fig. 4.2.3. Adresarea cu registru baz

Alocarea absolut: se face pentru programe pregtite de editorul de legturi


pentru a fi rulate ntr-o zon de memorie i numai acolo.
Alocarea relocabil este mult mai folosit: adresarea n partiie se face cu
baz i deplasament: la ncrcarea n memorie a programului, n registrul lui de baz
se pune adresa de nceput a partiiei.
La sistemele multiprogramate dac un proces este plasat pentru execuie ntr-o
partiie insuficient, el este eliminat din sistem fr a fi executat.
De obicei, partiiile au lungimi diferite. Una dintre problemele cele mai
dificile este fixarea acestor dimensiuni, deoarece nu se pot prevedea cantitile de
memorie pe care le vor solicita procesele ncrcate n aceste partiii. Alegerea unor
partiii de dimensiuni mari scade probabilitatea ca unele procese s nu poat fi
executate, dar i numrul de procese active din sistem.
La fiecare partiie exist un ir de procese care ateapt s fie executate, iar
modul n care este organizat sistemul de ateptare poate influena performanele de
ansamblu ale sistemului de calcul i poate atenua efectul unei dimensionri
defectuoase a partiiilor.
Legarea proceselor de partiii se face n dou moduri:
- fiecare partiie are o coad proprie: este o metod mai simpl din punctul
de vedere al sistemului de operare (se ntlnete la primele sisteme
monoutilizator IBM OS/MFT).
- o singur coad pentru toate partiiile: se poate alege partiia cea mai
potrivit pentru plasarea unui proces.

Sisteme de Operare

b)

a)

Fig. 4.2.4. Legarea proceselor la partiii: a) o coad pentru fiecare partiie; b) o coad pentru toate partiiile

4.2.1.3. Alocarea cu partiii variabile


Aceast alocare se mai numete i alocare dinamic sau alocare MVT
Memory Variable Task (era folosit la PDP11). Este o extensie a alocrii cu partiii
fixe i permite o exploatare mai eficient a memoriei sistemului de calcul: n funcie
de solicitri i de capacitatea memoriei rmas disponibil la un moment dat,
numrul i dimensiunea partiiilor se modific automat.
Program2
FINISH
0
40

SO

0
40

Program1
100

Program4
READY
SO

40

Program1
100

SO

100
Program4

Program4
180

200

200

200
Program3

Program3

Program3

SO

100

180

180
200

40

Program5

Program4

Program3

SO

40

Program5
READY
0

Program1
100

Program2
200

Program1
FINISH
0

Program3

230

230

230

230

230

255

255

255

255

255

Fig. 4.2.5. Alocarea memoriei cu partiii variabile

La intrarea n sistem, procesele sunt plasate n memorie ntr-un spaiu n care


ncape cea mai lung ramur a sa. Spaiul liber n care a intrat procesul se mparte n
dou partiii: una n care este procesul i una liber. Dac sistemul funcioneaz un
timp ndelungat se ajunge la situaia n care numrul spaiilor libere va crete, iar

Sisteme de Operare
dimensiunea lor va scdea. Acest fenomen se mai numete i fragmentarea intern a
memoriei.
Dac un proces nu are spaiu s se ncarce n memorie, sistemul de operare
poate lua urmtoarele decizii:
- procesul ateapt pn se elibereaz o cantitate suficient de memorie;
- sistemul de operare ncearc alipirea unor spaii de memorie libere vecine,
pentru a obine un spaiu de memorie liber suficient de mare pentru ncrcarea
programului;
- sistemul de operare decide efectuarea unei operaii de compactare a
memoriei (relocare) deplasarea partiiilor active ctre partiia monitor (unde se afl
partea rezident a SO) pentru a se absorbi toate fragmentele de memorie neutilizate.
2ko
Program1
3ko
4ko
Program2
2ko

Program1
3ko
Program2
2ko
Program3
5ko

Program1
3ko
Program2
2ko

Program2
2ko
Program1
3ko

11ko

11ko

Program3
5ko

Program3
5ko

6ko

6ko

5ko
Program3
5ko
6ko

17ko

Fig. 4.2.6. Posibiliti de compactare a memoriei

Compactarea memoriei este, de regul, o operaie costisitoare i n practic se


aleg soluii de compromis:
- se lanseaz periodic compactarea, indiferent de starea sistemului. Procesele care
nu au loc n memorie ateapt compactarea sau terminarea altui proces;
- se realizeaz o compactare parial pentru a asigura loc numai procesului care
ateapt;
- se ncearc numai mutarea unora dintre procese i se colecioneaz spaiile libere
rmase.
4.2.1.4. Alocarea paginat a memoriei
Paginarea este o metod care rezolv problema fragmentrii: memoria alocat
unui program nu este contigu, adic programul poate fi ncrcat n memorie acolo
unde exist memorie disponibil.
Aceast alocare presupune:
- instruciunile i datele fiecrui program sunt mprite n zone de lungime
fix, numite pagini virtuale. Fiecare adres relocabil (AR) aparine unei pagini
virtuale. Paginile virtuale se pstreaz n memoria secundar.
- memoria operativ este mprit n zone de lungime fix, numite pagini
fizice sau cadre. Lungimea unei pagini fizice este fixat prin hard. Paginile
virtuale i cele reale au aceeai lungime (o putere a lui 2) i reprezint o constant
a sistemului (de exemplu: 1Ko, 2Ko etc).

Sisteme de Operare
- fiecare AR este o pereche de forma (p, d) unde p este numrul paginii i d
este adresa n cadrul paginii (deplasarea n pagin).
- fiecare AF (adres fizic) este o pereche de forma (f, d) unde f este numrul
paginii fizice i d este adresa n cadrul paginii.
- calculul funciei de translare se face prin hardware.
adresa
fizic

adresa
virtual
CPU

p d

p
f

Memorie fizic

Tabel de pagini

Fig. 4.2.7. Translatarea unei pagini virtuale ntr-o pagin fizic

Exemplu:
pagina 0
pagina 1
Memorie logic

0
1

2
0

Tabel de pagini

0 pagina 1
1
2 pagina 0
Memorie fizic

cadrul 0

Pag.0

Pag.1

0
1
2
3
4
5
6
7

A
B
C
D
E
F
G
H

Memorie logic

cadrul 1

0
1

2
0

cadrul 2

Tabel de pagini
cadrul 3

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

E
F
G
H

A
B
C
D

Memorie fizic

Pentru adresa logic 2 (pagina 0 deplasarea 2) avem adresa fizic 10 (=2x4+2)


adic: adresa fizic = cadrul x dimensiunea paginii + deplasament.
Pentru adresa logic 6 nseamn pagina 1, deplasare 2. Pagina 1 este memorat
n cadrul 0, deci adresa logic 6 corespunde adresei fizice 2 (=0x4+2).
Fiecare proces are propria lui tabel de pagini, n care este trecut adresa fizic
a paginii virtuale, dac ea este prezent n memoria operativ. La ncrcarea unei noi

Sisteme de Operare
pagini virtuale, aceasta se depune ntr-o pagin fizic liber i n acest fel are loc o
proiectare a spaiului virtual peste cel real ca n figura de mai jos:
Program 1
PR2 pag 0

Pag 0
Pag 1 Pag 2 Pag 3

PR1 pag 3
PR2 pag 4
PR2 pag 1

Program 2
Pag 0
Pag 1
Pag 2 Pag 3 Pag 4

PR1 pag 0

Fig. 4.2.8. Dou programe ntr-o alocare pe pagini

Astfel, se folosete mai eficient memoria operativ. Un alt avantaj este acela al
folosirii n comun a instruciunilor unor proceduri de ctre mai multe programe. O
procedur care permite acest mod de lucru se numete procedur reentrant.
Presupunem c avem un editor de texte al crui cod reentrant (instruciuni pure
fr date) ocup dou pagini. Dac am avea trei utilizatori, fiecare consumnd cte o
pagin pentru datele proprii, am avea n total nou pagini din memoria operativ.
Program 1
Cod 1
Cod 2
Date 1

5
2
3

Program 2
Cod 1
Cod 2
Date 2

5
2
4

0
1
2
3
4
5
6
7

Cod 2
Date 1
Date 2
Cod 1
Date 3

Cod 1
Cod 2
Date 3

5
2
7

Pagini
virtuale

Tabele
de pagini

Program 3

Fig. 4.2.9. Procedur reentrant alocat cu pagininare

Sisteme de Operare
Implementarea tabelei de pagin
Dac dimensiunea tabelei de pagin este redus se poate utiliza un set de registre
specializate, foarte rapide, care s asigure o eficien ridicat a translrii adreselor.
Instruciunile destinate ncrcrii sau modificrii acestor registre trebuie accesate
numai de ctre sistemul de operare.
Dac dimensiunea tabelei este mare, este preferabil ca ea s fie pstrat n
memoria principal, ntr-o zon indicat de valoarea unui registru specializat numit
registrul de baz al tabelei de pagin (RBTP). Dac trebuie s se lucreze cu o alt
tabel de pagin dect cea curent trebuie rencrcat registrul cu o alt valoare
scznd astfel timpul de schimbare al contextului. O particularitate a acestei soluii
este faptul c pentru a accesa o zon de memorie utilizator sunt necesare dou operaii
de acces la memorie una pentru tabela de pagin i alta pentru cuvntul propriu-zis.
Folosind valoarea din RBTP deplasat cu numrul de pagin - p (aflat n adresa
logic), se determin mai nti numrul de cadru c asociat paginii, care mpreun cu
deplasamentul n pagin d d adresa real.
O alt soluie ar fi folosirea unei memorii hardware speciale (un set de registre
asociative sau translation look-aside buffer), de mic dimensiune, cu urmtoarele
caracteristici: fiecare registru are dou pri, cheie (conine numrul paginii) i
valoare (numrul cadrului).
adresa
virtual
CPU

p d

numrul
paginii

numrul
cadrului
TLB hit

adresa
fizic

TLB (translation look-aside


buffer)

Memorie fizic

p
TLB miss

Tabel de pagini
Fig. 4.2.10. Translarea paginii folosind TLB

Cnd este generat o adres logic , dac numrul de pagin coincide cu una din
chei (din TLB), numrul de cadru este disponibil imediat i este folosit pentru
accesarea memoriei. Dac numrul paginii nu coincide cu nici una dintre chei, trebuie
efectuat un acces la tabela de partiii aflat n memoria intern. Informaia va fi
folosit att pentru accesarea datelor din memorie, ct i pentru adugarea ei n TLB
pentru a putea fi folosit ulterior.

Sisteme de Operare
Paginarea multinivel:
Sistemele de calcul suport un spaiu logic de adresare foarte mare (232 sau
264) i din acest motiv tabela de pagini trebuie s fie foarte mare. Pentru un sistem cu
spaiul logic de adresare pe 32 de bii , dac avem mrimea paginii de 4K bytes (212),
atunci numrul de intrri n tabela de pagini ar trebui s fie de peste 1 milion (232 / 212
= 220=1048576). Deoarece fiecare intrare const n 4 bytes, fiecare proces poate avea
nevoie de 4 Mbytes de spaiu de adresare pentru tabela de pagini. Este aproape
imposibil s alocm tabela de pagini ntr-o zon contigu de memorie.
Soluia pentru rezolvarea acestei probleme este paginarea multinivel: adresa
logic o putem mpri n numrul de pagin de 20 bii i deplasamentul n pagin de
12 bii. Deoarece vrem s paginm tabela de pagini, putem mpri numrul paginii n
dou pri: ca n figura de mai jos:
Numrul paginii
p1
p2
10

12

unde p1 este index n tabela de pagini


extern, p2 este deplasamentul n aceast tabel i d
este deplasamentul n pagina de memorie.
pagina 0

pagina 1

500

pagina 100

100
tabela extern

pagina 500

700

pagina 700

920

pagina 900

900

pagina 920

tabela de pagini

10

deplasament
d

adresa logic
p1 p2 d

memorie
p1
p2
Tabela extern

d
tabela de pagini
Memorie fizic

Fig. 4.2.11. Translarea adresei n cazul paginrii cu 2 nivele

Sisteme de Operare
4.2.1.5. Alocarea segmentat a memoriei
Mecanismul de alocare segmentat introduce faptul c textul unui program poate
fi plasat n zone de memorie distincte, fiecare zon coninnd o bucat de program
numit segment.
SO

Fiecare segment este caracterizat prin


nume i lungime.
O adres virtual este o pereche (s, d),
unde s este numrul segmentului i d este
deplasamentul n cadrul segmentului.
Acestei perechi i corespunde o adres
fizic, iar corespondena este realizat prin
tabela de segment ce conine un numr de
intrri egal cu numrul de segmente din
program.

Liber 10k
Segment1 7K
Segment2 9K

Liber 10k

Segment3 14K
Liber 16k

Tabela de segment
s
dim

CPU

baz

s d

<

DA

memorie

NU
Eroare de adresare

Fig. 4.2.12. Transformarea adresei virtuale cu ajutorul tabelei de segment

Avantajele fa de alocarea pe partiii:


- se pot crea segmente reentrante ce pot fi folosite de mai multe procese.
- se poate realiza protecia memoriei prin adugarea unor drepturi de acces.
Implementarea tabelei de segment
Soluiile de implementare sunt asemntoare cu cele de la tabela de pagini. O
soluie ar fi utilizarea de registre rapide care s asigure o vitez de acces foarte mare
i efectuarea simultan a operaiilor de comparare a deplasrii cu dimensiunea
segmentului i nsumarea cu adresa de baz a segmentului. Dac programul este
format dintr-un numr mare de segmente este indicat ca aceast tabel s fie pstrat
n memorie. Pentru a putea fi accesat se folosete un registru de baz al tabelei de
segment (RBTS) i, deoarece programele nu au acelai numr de segmente se
folosete, n plus, un registru lungime al tabelei de segment (RLTS). Pentru fiecare
adres logic (s,d), se verific corectitudinea numrului de segment (0<s<RTLS) i

Sisteme de Operare
apoi se nsumeaz numrul segmentului cu RBTS ( coninutul registrului) i se obine
adresa din memorie a tabelei de segment ce va fi citit. Se compar apoi deplasarea cu
dimensiunea segmentului i se calculeaz adresa fizic a cuvntului dorit ca suma
deplasrii i a adresei de baz a segmentului.
O alt soluie ar fi folosirea de registre asociative care s pstreze cele mai
utilizate intrri ale tabelei de segment.
4.2.1.6. Alocarea segmentat i paginat a memoriei
Att la alocarea paginat, ct i la alocarea segmentat poate apare fenomenul de
fragmentare i, uneori, este preferabil combinarea lor. Astfel, alocarea spaiului
pentru fiecare segment se face paginat.
Tabela de pagini
(una la segment)

Memoria real

Tabela de segmente
(una la proces)
Tabela de procese

Fiecare proces are propria lui tabel de segmente. Fiecare segment are propria
lui tabel de pagini. Fiecare intrare n tabela de segmente are un cmp rezervat adresei
de nceput a tabelei de pagini proprii segmentului.
Adresa virtual este de forma (s, p , d), unde s este numrul segmentului, p
este numrul paginii virtuale n cadrul segmentului, iar d este deplasamentul n cadrul
paginii.
Adresa fizic este de forma (f, d), unde f este numrul paginii fizice, iar d este
deplasamentul n cadrul paginii.

Sisteme de Operare
Adres logic
p
d

lungimea
baza
tabelei de tabelei de
pagin
pagin

DA

NU
eroare

tabela de segment
RBTS

poriune a
tabelei de
pagin

memorie

adres
fizic

Fig. 4.2.13. Paginarea segmentelor

Intrarea tabelei de segment nu conine adresa de baz a segmentului, ci adresa


de baz a unei tabele de pagin asociat acestui segment (p). Segmentul este format
dintr-un numr de pagini cu aceeai dimensiune. Deplasarea n cadrul segmentului se
face cu numrul de pagin i deplasare n cadrul paginii. Deoarece ultima pagin a
fiecrui segment nu este ntotdeauna ocupat complet, poate apare o fragmentare
intern , dar totui mai redus fa de celelalte dou metode (paginare i segmentare).
4.3. Memoria virtual
Memoria virtual este o tehnic ce permite execuia proceselor, chiar dac acestea
nu se afl integral n memorie. Un avantaj direct este acela al rulrii unor programe cu
dimensiuni mai mari dect cele ale memoriei fizice.
Pagina 0
Pagina 1
Pagina 2

Pagina n
memoria virtual
hart de memorie
swap

memoria fizic
Fig. 4.3.1. Memoria virtual

Sisteme de Operare
Folosirea memoriei virtuale este justificat de cerinele reale ale programrii i de
situaiile ntlnite n practic. De exemplu, pentru seciunile de cod care trateaz unele
condiii de eroare, care se pot ntlni foarte rar n timpul rulrii sau chiar de loc,
existena lor n memorie este rareori necesar.
Memoria virtual este implementat n sistemele cu paginare prin metoda numit
paginare la cerere, metod ce poate fi folosit i la sistemele cu segmentare sau cu
paginarea segmentelor. O alt metod este segmentarea la cerere, mult mai rar
folosit, datorit faptului c algoritmii sunt mai complicai (din cauza mrimii
variabile a segmentelor).
Paginarea la cerere
Metoda este asemntoare cu paginarea cu interschimbare (fig. 4.3.2), unde
programele sunt pstrate n memoria auxiliar i sunt ncrcate n memoria principal
doar atunci cnd se dorete lansarea lor n execuie. Deosebirea const n faptul c nu
se introduce n memorie ntregul program, ci numai cteva pagini, atunci cnd sunt
necesare. Tabela de pagin corespunztoare unui proces va conine acelai tip de
informaii ca i n cazul paginrii obinuite, avnd n plus un bit care va avea rolul de
a semnala prezena sau absena din memorie a paginii la care se refer.

Program
A
Swap out
evacuare

Swap in
introducere

Program
B

swap
memoria fizic
Fig. 4.3.2. Interschimbarea n cazul memoriei cu paginare

Sisteme de Operare
Bit
valid/invalid

cadru

A
B
C
D
E
F
G
H

0
1
2
3
4
5
6
7

0
4
v
1
i
2
6
v
3
i
4
i
5
9
v
6
i
7
i
tabela de pagin

memoria logic

0
1
2
3
4
5
6
7
8
9
10
11
12

A
C
C

F
F

13
14

swap

memoria fizic
Fig. 4.3.3. Tabela de pagin n cazul n care anumite pagini nu se afl n memoria principal

Ct timp se folosesc paginile aflate n memorie, execuia se desfoar normal.


Dac se ncearc folosirea unei pagini, care nu este nc n memorie, se va genera o
eroare de tip pagin lips. Dac se ncearc o folosire nepermis a unei adrese de
memorie (ex: indice incorect de vector) se genereaz o eroare ce duce la ncheierea
forat a programului. n cazul nostru, situaia se rezolv astfel:
- se verific o tabel intern a procesului (pstrat n blocul de control)
pentru a stabili dac ncercarea de accesare este permis sau nu (aparine
spaiului de adrese logice asociate procesului); dac este nepermis
programul se termin.
- dac adresa este corect i pagina respectiv nu a fost adus n memorie,
trebuie ncrcat din memoria auxiliar;
- se caut un cadru liber n memoria fizic
- se planific discul pentru citirea paginii dorite n cadrul astfel alocat;
- odat cu ncheierea operaiei de citire se actualizeaz att tabela intern
asociat procesului, ct i tabela de pagin, astfel nct s semnaleze
apariia n memorie a noii pagini.
- se reia execuia instruciunii ntrerupte de apariia erorii de adresare.
3

pagina se afl n memoria auxiliar

SO
2
eroare

ncarc
M

referin

i
cadru liber

6
instruciune
de repornire

tabela de pagin

4
aducerea paginii
care lipsete

5
reseteaz tabela
de pagin

memoria fizic

Fig. 4.3.4. Etapele de rezolvare ale unei greeli de pagin

Sisteme de Operare
Hardware-ul folosit la implementarea paginrii la cerere este identic cu cel
necesar la paginarea cu interschimbare: o tabel de pagin care s poat marca o
intrare nepermis cu ajutorul unui bit valid/invalid (sau bii de protecie) i o memorie
auxiliar n care s poat fi pstrate paginile care nu se afl n memoria principal.
Pe lng hardware, pentru gestionarea memoriei este nevoie i de o serie de
algoritmi precum i de respectarea unor restricii legate de arhitectur.
Paginarea la cerere influeneaz foarte mult performanele sistemului de
calcul. Tratarea paginii lips presupune urmtorii pai:
- generarea erorii ctre sistemul de operare;
- se salveaz regitrii utilizator i starea programului;
- se verific dac ntreruperea este de tip pagin lips;
- se verific dac este corect referirea paginii i se determin poziia ei pe
disc;
- se iniiaz citirea de pe disc ntr-un cadru disponibil al memoriei interne;
- se ateapt n coada asociat discului pn n momentul n care este
satisfcut cererea de citire;
- se ateapt datorit timpului de cutare i/sau laten a discului;
- se ncepe transferul paginii n cadrul disponibil;
- n timpul ateptrii, UC poate fi alocat unui alt utilizator (planificarea
UC);
- se salveaz registrele i starea programului celuilalt utilizator;
- se verific dac ntreruperea a fost generat de ctre disc;
- se actualizeaz tabela de pagin i celelalte tabele astfel nct s reflecte
existena n memorie a noii pagini;
- se ateapt ca UC s fie alocat din nou procesului;
- se reface coninutul registrelor utilizator, starea programului i noua tabel
de pagin, dup care se reia execuia instruciunii ntrerupte.
Nu toi paii anteriori sunt necesari, dar, n general, exist trei mai etape n
tratarea paginii lips:
- deservirea ntreruperii generate de lipsa paginii;
- introducerea paginii n memoria intern;
- reluarea execuiei procesului.
Timpul de acces efectiv (timpul de acces la memorie) este direct proporional
cu rata de apariie a paginii lips i, din acest motiv, trebuie meninut o rat de
apariie ct mai sczut.

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