Sunteți pe pagina 1din 12

Tema 6.

Gestionarea memoriei interne

Cuprins

 Introducere
 Gestionarea informaţiilor în memoria internă
 Evidenţa ocupării memoriei interne
 Gestionarea schimbului de informaţii
 Protecţia informaţiilor

6.1 Introducere

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 UCP 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.

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.

6.2. Gestionarea informaţiilor în memoria internă

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 numesc programe nerelocabile;
aceste programe trebuiesc încărcate întotdeauna la aceeaşi adresă de memorie, pentru a fi executate.

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ă ( la generarea unui proces)
 dezalocarea partiţiilor alocate, atunci când nu mai sunt utilizate de procesul la care au fost alocate ( 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:

o partiţia monitor, utilizată de sistemul de operare


o 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. Partiția 3
Sistemul de operare încarcă fiecare proces pe care îl generează în
partiţia de memorie care corespunde firului de aşteptare din care face Partiția 2
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
Partiția 1
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 SO
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 Partiția 3
de operare. Această metodă permite alegerea celei mai potrivite
Partiția 2
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 Partiția 1
generat în sistem, acesta trebuie să aştepte eliberarea unei partiţii
suficient de mari care să permită încărcarea lui, pentru execuţie. SO
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şte
fragmentarea 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.

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.
Există mai multe moduri de alocare a memoriei virtuale:
1. Alocare paginată 2. Alocare segmentată 3. Alocare segmentată şi paginată.
Fiecărui mod de alocare îi corespunde o metodă de mapare a memoriei virtuale peste cea internă.

Alocarea paginată se realizează astfel:

 memoria internă se împarte în zone de lungime fixă, numite pagini fizice


 memoria virtuală 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 un număr negativ, î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; această
procedură se numeţte întrerupere de pagină (page fault).

Exemplu. Avem un calculator cu memorie fizică de 4096b (4kb) (tabelul din dreapta), memorie virtuală de
8192b (8kb) (tabelul din stânga). Dimensiunea paginii virtuale și fizice este de 512b.
De determinat adresa fizică corespunzătoare următoarelor adresele virtuale:
а) adresa virtuală 1024 b) adresa virtuală 0 с) adresa virtuală 2582

Realizare: а) Adresa virtuală 1024 este adresa de început a paginii virtuale 2, care este încărcată în pagina
fizică 6 (din tabela de pagini). Adresa de început a paginii 6 este 3072. Răspuns: 3072.

Adrese pagini Numărul Numărul paginii


paginii fizice (din tabela
virtuale de pagini)
…15 Х
…14 Х 7
…13 Х
6144 – 6655 12 Х
5632 – 6143 11 7 6
5120 – 5631 10 Х
4608 – 5119 9 5 5
4096 – 4607 8 Х
4
3584 – 4095 7 Х
3072 – 3583 6 Х
3
2560 – 3071 5 3
2048 – 2559 4 4 2
1536 – 2047 3 0
1024 – 1535 2 6 1
512 – 1023 1 1
0 – 511 0 2 0

Pagini virtuale Pagini fizice


b) Adresa virtuală 0 este adresa de început a paginii virtuale 0, care este încărcată în pagina fizică 2(din
tabela de pagini). Adresa de început a paginii 2 este 1024. Răspuns: 1024.

с) Adresa virtuală 2582 aparține paginii virtuale 5, care este încărcată în pagina fizică 3. Adresa 2582
are deplasamentul 22 față de adresa de început a paginii 5 (2582 – 2560 = 22). Adresa de început
a paginii fizice 3 este 1536. La această adresă se adaugă deplasamentul obținut și obținem adresa
fizică: 1536 + 22 = 1558. Răspuns: 1558.

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ă.

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.

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ă.

6.3. Evidenţa ocupării memoriei interne

