Documente Academic
Documente Profesional
Documente Cultură
In acest capitol sint prezentate principalele tehnici de gestiune a memoriei folosite de sistemele de
operare. Acestea sint: alocarea singulara contigua, partitionarea, paginarea (simpla si la cerere),
Obiective segmentarea (simpla sau cu paginare la cerere), swapping-ul, overlay-ul si ierarhiile de memorii
(cache). In ultimul modul al acestui curs, este prezentat succint felul in care SO Unix administreaza
memoria interna, combinind doua tehnici: swapping-ul si paginarea la cerere.
Cuvinte cheie: alocarea memoriei, partitionare, paginare (la cerere), segmentare, swapping, overlay, cache
De obicei, spatiul de adrese al SO este mai mare decit zona rezervata lui din
Observatie
memorie - ca urmare, doar o parte a SO este rezidenta in memoria interna.
In ceea ce priveste cele patru functii ale unui modul de gestiune a resurselor, in cazul
acestei tehnici, se pot spune urmatoarele:
SR. Modulul de gestiune a memoriei interne (MGM) trebuie sa determine de unde pina
unde se intinde spatiul ocupat de SO; deasemenea el trebuie sa determine care este zona
in care se pot incarca programele utilizator;
14
PA. In acest caz nu se poate pune problema existentei unei politici de alocare;
AR. Alocarea spatiului de memorie este totala catre job-ul sau procesul respectiv;
ER. Eliberarea spatiului de memorie este automata, la terminarea job-ului (procesului).
Dupa cum se poate observa, este necesar ca MGM se determine intre ce adrese se
poate rula job-ul (proces-ul) utilizator; mecanismul hardware de control al acestei
executii este realizat cu ajutorul a doi registri: un registru de baza RB si un registru limita
RL. SO este acela care nu va executa eventualele instructiuni care vor genera adrese in
afara acestor limite. Ca urmare a acestei restrictionari asupra adreselor pe care le pot
accesa programele, se impune existenta a doua moduri de lucru:
simplitatea ei
necesitatea unui suport de memorie redus (SO-ul folosit fiind simplu, o mare parte
din spatiul de memorie va putea fi folosit direct de programele utilizator);
folosirea unor elemente hardware suplimentare ieftine (doi registri).
de multi-programare.
tip batch-processing. In acele sisteme, memoria operativa era impartita in zone numite
partitii. In fiecare partitie se putea incarca un job (sau proces).
In acest caz cele patru functii ale unui modul de gestiune a resurselor sint realizate astfel:
SR. MGM trebuie sa determine care sint partitiile, de unde pina unde tine fiecare, daca o
partitie este libera sau ocupata, cui ii este ea alocata - in acest din urma caz - si cit spatiu
ocupa procesul respectiv din partitia in care a fost incarcat;
PA. Politica de alocare se poate implementa fie la planificarea de job-uri, fie la
planificarea de procese;
AR. Alocarea unei partitii catre un anumit job se va face prin actualizarea structurilor de
date corespunzatoare, urmata fiind de incarcarea efectiva a job-ului in partitia respectiva;
ER. Eliberarea unei partii se face cu sau fara prelevare fortata, functie de tipul SO.
Este evident ca avind in memorie simultan mai multe procese, ele trebuie impiedicate sa
se jeneze unele pe altele sau sa interactioneze nedorit cu SO - solutiile adoptate de
proiectantii de SO pentru realizarea acestei protectii au fost, pe rind, urmatoarele:
initial s-a folosit o solutie in care existau cite doi registri (RB,RL) pentru fiecare
program utilizator, acestia avind o functionalitate asemanatoare celor de la tehnica
precedenta; depasirea adreselor aflate in acesti doi registri conducea la o eroare de violare
a protectiei memoriei. S-a constatat insa ca, in cazul in care mai multe procese realizeaza
operatii de I/O, este posibil ca datele citite de acestea sa se suprapuna, ceea ce este de
nedorit desigur! Un exemplu simplu pentru a ilustra in ce fel se paote produce aceasta
suprapunere este urmatorul: fie un proces P i care face o cerere de I/O - el va fi nevoit sa
cedeze procesorul altui proces, fie el Pj, care - daca nu se afla deja in memoria interna -
va fi adus acolo. Este posibil ca el sa fi adus chiar in partitia ocupata anterior de P i, dupa
ce acesta a fost salvat pe disc impreuna cu valorile proprii pentru RB si RL - noile valori
pentru RB si RL vor fi cele corespunzatoare procesului P j. Ca urmare a acestor noi valori
pentru acesti registri delimitatori, este posibil ca datele citite pentru procesul P i sa fie
suprapuse peste zona din partitie alocata procesului Pj;
a doua solutie folosita, care a inlaturat neajunsurile primei solutii, consta in
folosirea unor chei de acces si protectie astfel: o partitie este impartita in zone mai mici,
fiecarei astfel de zone atasindu-i-se o aceeasi valoare a cheii de protectie
16
(corespunzatoare partitiei respective). Cind o anumita partitie este alocata unui job, i se
va asocia acestuia o cheie de acces egala ca valoare cu cheia de protectie a partitiei care i
se aloca. In acest fel orice fel de suprapunere este eliminata. Ar mai fi de observat ca,
deoarece este greu de pus cite o cheie pentru fiecare locatie de memorie - in fapt, se
ataseaza cite o cheie de protectie pentru fiecare 2K; in consecinta memoria va fi alocata
in incremente de 2K. Trebuie mentionat deasemenea faptul ca SO are cheia de acces 0
(echivalent cu faptul ca impotriva lui nu exista protectie!!).
statica (partitii fixe): partitiile sint precizate inaintea inceperii executiei primului
program; ele pot sa fie fixate la generarea SO sau precizate la incarcarea SO. In acest caz
mai trebuie rezolvata o problema vizavi de dimensiunea partitiilor - daca acestea sint prea
mari, ele sint usor de gestionat, insa memoria este prost folosita - daca ele insa sint prea
mici, vor fi greu de gestionat si nu se vor putea rula job-uri mari;
dinamica (partitii variabile): din spatiul liber se creeaza partitii numai la cererea
job-urilor (proceselor), partitiile formate avind dimensiunea job-uluui sau procesului
In cazul alocarii dinamice sint de interes doua structuri de date: tabela de partitii
PARTITII si tabela de spatiu liber LIBER. Sa consideram urmatorul exemplu:
PARTITII
LIBER
first-fit (prima potrivire): se cauta in tabela de spatiu liber prima zona suficient de
mare pentru a putea fi alocata job-ului care a cerut-o. In continuare se formeaza o partitie
(de dimensiune egala cu cea a job-ului) in aceasta zona, restul zonei raminind libera.
Aceasta tehnica are o viteza mare, dar strica zonele mari de memorie, producind
fragmentare;
best-fit (cea mai buna potrivire): se parcurge toata tabela de spatiu liber, alocindu-se
zona de memorie care are o dimensiune mai mare sau egala cu cea ceruta de job si este
cea mai apropiata ca marime de dimensiunea job-ului. Aceasta tehnica are o viteza mai
redusa, insa ea nu distruge zonele mari de memorie. Oricum si ea produce fragmentare.
In continuare va fi listat algoritmul first-fit de alocare a unei partitii pentru un job care
solicita n K de memorie:
LIBER[l].Adresa_de_startLIBER[l].Adresa_de_start+n
[]
* gaseste in PARTITII o intrare libera p
/* daca tabela este corect dimensionata, acest lucru este intotdeauna posibil */
PARTITII[p].Dimensiunen
PARTITII[p].Adresa_de_startlocatie_de_start
PARTITII[p].Stare'alocat'
[]
** stop
orice creare de zona libera sa fie insotita de compactare - aceasta solutie este
inacceptabila, deoarece este mare consumatoare de timp;
numai la nevoie, adica se fac alocari si, cind acest lucru nu mai este posibil, se va
face compactare.
Este simplu de observat ca s-ar putea facilita gestiunea memoriei dca ea s-ar aloca
in "portii" de lungime fixa. Deasemenea, ar fi bine daca nu ar fi necesar ca programul sa
ocupe in memoriei bancuri consecutive (el putind ramine logic continuu, desi este
distribuit in memorie). Plecind de la aceste doua considerente, s-a elaborat tehnica
paginarii memoriei in care spatiul de adrese al programului se imparte in zone de lungime
fixa numite pagini, iar memoria interna este impartita in zone de lungime egala cu pagina,
numite blocuri. Orice astfel de pagina poate fi incarcata in orice bloc printr-un mecanism
de map-are.
Mecanismul de protectie consta in asocierea cu fiecare bloc a unei chei de protectie, toate
blocurile asociate aceluiasi program avind aceeasi valoare a acestei chei; programul
corespunzator va avea asociata o cheie de acces de aceeasi valoare cu cheia de protectie.
20
PMT2
Pagina Blocul_in_care_se_incarca_pagina
0 3
1 5
.. ..
MBT
Numar Stare Cui_ii_este_alocat
0 alocat SO
1 alocat SO
2 liber -
3 alocat job2
4 alocat job1
5 alocat job2
.. .. ..
21
Referitor la cele 4 functii ale unui modul de gestiune de resurse, in cazul paginarii putem
sublinia ca:
SR. Starea memoriei se poate determina din MBT (pentru intreg sistemul) si PMTi
(pentru fiecare job);
PA. Este implementata de planificatorul din nucleul SO;
AR. Consta in actualizarea PMT-urilor si a tabelei MBT si in incarcarea efectiva a
paginilor in blocuri;
ER. Este totala, la terminarea job-ului si consta in actualizarea corespunzatoare a MBT.
Neajunsul de nu putea rula programe mai mari decit memoria fizica, poate fi
eliminat daca nu se incarca in memorie tot programul, ci numai parti din el care se
executa la un moment dat. Tehnica prezentata in continuare, cunoscuta sub numele de
paginare la cerere permite acest lucru. In cazul foolosirii ei programul isi poate incepe
executia fara ca tot spatiul sau de adrese sa fie incarcat in memorie.
Astfel, un program isi poate incepe executia fara ca spatiul sau de adrese sa fie incarcat in
intregime in memoria interna. Cind un program va solicita o pagina care nu este inca
incarcata in memorie, se va genera o eroare de lipsa de pagina - pentru a rezolva aceasta
situatie de eroare fie:
Privitor la cele 4sarcini de baza ale unui sistem de gestiune a resurselor, in acest caz, se
poate preciza ca:
SR. Evidenta starii memoriei se tine cu ajutorul MBT, PMTi si o tabela suplimentara,
File Map Table (FMT), care pastreaza adresa pe suportul extern a fiecarei pagini
apartinind oricarui job;
PA. Se implementeaza partial la planificarea de job-uri si dinamic, pe masura ce
procesele isi cheama paginile. Ea presupune posibilitatea prelevarii fortate a unui bloc de
memorie;
AR. Presupune actualizarea MBT si a PMT-ului curent;
ER. Se face fie prin prelevare fortata, fie la terminarea executiei unui job (sau proces); si
ea presupune actualizarea SD corespunzatoare.
Pentru a putea face paginare la cerere sint necesare citeva elemente hardware
suplimentare, cum ar fi:
un bit (pastrat in tabela PMTi) care sa indice prezenta sau absenta unei pagini din
memorie;
hardware pentru generarea unei intreruperi, cind are loc o eroare de lipsa de pagina;
hardware pentru inregistrarea gradului de utilizare al fiecarei pagini, necesar
deoarece decizia de a scoate o pagina din memorie se bazeaza pe istoria utilizarii ei).
Algoritmii de paginare la cerere care pot fi folositi pentru a face paginare sint:
1. FIFO (First In First Out) - elimina din memorie pagina cea mai veche, deci care se afla
acolo de cel mai mult timp;
2. LRU (Least Recently Used) - transfera pe disc pagina cel mai putin recent utilizata,
adica pagina utilizata cel mai demult de catre un program in executie; din acest motiv el
mai este cunoscut si sub numele de NUR (Not Used Recently);
3. MRU (Most Recently Used) - duce pe disc pagina cel mai recent folosita, adica ultima;
4. LFU (Least Frequently Used) - trimite pe disc pagina folosita cel mai putin frecvent;
5. RAND (RANDom) - presupune ca toate paginile au aceeasi probabilitate de a fi
adresate, asa ca alege una la intimplare pentru a o elimina din memoria interna;
23
Modul5 - Segmentarea
In ceea ce priveste cele 4 functii ale unui sistem de gestiune a resurselor, in cazul
segmentarii, se pot preciza urmatoarele:
SR. Structurile de date folosite sint o rtabela de spatiu liber, precum si cite o tabela
Segment Map Table (SMTi) pentru fiecare job;
PA. Se realizeaza in parte la planificarea de job-uri, cind se incarca unul sau doua
segmente (cu compactarea memoriei, daca se impune acest lucru pentru a permite
incarcarea acestor segmente) si in parte la cerere, in executie, cind se produce cite o
intrerupere de segment lipsa.
AR. Presupune aducerea segmentului in memorie, actualizindu-se totodata intrarea
corespunzatoare lui din SMTi;
ER. Se poate face fie total, la terminarea executiei, fie fortat, cind un segment este ales
pentru a fi dealocat.
Pentru a depasi faptul ca, in cazul segmentarii, marimea unui segment este
limitata la marimea memoriei fizice, tehnica segmentarii a fost rafina astfel: segmentele
vor fi impartite in pagini de lungime fixa (egala cu lungimea blocului de disc), care nu
vor fi aduse toate in memorie atunci cind se va face acces la segmentul care le contine -
ele vor fi aduse pe rind, in masura in care este nevoie de ele. Ca urmare a acestei
abordari, segmentele pot fi oricit de mari.
In ceea ce priveste functionarea efectiva a acestei tehnici, ea este o imbina
caracteristicile corespunzatoare de la segmentare si paginare.
1. Swapping
2. Overlay
Ierarhia de memorii rezultata va avea capacitatea lui M2, costul apropiat de al lui
Nota
M2 si timpul de acces al lui M1, ceea ce desigur este foarte atragator!
Sa existe memorii interne din ce in ce mai mari. Aceasta tendinta este favorizata de
tehnologie care a dus la producerea de circuite de memorare din ce in ce mai ieftine.
Trebuie facuta insa observatia ca problemele de gestiune a memoriei nu dispar o data
cu folosirea de dispozitive de memorie din ce in ce mai mari!
Sa se foloseasca ierarhii de memorii;
Sa se deplaseze catre hardware mecanismele de gestiune a memoriei pentru a obtine o
crestere a vitezei.
Sumar Memoria interna, fiind o resursa limitata, trebuie gestionata cu mare grija de catre SO. Acesta este acela
care va asigura executarea oricarui job (proces), indiferent de caracteristicile acestuia, pe baza memoriei
interne disponibile.
Principalele tehnici de gestiune a memoriei folosite in diversele SO sint:
Alocare singulara contigua
Gestiunea memoriei cu partitionare
Paginarea memoriei
Paginarea la cerere
Segmentare
Segmentare cu paginare la cerere
Alte tehnici de gestiune a memoriei (swapping, overlay, cache).