Upravljanje pomnilnika je ena osnovnih funkcij operacijskega sistema. Sodobni operacijski sistemi omogočajo, da vsak postopek pridobi več virtualnega pomnilnika od skupne velikosti dejanskega (fizičnega) pomnilnika v določenem računalniškem sistemu. Glavni cilj upravljanja spomina je, da z združevanjem velikega, a počasnega pomnilnika z majhnim, a hitrostnim pomnilnikom dosežemo učinek večjega pomnilnika visoke hitrosti.
Ločevanje med fiksno in spremenljivo particijo je neuporabno v smislu porabe pomnilnika, saj fiksna particija povzroči notranjo, dinamično pa zunanjo razdrobljenost. Možna rešitev problema razdrobljenosti je omogočiti, da se postopek ne zapiše v neprekinjeni blok spomina. Program lahko poljubno raztresemo v pomnilniku. V tem primeru je delovni pomnilnik razdeljen na manjše bloke fiksne velikosti, imenovane okvirji. Logični naslovni program programa je razdeljen tudi na bloke enake velikosti, imenovane strani. Ko se program vnese v pomnilnik, se strani zapišejo v proste pomnilniške okvire. Zaradi lažjega prenosa programov z diska v delovni pomnilnik je disk razdeljen tudi na okvirje enake velikosti kot pomnilniški okviri. Tako se en okvir z diska zapiše v en okvir delovnega pomnilnika. Pozivni sistem deluje na naslednji način: ko je program sprejet za izvedbo, se izračuna njegova velikost, ki je izražena z zahtevanim številom strani. Če je zadostno število sličic brezplačno, se postopek zapiše v pomnilniško stran na stran. Hkrati se v tabelo okvirjev vnese število sličic, v katere je zapisana vsaka stran.
Uporabniški program in z njim povezane podatke lahko razdelimo na več segmentov. Segmenti vseh programov ne smejo biti enake velikosti, čeprav je največja dolžina segmenta. Tako kot pri straniranju je tudi logični naslov, ki uporablja segmentacijo, sestavljen iz dveh delov, v tem primeru števila segmentov in dislokacij znotraj tega segmenta. Zaradi uporabe segmentov različnih velikosti je segmentacija podobna dinamični particiji. Če sheme prekrivanja ali uporabe navideznega pomnilnika ni, se vsi segmenti programa naložijo v pomnilnik za izvedbo. Razlika v primerjavi z dinamično particijo je, da segmentacija lahko traja več kot ena particija in da ni treba, da je particija sosednja. Segmentacija rešuje problem notranje fragmentacije, vendar kot dinamična particija, problem zunanje fragmentacije ostaja. Ker pa je postopek razdeljen na več manjših delov, je zunanja razdrobljenost običajno manjša. Za razliko od pozivanja, ki je programerju nevidno, je segmentacija običajno vidna in primerna za organiziranje programov in podatkov. Za namen modularnega programiranja lahko program ali podatke nadalje razdelimo na več manjših segmentov. Slaba stran te tehnike je, da mora programer poznati omejitve največje velikosti segmenta. Naslednja ugodnost uporabe segmentov različnih velikosti je, da ni nobene potencialne povezave med logičnim in fizičnim naslovom. Podobno kot stransko iskanje tudi preprosta tehnika segmentacije uporablja tabelo segmentov za vsak postopek in seznam razpoložljivih blokov v glavnem pomnilniku.
Straniranje ponuja virtualni in fizični naslov, ter sekundarni pomnilniški prostor na blokih (straneh) enake dolžine. To omogoča, da se neprekinjenemu navideznemu naslovnemu prostoru dodeli proces disperzije (ni nujno, da se nenehno distribuira) v realnem naslovnem prostoru in sekundarnem pomnilniku. Celo stran se kot izraz nanaša na pomnilnik in ne na logične predmete, ki so vidni na programski ravni. Segmentacija ponuja navidezni naslov prostora na blokih (segmentih), ki neposredno ustrezajo objektom na programski ravni. Zaradi tega segment nima določene dolžine, zato se lahko med izvajanjem programa spremeni tudi velikost segmenta. Zaščita in delitev sta torej na ravni objekta možni in obstajajo vidni procesi, kjer se izvaja segmentacija.
Razvijalci aplikacij ne poznajo stranskih strani. Programe piše, kot da je pomnilnik linearen, operacijski sistem in procesor pa sta zaskrbljena zaradi njegove particije in pretvorbe v virtualne naslove. Programer v sistemih segmentacije pa v svojih programih navaja dva dela naslova, segmenta in strani. Vse strani so enake velikosti, segmenti pa so različni. Segmentacija ima več linearnih prostorskih naslovov in straniranje samo enega. Segmenti omogočajo logično particijo in zaščito komponent aplikacije, strani pa ne.
Straniranje, ki je programerju pregledno, odpravlja zunanjo razdrobljenost in s tem zagotavlja učinkovito uporabo glavnega pomnilnika. Kosi, ki se premikajo v glavni pomnilnik in iz njega, so fiksni in enake velikosti, zato je mogoče razviti sofisticirane algoritme za upravljanje pomnilnika, ki izkoriščajo vedenje programa. Segmentacija je razvidna razvijalcu in ima možnost upravljanja rasti strukture podatkov, modularnosti in podpore za izmenjavo in zaščito.
Straniranje | Segmentacija |
določena velikost strani | segmenti niso določeni po velikosti |
neviden za programerja | vidno za programerja |
en linearni naslovni prostor | več linearnih naslovov |
ne omogoča logičnega razdelitve in zaščite komponent aplikacije | omogoča |