Pentru a face posibilă alocarea memoriei interne la procesele din sistem este necesară realizarea unei evidenţe a
ocupării memoriei, adică evidenţa zonelor libere şi a zonelor ocupate din memoria internă; în acest scop
trebuiesc asigurate două funcţii:
 funcţia de ocupare a memoriei, care realizează scoaterea din evidenţa zonelor libere a zonei în care se
face transferul de date din memoria externă
 funcţia de eliberare a memoriei, care eliberează zona de memorie, atunci când nu mai este necesară
procesului căruia îi fusese alocată, prin trecerea ei în evidenţa zonelor libere.

Cea mai bună metodă pentru realizarea acestor două funcţii este utilizarea listelor înlănţuite. De exemplu, în
cazul unui sistem care foloseşte alocarea cu partiţii variabile a memoriei, utilizarea listelor înlănţuite pentru
evidenţa ocupării partiţiilor se realizează astfel:

 fiecare partiţie din memorie, Pi, începe cu două câmpuri de control:


o în primul câmp se memorează lungimea partiţiei, li
o în al doilea câmp, ai, se memorează adresa unei partiţii;
 se defineşte o listă înlănţuită a partiţiilor libere, spre care punctează intrarea p a listei şi în care, pentru
fiecare partiţie i, ai punctează la următoarea partiţie liberă, Pi+1
 partiţiile ocupate Qj memorează în aj adresa partiţiei care le succede fizic în memoria internă, fie că este
liberă, fie că este ocupată
 iniţial, memoria internă formează o singură partiţie liberă, cu adresa de încărcare p şi valoarea null în
câmpul de adresă către partiţia următoare
 alocarea unei partiţii libere se face în funcţie de lungimea zonei de memorie solicitate: se parcurge lista
partiţiilor libere, examinând câmpul li, până la identificarea unei valori convenabile, lk
o dacă partiţia k se va aloca integral, atunci ea trebuie scoasă din lista partiţiilor libere şi trebuie
recalculat ak pentru a fi pointer la partiţia care urmează fizic partiţiei k
o dacă partiţia k se va aloca parţial, ea se divide în partiţia k’, de lungime lk’, alocată, şi în partiţia
k’’, de lungime lk’’, liberă;
 eliberarea unei partiţii j se face prin includerea acestei partiţii în lista partiţiilor libere:
o se calculează adresa fizică a partiţiei eliberate: pj=aj -lj
o se caută în lista partiţiilor libere partiţia i care îndeplineşte condiţiile ca: a i-1 <pj şi ai >pj (partiţia j
trebuie inserată între partiţia i şi partiţia i+1)
 comasarea a două partiţii libere adiacente se face prin înlocuirea adresei memorate în prima partiţie cu
adresa memorată în partiţia care îi urmează şi ştergerea celei de-a doua partiţii din lista partiţiilor.
Verificând sistematic, la fiecare eliberare a unei zone, dacă există posibilitatea concatenării cu o zona
liberă adiacentă, se evită situaţia menţinerii zonelor libere adiacente, situaţie care favorizează
fragmentarea internă a memoriei.

6.4. Gestionarea schimbului de informaţii

O altă funcţie pentru gestionarea memoriei interne se referă la organizarea schimbului de informaţii între
memoria internă şi memoria externă. Această funcţie este necesară acolo unde se foloseşte o alocare dinamică a
memoriei interne, în cazul alocării virtuale sau atunci când se foloseşte procedeul de swapping, pentru
eliberarea memoriei interne. Pentru a face posibil şi pentru a optimiza schimbul de informaţii între memoria
internă şi memoria externă, este necesar să se poată rezolva următoarele probleme:

 să se stabilească zona din memoria internă în care se va face transferul de informaţii, caracterizată prin
adresă şi lungime; criteriile aplicate în acest scop se numesc politici de plasare
 să se determine care zone ocupate din memoria internă trebuiesc eliberate, pentru a putea realiza o nouă
