Gestiunea memoriei interne

Tehnica de gestionare a informaţiilor din memoria internã

Sistemele de calcul includ diverse dispozitive de memorare organizate în final pe două nivele:  
·        memoria internă
·         memoria externă.
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 CPU 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.
Gestiunea memoriei are rolul de a decide cum trebuie organizată informaţia pe cele două nivele şi cand trebuie transferată informaţia între acestea; tehnicile de gestiune a lucrărilor (multiprogramare, multitasking, time-sharing,etc) implică existenţa unor metode eficiente pentru gestiunea memoriei: tehnici de alocare dinamică şi memoria virtuală.
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.

Obiectivul activităţii de gestiune a memoriei este de a furniza o viteză de execuţie sporită a programelor, prin menţinerea în memoria internă a acelor părţi din programe care sunt referite cu o frecvenţă mare de către CPU (de regulă, programe independente intre ele); deoarece în memoria internă există simultan mai multe programe independente între ele, pentru a utiliza eficient CPU apar următoarele aspecte:
- introducerea în memoria internă a programului ce urmează a fi executat necesită un spaţiu de memorie determinat de dimensiunea sa, de spaţiul liber din memoria internă în acel moment şi de modul de ocupare al memoriei interne de către alte programe;
- pentru zonele de memorie alocate diferitelor programe, trebuie să se asigure protecţia acestora faţă de anumite interferenţe şi adresări cu alte programe.
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.
Translatarea adreselor logice în adrese fizice se realizează printr-o funcţie de translatare care precede execuţia instrucţiunii respective.
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ã:
execuţiei (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)(numite şi adrese fizice) în etapele scrierii şi translatării programelor a căror adrese de memorie, sunt simbolice (adresa determinatã ca distanţã de la adresa de început a programului pânã la adresa entitãţii respective, numitã adresã relocabilã sau adresã relativã.)(numite adrese logice). Translatarea adreselor logice in adrese fizice se realizează printr-o funcţie de translatare care precede execuţia instrucţiunii respective.
Activitatea de gestiune a memoriei are la bază trei algoritmi (fig.3.2.):
1) algoritmul de transfer care determină cand un bloc trebuie transferat din memoria externă în memoria internă - inaintea execuţiei sau in timpul execuţiei;
2) algoritmul de plasare care determină ce zonă nealocată din memoria internă este folosită pentru plasarea blocului incărcat din memoria externă;
3) algoritmul de reamplasare care determină care blocuri şi la ce moment trebuie reincărcate în memoria internă.
Fig.3.2. Activitatea de gestiune a memoriei
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.
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ã (de exemplu, la generarea unui proces)
  • dezalocarea partiţiilor alocate, atunci când nu mai sunt utilizate de procesul la care au fost alocate (de exemplu 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:
  • partiţia monitor, utilizatã de sistemul de operare
  • 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. Sistemul de operare încarcã fiecare proces pe care îl genereazã în partiţia de memorie care corespunde firului de aşteptare din care face 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 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 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 de operare. Aceastã metodã permite alegerea celei mai potrivite 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 generat în sistem, acesta trebuie sã aştepte eliberarea unei partiţii suficient de mari care sã permitã încãrcarea lui, pentru execuţie. 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.

Memoria virtuală
Conceptul unui singur nivel de memorie- denumită memorie virtuală- oferă utilizatorului iluzia că memoria internă are o capacitate foarte mare, partea de hardware realizand automat transferul informaţiei din memoria internă în memoria externă şi invers.
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.
Unitatea de transfer intre memoria internă şi cea externă este pagina, aceasta reprezentand o entitate a memoriei de dimensiune fixă de 512, 1024, 2048 sau 4096 kbytes; procesul de deplasare al paginilor între memoria internă şi memoria externă este referit ca transfer de pagini.
O adresă folosită de programator se numeşte adresă virtuală, iar adresa reală unde este  emorată se numeşte adresă fizică (dimensiunea spaţiului de adrese virtuale este mult mai mare decat  imensiunea spaţiului de adrese reale).
Funcţia de translatare a unei adrese virtuale ai in adresă reală bj se poate defini astfel:
ft = 0 dacă informaţia de la adresa virtuală solicitată (ai) nu este in acel moment rezidentă in
memoria internă;
ft = bj dacă adresa virtuală ai găseşte rezidentă adresa reală bj in memoria internă.
Dacă ft(ai) = 0 se emite un semnal de nerezidenţă şi se generează o intrerupere care are ca efect plasarea din memoria externă in memoria internă, a informaţiei referite de procesor prin adresa virtuală ai. La terminarea intreruperii (care lansează in execuţie algoritmii de transfer, plasare şi reamplasare) ft(ai) va fi nenulă, avand loc o nouă iniţiere a activităţii intrerupte. Dispozitivul de translatare este redat în fig.3.3.
Fig.3.3. Mecanismul de translatare a adreselor virtuale în adrese fizice
Existã mai multe moduri de alocare a memoriei virtuale:
  • alocarea paginatã
  • alocarea segmentatã
  • alocarea segmentatã şi paginatã.
Fiecãrui mod de alocare îi corespunde o metodã de mapare a memoriei virtuale peste memoria internã.

a. organizarea la nivel de pagină
Organizarea la nivel de pagină conduce la reducerea necesarului de informaţie conţinut în tabela ft deoarece spaţiul de adrese este divizat in blocuri de dimensiune constantă numite pagini. Dimensiunea paginii virtuale coincide cu dimensiunea paginii reale ceea ce implică netranslatarea adresei cuvantului de pagină. Dispozitivul de translatare construieşte o tabelă a paginilor organizată în memoria internă (MTP) cu informaţii necesare procesului de translatare din adrese virtuale înadrese fizice (fig. 3.5.).
Fig.3.5. Organizarea la nivel de pagină a memoriei virtuale
Pentru orice adresă virtuală ai se asociază perechea (P,C) unde P reprezintă numărul cuvintelordin pagină, iar C numărul unui cuvant referit din P. Prin P se intră in tabela de pagini, la unul din cuvintele de la 0 la 2p, de unde se extrage componenta Q de o anumită dimensiune; dacă:
- RM (Q) are conţinut nenul, atunci adresa solicitată de procesor are drept corespondent o pagină de memorie rezidentă in memoria internă;
- RM (Q) = 0 atunci adresa virtuală solicitată nu are adresă de pagină reală in memoria internă, ceea ce conduce la declanşarea celor 3 algoritmi ca urmare a setării registrului de REZIDENT. Algoritmii vor determina transferul paginii corespunzătoare din memoria externă în memoria internă, actualizand totodată şi MTP, după care procesorul referă din nou adresa.
Organizarea la nivel de pagină oferă avantajul că un program se poate executa fără a avea toate paginile încărcate în memoria internă, ele putand fi încărcate pe măsură ce devin necesare în prelucrare, deci o utilizare mai eficientă a memoriei şi totodată, o protecţie mai sigură a informaţiei.
Alocarea paginatã se realizeazã astfel:
  • memoria internã se împarte în zone de lungime fixã, numite pagini fizice
  • memoria virtualã alocatã unui proces 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 0, î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.
Alocarea paginatã este folositã la sistemele de calcul compatibile IBM-PC pentru utilizarea memoriei expandate.
b. organizarea la nivel de segment
Organizarea la nivel de segment imparte spaţiul de memorie in blocuri de dimensiune variabilă, numite segmente (pot fi module de program sau anumite structuri de date)- fig. 3.6.
Fig.3.6. Organizarea la nivel de segment a memoriei virtuale
Adresa virtuală referită de procesor constă din numele segmentului S şi numele cuvantului în segment C; adresa de memorie unde incepe segmentul S reprezintă adresa de bază R, iar prin D se specifică dimensiunea segmentului.
Adresa reală determinată prin R+C se obţine dacă registrul de buffer conţine adresa extrasă din memoria tabelei de segmente, efectuandu-se şi comparaţia dintre C şi D; dacă R = 0, atunci se vor declanşa cei trei algoritmi.
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ã.
Organizarea la nivel de Segment-Pagină
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.
Organizarea la nivel de segment-pagină divide adresele virtuale şi adresele fizice în segmente, iar segmentele în pagini, în vederea fructificării avantajelor celor două metode de organizare:
- paginarea, care oferă implementarea simplă şi cel mai sigur mijloc de protecţie a informaţiei;
- segmentarea, care satisface intr-o mai mare măsură cerinţele programatorului prin
divizarea in segmente, deci ţinand seama de logica programului (fig.3.7.).
Fig. 3.7. Organizarea la nivel de segment-pagină a memoriei virtuale
 În cadrul acestui mod de organizare, există o singură tabelă de segmente şi un număr de tabele de pagini egal cu numărul de segmente.
Atunci cand procesorul referă o adresă virtuală, acesteia i se asociază:
- adresa virtuală a segmentului S;
- adresa virtuală a paginii in segment CP;
- adresa virtuală a cuvantului din cadrul paginii CC; iar registrul de acces segment este setat.
Prin S din RV se caută in MTS; dacă se găseşte o adresă, aceasta este reprezentată prin:
- R - adresa tabelei de pagini;
- D - dimensiunea segmentului exprimată in pagini şi introdusă apoi in registrul de buffer.
Prin intermediul lui R din registrul de buffer se selectează o tabelă de pagini din MTP;
componenta CP din registrul de adrese şi R din registrul de buffer, permit extragerea din tabela de pagini a cuvantului indicat prin CP din RV; cuvantul selectat are Q biţi şi reprezintă una din paginile reale din memoria internă, fiind introdus in RM unde vine şi componenta CC care indică adresa reală a cuvantului in pagină.
Dacă nu se găseşte prin S din RV nici o intrare in MTS, atunci segmentul virtual adresat nu are corespondent in memoria internă, deci registrul de REZIDENT este setat şi se declanşează algoritmii de transfer din memoria externă in memoria internă a segmentului solicitat actualizandu-se şi memoria tabelei de segmente.
Dacă CP din RV este mai mare decat D din registrul de buffer, registrul de depăşire             semnalizează o eroare de adresare poziţionandu-se pe 1.
Accesul in MTP se realizează prin poziţionarea registrului de acces la pagină pe 1, iar componentele Q şi CC sunt introduse in RM.
 În cazul proceselor concurente, gestiunea memoriei intre mai multe procese poate fi analizată prin - limitarea frecvenţei transferului de date şi programe;
- conservarea execuţiei programelor din memoria internă, in timp ce alte programe sunt în aşteptare in memoria externă;
- transferul datelor şi programelor din memoria internă atunci cand procesele le solicită.
Acest mod de alocare are toate avantajele celor douã moduri de alocare anterioare; a fost implementat pentru prima datã pe platforma MULTICS; este folosit de sistemul de operare VMS şi de MS-DOS pentru lucrul cu memoria extinsã.
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ã.