Managementul memoriei este una din funcțiile de bază ale sistemului de operare. Sistemele de operare moderne permit fiecărui proces să obțină mai multă memorie virtuală decât dimensiunea totală a memoriei reale (fizice) pe un sistem informatic dat. Scopul principal al gestionării memoriei este acela că prin combinarea unei memorii mari, dar lente, cu memorie mică, dar de mare viteză, pentru a obține efectul memoriei mari de mare viteză.
Separarea între partiționare fixă și variabilă este ineficientă în ceea ce privește utilizarea memoriei, deoarece partiționarea fixă are ca rezultat intern, în timp ce dinamică în fragmentarea externă. O posibilă soluție la problema fragmentării este aceea de a permite ca procesul să nu fie scris într-un bloc de memorie continuă. Programul poate fi împrăștiat în mod arbitrar în memorie. În acest caz, memoria de lucru este împărțită în blocuri mai mici de mărime fixă numite cadre. Spațiul de adrese logic al programului este, de asemenea, împărțit în blocuri de aceeași dimensiune, numite pagini. Când un program este introdus în memorie, paginile sunt scrise în cadre de memorie libere. Pentru a ușura transferul de programe de pe un disc într-o memorie de lucru, discul este, de asemenea, împărțit în cadre de aceeași dimensiune ca și cadrele de memorie. Astfel, un cadru de pe disc este scris într-un cadru al memoriei de lucru. Sistemul de paginare funcționează în modul următor: când programul este acceptat pentru execuție, se calculează dimensiunea acestuia, exprimată cu numărul necesar de pagini. Dacă un număr suficient de cadre este liber, procesul este înregistrat în pagina de memorie pe pagină. În același timp, numărul de cadre în care sunt scrise fiecare pagină este introdus în tabelul de cadre.
Programul de utilizator și datele asociate pot fi împărțite într-un număr de segmente. Segmentele tuturor programelor nu trebuie să aibă aceeași dimensiune, deși există o lungime maximă a segmentului. Ca și în cazul paginării, adresa logică care folosește segmentarea constă din două părți, în acest caz numărul de segmente și dislocări din segmentul respectiv. Din cauza utilizării unor segmente de dimensiuni diferite, segmentarea este similară cu cea a diviziunii dinamice. În absența unei scheme suprapuse sau a utilizării memoriei virtuale, este necesar ca toate segmentele de programe să fie încărcate în memorie pentru a fi executate. Diferența față de partiționarea dinamică este că segmentarea poate necesita mai mult de o partiție, iar partiția nu trebuie să fie adiacentă. Segmentarea rezolvă problema fragmentării interne, dar, pe lângă divizarea dinamică, rămâne problema fragmentării externe. Cu toate acestea, deoarece procesul este împărțit într-o serie de părți mai mici, fragmentarea externă este de obicei mai mică. Spre deosebire de paginarea care este invizibilă pentru programator, segmentarea este de obicei vizibilă și potrivită pentru organizarea programelor și a datelor. În scopul programării modulare, programul sau datele pot fi împărțite în mai multe segmente mai mici. Dezavantajul acestei tehnici este că programatorul trebuie să cunoască limitele dimensiunii maxime a segmentului. Următorul avantaj al utilizării segmentelor de dimensiuni diferite este că nu există nicio legătură între adresele logice și fizice. Similar cu paginarea, tehnica de segmentare simplă utilizează tabelele de segmente pentru fiecare proces și o listă a blocurilor disponibile în memoria principală.
Paging-ul oferă un spațiu de adrese virtual și fizic și un spațiu de memorie secundar pe blocuri (pagini) de lungimi egale. Acest lucru permite ca spațiul de adresă virtuală continuă să fie alocat procesului de dispersie (nu neapărat distribuit continuu) în spațiul real al adreselor și în memoria secundară. Chiar și pagina, ca termen, se referă mai degrabă la memorie decât la obiectele logice care sunt vizibile la nivel de program. Segmentarea oferă un spațiu virtual de adrese pe blocuri (segmente) care corespund direct obiectelor la nivel de program. Din acest motiv, segmentul nu are o lungime fixă, deci chiar și dimensiunea segmentului poate fi modificată în timpul execuției programului. Protecția și împărțirea sunt, prin urmare, posibile la nivelul obiectului și există procese vizibile în care se efectuează segmentarea.
Dezvoltatorul de aplicații nu știe de paginare. El scrie programe ca în cazul în care memoria este liniară, iar sistemul de operare și procesorul sunt preocupați de partiționarea și conversia la adrese virtuale. Programator pe sisteme de segmentare, cu toate acestea, listează două părți ale adresei, segmentului și paginii în programele lor. Toate paginile sunt de aceeași dimensiune, în timp ce segmentele sunt diferite. Segmentarea are mai multe spații liniare de adresă, iar paginarea doar una. Segmentele permit partiționarea logică și protecția componentelor aplicației, iar paginile nu.
Pagingul, care este transparent pentru programator, elimină fragmentarea externă și astfel asigură o utilizare eficientă a memoriei principale. Piesele care se mută în și din memoria principală sunt fixe și cu aceeași dimensiune, astfel încât este posibil să se dezvolte algoritmi sofisticați de gestionare a memoriei care exploatează comportamentul programului. Segmentarea este vizibilă pentru dezvoltator și are capacitatea de a gestiona creșterea structurii datelor, modularitatea și suportul pentru schimb și protecție.
paginare | Segmentarea |
dimensiunea paginilor fixe | segmentele nu sunt fixate în mărime |
invizibil pentru programator | vizibil pentru programator |
un spațiu de adrese liniar | mai multe spații de adrese liniare |
nu permite partiționarea logică și protecția componentelor aplicației | permite |