alocare a memoriei interne, de exemplu în cazul alocării virtuale sau a folosirii tehnicii swapping; pentru
că nu poate fi determinată evoluţia viitoare a proceselor din sistem, pentru rezolvarea acestei probleme
se folosesc metode statistice care determină modalitatea de acţiune a sistemului, confirm unor politici de
înlocuire
 a treia problemă trebuie să determine volumul unui schimb de informaţii cu memoria externă, astfel
încât următoarea cerere de transfer de informaţii să apară cât mai târziu; în acest scop pot fi utilizate
politici de încărcare.

Exemple de politici de plasare:

a. Metoda primei potriviri (First fit) : partiţia care se va aloca este prima partiţie liberă, cu lungimea
acoperitoare, din lista partiţiilor libere; dacă lungimea solicitată este l j, se parcurge lista partiţiilor libere
până este indeplinită condiţia ca li >= lj , caz în care se aloca partiţia i, înlăturându-se din lista partiţiilor
libere. Avantajul metodei este simplitatea ei; dezavantajul este că poate duce la ocuparea ineficientă a
partiţiilor libere.
b. Metoda celei mai bune potriviri (Best fit) : se caută acea zonă liberă în care va rămâne cel mai mic
spaţiu neocupat şi se alocă aceasta. Dezavantajul principal constă în timpul suplimentar necesar căutării
partiţiei libere cu lungimea optimă. Reducerea timpului de căutare se poate obţine dacă se organizează
lista partiţiilor libere în ordinea crescătoare a lungimii lor, şi nu în ordinea crescătoare a adreselor, care
este ordinea naturală. Inconvenientul unei liste realizate în altă ordine decât cea a adreselor îl reprezintă
faptul că determinarea zonelor libere adiacente, în scopul comasării lor automate, devine o operaţie mai
laborioasă.
c. Metoda celei mai rele potriviri (Worst fit) : se caută acea zonă liberă care, prin alocare parţială, lasă
partiţia liberă cu cea mai mare lungime. Avantajul metodei este că întârzie apariţia fenomenului de
fragmentare internă a memoriei. Se poate reduce timpul de căutare a partiţiei libere ce va fi alocată prin
crearea listei partiţiilor libere în ordinea descrescătoare a lungimii lor. ªi în cazul acesta devine prea
laborioasă procedura de comasare automată a zonelor libere adiacente.

Exemple de politici de înlocuire:

În cazul alocării virtuale poate să apară situaţia în care întreaga memorie internă este ocupată, în momentul în
care se solicită transferarea din memoria externă a unor pagini virtuale. În această situaţie este necesară
eliberarea unui număr corespunzător de pagini fizice. Problema care trebuie rezolvată este să se desemneze care
pagini fizice trebuiesc eliberate, în ideea că orice pagină virtuală încărcată deja în memoria internă ar mai putea
fi solicitată, până la încheierea procesului în execuţie. În cazul ideal, ar trebui eliberată întâi acea pagină care va
fi solicitată din nou cel mai târziu.

Răspunsul la problemă nu poate fi determinat cu exactitate, pentru că nu se cunoaşte cu certitudine modul în


care va evolua procesul. Din acest motiv se folosesc metode statistice pentru definirea politicilor de înlocuire.

Este necesară o evidenţă a acceselor, ca număr şi frecvenţă, la fiecare pagină încărcată în memoria internă;
practic, ar fi utilă contorizarea separată a fiecărui acces la memoria internă; trebuie utilizat, însă, un procedeu
care să consume cât mai puţine resurse sistem. În acest scop cele mai eficiente sunt metodele care pot fi
implementate hard.

a. Prin metoda NRU (not recently used) se înlocuieşte o pagină care nu a fost utilizată recent. Pentru a
implementa această metodă, se asociază fiecărei pagini fizice doi biţi:
o bitul R, numit bit de referire, primeşte valoarea 0 la încărcarea paginii virtuale în pagina fizică şi
primeşte valoarea 1 la fiecare acces realizat la această pagină. Periodic, toţi biţii R sunt setaţi pe
0;
o bitul M, bitul de modificare, primeşte valoarea 0 la încărcarea paginii şi valoarea 1 la fiecare
scriere în acea pagină.

