Atminties valdymas yra viena iš pagrindinių operacinės sistemos funkcijų. Šiuolaikinės operacinės sistemos leidžia kiekvienam procesui gauti daugiau virtualiosios atminties nei bendras faktinės (fizinės) atminties dydis tam tikroje kompiuterio sistemoje. Pagrindinis atminties valdymo tikslas yra suderinti didelę, bet lėtą atmintį su maža, bet greita atmintimi, kad būtų pasiektas didesnės didelės spartos atminties efektas.
Atskyrimas tarp fiksuoto ir kintamo skaidymo yra neveiksmingas atminties panaudojimo prasme, nes dėl fiksuoto skaidymo vidinis susiskaidymas yra vidinis, o dinaminis. Galimas fragmentacijos problemos sprendimas - leisti procesą nerašyti į nuolatinės atminties bloką. Programa gali būti savavališkai išsklaidyta atmintyje. Šiuo atveju darbinė atmintis yra padalinta į mažesnius fiksuoto dydžio blokus, vadinamus rėmais. Programos loginė adreso erdvė taip pat yra padalinta į tokio paties dydžio blokus, vadinamus puslapiais. Kai programa įrašoma į atmintį, puslapiai įrašomi į laisvos atminties rėmus. Kad būtų lengviau perkelti programas iš disko į darbinę atmintį, diskas taip pat yra padalintas į tokio paties dydžio rėmus kaip ir atminties rėmai. Taigi, vienas rėmas iš disko yra įrašomas į vieną darbinės atminties rėmelį. Asmenų paieškos sistema veikia tokiu būdu: kai programa priimama vykdyti, apskaičiuojamas jos dydis, kuris išreiškiamas reikiamu puslapių skaičiumi. Jei pakankamas kadrų skaičius yra laisvas, procesas įrašomas atminties puslapyje kiekviename puslapyje. Tuo pačiu metu į rėmelių lentelę įvedamas kadrų, kuriuose yra parašytas kiekvienas puslapis, skaičius.
Vartotojo programą ir susijusius duomenis galima suskirstyti į keletą segmentų. Visų programų segmentai nebūtinai turi būti tokio paties dydžio, nors yra maksimalus segmentų ilgis. Kaip ir ieškant, segmentinį loginį adresą sudaro dvi dalys, šiuo atveju segmentų skaičius ir dislokacijos tame segmente. Dėl skirtingų dydžių segmentų naudojimo segmentai yra panašūs į dinaminį skaidymą. Jei nėra persidengiančios schemos arba nenaudojama virtualioji atmintis, visus programos segmentus reikia įkelti į atmintį, kad jie būtų vykdomi. Skirtumas, palyginti su dinaminiu skaidymu, yra tas, kad segmentavimas gali užtrukti daugiau nei vieną skaidinį ir tas skaidinys neturi būti greta. Segmentacija išsprendžia vidinio susiskaidymo problemą, tačiau, kaip ir dinaminis skaidymas, išlieka išorinio susiskaidymo problema. Kadangi procesas yra padalintas į keletą mažesnių dalių, išorinis suskaidymas paprastai yra mažesnis. Skirtingai nuo ieškos, kuri programuotojui nematoma, segmentacija paprastai yra matoma ir tinkama programoms ir duomenims tvarkyti. Modulinio programavimo tikslais programą ar duomenis galima dar padalyti į kelis mažesnius segmentus. Šios technikos neigiama pusė yra ta, kad programuotojas turi žinoti maksimalaus segmento dydžio apribojimus. Kitas patogumas naudojant skirtingo dydžio segmentus yra tas, kad nėra jokio loginio ir fizinio adresų ryšio. Panašiai kaip ieškant, paprasta segmentavimo technika kiekvienam procesui naudoja segmentų lentelę ir pagrindinėje atmintyje galimų blokų sąrašą.
Puslapiai pateikia virtualią ir fizinę adresų erdvę bei antrinę atminties vietą vienodo ilgio blokuose (puslapiuose). Tai leidžia nuolatinę virtualią adresų erdvę skirti paskirstymo procesui (nebūtinai nuolatos paskirstomam) tikroje adresų erdvėje ir antrinėje atmintyje. Net puslapis kaip terminas nurodo atmintį, o ne loginius objektus, kurie yra matomi programos lygiu. Segmentavimas suteikia virtualią adresų erdvę blokams (segmentams), kurie tiesiogiai atitinka objektus programos lygiu. Dėl šios priežasties segmentas neturi fiksuoto ilgio, todėl programos metu gali būti pakeistas net segmento dydis. Todėl apsauga ir padalijimas yra įmanomi objekto lygiu ir yra matomų procesų, kai atliekamas segmentavimas.
Programos kūrėjas nežino, kad ieškos. Jis rašo programas tarsi atmintis yra linijinė, o operacinė sistema ir procesorius yra susirūpinę dėl jos skaidymo ir konvertavimo į virtualius adresus. Tačiau segmentavimo sistemų programuotojas savo programose išvardija dvi adreso, segmento ir puslapio dalis. Visi puslapiai yra vienodo dydžio, o segmentai yra skirtingi. Segmentavimas turi keletą linijinių adresų vietų, o ieškos tik vieną. Segmentai leidžia logiškai atskirti ir apsaugoti programų komponentus, o puslapiai - ne.
Programuotojui skaidrus ieškos procesas pašalina išorinį suskaidymą ir tokiu būdu užtikrina efektyvų pagrindinės atminties naudojimą. Dalelės, kurios juda į pagrindinę atmintį ir iš jos, yra fiksuotos ir vienodo dydžio, todėl įmanoma sukurti sudėtingesnius atminties valdymo algoritmus, išnaudojančius programos elgesį. Segmentai yra matomi kūrėjui ir turi galimybę valdyti duomenų struktūros augimą, moduliškumą ir palaikyti keitimąsi bei apsaugą.
Puslapis | Segmentavimas |
fiksuotas puslapių dydis | segmentai nėra fiksuoti pagal dydį |
nematomas programuotojui | matomas programuotojui |
viena linijinė adreso sritis | daug linijinių adresų vietų |
neleidžia logiškai atskirti ir apsaugoti komponentų | leidžia |