Utilizarea acestor doi biţi determină o împărţire a paginilor fizice în patru categorii:

 categoria 1: pagini nereferite şi nemodificate, cu R=0 şi M=0


 categoria 2: pagini referite şi nemodificate, cu R=1 şi M=0
 categoria 3: pagini referite şi modificate, cu R=1 şi M=1
 categoria 4: pagini nereferite, în ultimul interval de timp, dar modificate, cu R=0 şi M=1.

Pentru a înlocui o pagină conform metodei NRU, se alege o pagină din una din categorii, în ordinea: 1,
4, 2, 3. Paginile fizice din categoria 3 sau 4 vor fi salvate în paginile virtuale corespunzatoare, înainte de
a fi eliberate.

Acest algoritm are avantajul de a fi simplu şi eficient.

b. Potrivit metodei FIFO (first in first out) se înlocuiesc paginile în ordinea încărcării lor în memoria
internă. Pentru utilizarea acestei metode se crează o listă a paginilor fizice, în ordinea încărcării lor; lista
se actualizează la fiecare încărcare: pagina virtuală este încărcată în pagina de pe prima poziţie din listă,
poziţie care este apoi înlăturată din listă, pentru a fi adăugată pe ultima poziţie din listă; practic, se poate
parcurge circular aceeaşi listă, modificând doar poziţia pointerului în listă. Bitul M asociat fiecărei
pagini poate indica dacă pagina fizică a fost modificată şi trebuie salvată, înainte de a fi reacoperită.
c. O variantă îmbunătăţită a acestor memtode constă în utilizarea combinată a metodei NRU cu metoda
FIFO: se aplică metoda NRU iar criteriul de selecţie, în cadrul unei categorii, este stabilit cu metoda
FIFO. În acest fel se va selecta cea mai veche pagină care nu a fost recent utilizată.
d. În metoda LRU (Least Recently Used), se înlocuieşte pagina care nu a fost solicitată cel mai mult timp,
altfel spus, pagina cel mai puţin folosită în ultimul timp. Aceata este pagina care va fi solicitată în
următorul interval de timp cu probabilitatea cea mai mică. Pentru aplicarea acestui algoritm de înlocuire,
trebuie ţinută evidenţa numărului de accese la fiecare pagină de memorie, de exemplu prin una din
metodele următoare:
o utilizarea numărătorului de accese, care poate fi implementat hardware, cu ajutorul unui registru
specializat în incrementarea contorului de pagină, la fiecare acces la pagină; fiecare pagină fizică
are o zonă rezervată, contorul de pagină, în care se incrementează valoarea numărului de accese la
acea pagină; această valoare se iniţializează cu 0 la înlocuirea paginii; criteriul de înlocuire este de a
alege pagina cu cea mai mică valoare a contorului;
o utilizarea matricei de referinţă, o altă metodă de identificare a paginii cel mai puţin utilizate în
ultimul timp. Pentru un număr n de pagini fizice, în memoria internă se defineşte o matrice de n*n
biţi; iniţial biţii sunt setaţi pe 0. Accesarea paginii k produce setarea liniei k pe 1, urmată de setarea
coloanei k pe zero. Această operaţie determină ca numărul biţilor 1 de pe linia k să fie n-1 şi
numărul biţilor 1 de pe celelalte linii să fie decrementat cu 1, în urma accesului la linia k. Prin
urmare, pagina cea mai puţin solicitată în ultimul timp va avea numărul cel mai mic de biţi 1 pe
linia ei. Implementarea matricii de referinţă se poate realiza hardware, metoda fiind mai economică
decât cea a numărătorului de accese.

Anomalia Belady

Problema care apare la înlocuirea paginilor este dimensiunea lor. Dacă dimensiunea este mai mică, ar reieși că
mai multe pagini fizice vor fi încărcate și, deci, mai puține întreruperi de pagini. Paradoxal, dar asta nu are loc
întotdeauna. Acest lucru a fost observat de cercetătorul Belady, de unde și anomalia Belady sau anomalia
FIFO.

Orice proces de la lansarea lui formează o serie de accesări către memorie la o anumită pagină fizică. Adică
accesul procesului la memorie poate fi descris ca o listă de numere de pagini. Această listă se numește listă de
referință (reference string), căreia îi revine rolul principal în modelarea algoritmilor de înlocuire a paginilor.

Mecanismul funcționării alocării paginate ni-l putem închipui ca un interpretator ce funcționează așa: el
prelucrează un masiv M din n elemente, egal cu numărul de pagini virtuale. Masivul e divizat în două părți: cea
de sus cu m elemente, egal cu numărul de pagini fizice; cea de jos cu n-m elemente, egal cu numărul de pagini
înlăturate din memoria fizică. Inițial M este gol. După lansare procesul începe să încarce paginile din lista de
referință până prima parte din M se completează. Când e nevoie de o pagină nouă, interpretorul verifică dacă
aceasta se află în memoria fizică sau nu. Dacă da - are loc încărcarea ei în în partea de sus a masivului, pe prima
linie. Dacă nu – are loc activarea unui algoritm de înlocuire a paginilor în felul următor: pagina necesară se
încărcă în partea de sus a masivului, pe prima linie, restul fiind deplasate în partea de jos. Se înregistrează o
intrerupere de pagini.

Exemplu: Fie următoarea listă de referință 0 2 1 3 5 4 6 3 7 4 7 3 3 5 5 3 1. Spațiul memoriei virtual are 8


pagini, memoria fizică este de 4 pagini. Algoritmul LRU se modelează astfel:

0 2 1 3 5 4 6 3 7 4 7 3 3 5 5 3 1
0 2 1 3 5 4 6 3 7 4 7 3 3 5 5 3 1
0 2 1 3 5 4 6 3 7 4 7 7 3 3 5 3
0 2 1 3 5 4 6 3 3 4 4 7 7 7 5
0 2 1 3 5 4 6 6 6 6 4 4 4 7
p p p p p p p p p p

Numărul total de întreruperi de pagini este egal cu 10 (10 de p). La modelarea algoritmului FIFO pagina nu se
ridică pe prima linie în cazul prezenței ei în memoria fizică. Numărul total de întreruperi de pagini cu algoritmul
FIFO este egal cu 11 (11 de p).

Un sistem cu trei pagini fizice este mai productiv (9 faults) decât unul cu patru pagini fizice (10 faults), pentru
următoarea listă de referință 012301401234 și cu algiritmul FIFO.

Anomalia Belady: (a) - FIFO cu trei pagini fizice; (b) - FIFO cu patru pagini fizice

Concluzie: Algoritmul LRU nu se supune anomaliei Belady și este mai preferat de realizatorii sistemelor de
operare, pentru că nu scade productivitatea lor.

Problema înlocuirii paginilor există şi în alte sfere de activitate ale SC – utilizarea memoriei cash – când aceasta
se completează apare necesitatea înlocuirii unor blocuri cu altele, cu deosebirea în timp: aceste înlocuiri trebuie
efectuate timp de câteva nanosecunde, nu timp de câteva milisecunde necesare înlocuirii paginilor. Alt exemplu
sunt WEB-serverele. Serverul poate păstra un anumit număr de pagini web în memoria sa cash. Dar când
aceasta s-a completat şi are loc adresarea la altă pagină WEB, apare necesitatea înlăturării uneia cu înlocuirea
ei. Se utilizează aceleaşi mecanisme ca în cazul memoriei virtuale, cu deosebire că aici paginile WEB nici odată
nu sunt modificate.

Exemple de politici de încărcare:


În cazul alocării paginate a memoriei trebuie determinat care este numărul optim de pagini care trebuiesc
încărcate în memoria internă, pentru a reduce numărul de cereri de transfer a unor noi pagini virtuale. Această
problemă se rezolvă prin politicile de încărcare. Între alternativa nerealizabilă de a încărca de la început, în
memoria internă, toate paginile virtuale ce corespund unui proces, şi alternativa de a încărca o singură pagină, în
momentul în care este solicitată, politicile de încărcare definesc strategii pentru încărcarea în avans a unor
pagini, astfel ca în momentul în care ele vor fi solicitate, paginile să se găsească deja în memoria internă.

Un criteriu folosit pentru determinarea paginilor ce se vor încărca în avans este criteriul vecinătăţii, în
formularea următoare: adresele de memorie solicitate în timpul execuţiei unui proces nu se distribuie uniform în
întreaga memorie folosită de proces, ci se grupează în jurul unor centre, formând zone de interes; apelurile
succesive la adrese din interiorul unei zone sunt mult mai frecvente decât apelurile succesive la adrese din zone
diferite; acest criteriu justifică faptul ca, odată cu încărcarea în memoria internă a unei pagini solicitate, să se
încarce un număr de pagini adiacente ei, care vor fi probabil solicitate în viitorul apropiat, înaintea altor pagini.

6.5. Protecţia memoriei

Funcţia de asigurarea a protecţiei memoriei interne presupune prevenirea situaţiei în care un program în
execuţie poate avea acces la locaţii din memoria internă alocate unor programe de sistem, în execuţie, sau altor
programe utilizator, în execuţie, sau unor zone de date ale altor programe.

Algoritmul după care se realizează protecţia memoriei este următorul:

 fiecare entitate alocabilă din memoria internă (partiţie, pagină, etc.) are:
o o cheie de protecţie
o un şir de biţi care indică modalităţile de acces la zona de memorie (de exemplu, dacă este o zonă
read-only sau o zonă read/write)
 fiecare secvenţă de program încărcabilă în memoria internă are:
o o cheie de acces
o un şir de biţi care indică drepturile de acces
 orice încercare de acces la o locaţie de memorie este precedată de comparaţia între cheia de protecţie a
zonei din care face parte locaţia de memorie cu cheia de acces a procesului care doreşte să realizeze
accesul la locaţia respectivă; în caz de neconcordanţă, accesul nu este permis şi procesul se încheie cu un
mesaj de eroare;
 dacă accesul este permis, se confruntă modalităţile de acces ale zonei de memorie cu drepturile de acces
ale procesului şi cu operaţia care se doreşte să se execute; dacă există neconcordanţe între aceste
elemente, atunci operaţia nu este permisă.

Sistemul de protecţie al memoriei este propriu fiecărui sistem de operare şi modului în care este implementat în
sistemul de calcul.
Примеры.
1. Процесс обращается к страницам A, B, C, D и E в порядке: ABCDABEABCADBE.
Использовать алгоритм FIFO для определения количества страничных прерываний, если
процесс выполняется с тремя физическими страницами, изначально свободные.

A B C D A B E A B C A D B A

I A B C D A B E E E C A D B B

II A B C D A B B B E C A D D

III A B C D A A A B E C A A

page + + + + + + + - - + + + + -
fault

Ответ: количество страничных прерываний 11 (кол-во знаков +).

2. Процесс обращается к страницам A, B, C, D и E в порядке: ABCDABEABCADBE.


Использовать алгоритм LRU для определения количества страничных прерываний, если
процесс выполняется с тремя физическими страницами, изначально свободные.

A B C D A B E A B C A D B A

I A B C D A B E A B C A D B A

II A B C D A B E A B C A D B

III A B C D A B E A B C A D

page + + + + + + + - - + - + + -
fault

Ответ: количество страничных прерываний 10 (кол-во знаков +).

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