Muistin hallinta on yksi käyttöjärjestelmän perustoiminnoista. Nykyaikaiset käyttöjärjestelmät antavat jokaisen prosessin saada enemmän virtuaalimuistia kuin todellisen (fyysisen) muistin kokonaismäärä tietyssä tietokonejärjestelmässä. Muistinhallinnan päätavoite on, että yhdistämällä suuri, mutta hidas muisti pieneen, mutta nopeaan muistiin, saavutetaan suuremman nopean muistin vaikutus.
Kiinteän ja muuttuvan osion erottaminen on tehoton muistin hyödyntämisen kannalta, koska kiinteä osio johtaa sisäiseen, kun taas ulkoinen pirstoutumiseen. Mahdollinen ratkaisu pirstoutumisen ongelmaan on antaa prosessin olla kirjoittamatta jatkuvalle muistilohkolle. Ohjelma voidaan hajottaa mielivaltaisesti muistiin. Tässä tapauksessa työmuisti on jaettu pienempiin kiinteän kokoisiin lohkoihin, joita kutsutaan kehyksiksi. Ohjelman looginen osoitetila on myös jaettu samankokoisiin lohkoihin, joita kutsutaan sivuiksi. Kun ohjelma syötetään muistiin, sivut kirjoitetaan vapaisiin muistikehyksiin. Ohjelmien siirron helpottamiseksi levyltä työmuistiin levy on myös jaettu kehyksiin, jotka ovat samankokoisia kuin muistikehykset. Siten yksi kehys levyltä kirjoitetaan yhdeksi työmuistin kehykseksi. Hakulaite toimii seuraavalla tavalla: kun ohjelma hyväksytään suoritettavaksi, sen koko lasketaan, joka ilmaistaan vaaditulla sivumäärällä. Jos riittävä määrä kehyksiä on vapaa, prosessi tallennetaan muistilla sivua kohden. Samanaikaisesti ruutujen taulukkoon kirjoitetaan niiden kehysten lukumäärä, joissa jokainen sivu on kirjoitettu.
Käyttäjäohjelma ja siihen liittyvät tiedot voidaan jakaa useisiin segmentteihin. Kaikkien ohjelmien segmenttien ei tarvitse olla samankokoisia, vaikka segmenttien enimmäispituus onkin. Kuten sivunhaussa, segmentointia käyttävä looginen osoite koostuu kahdesta osasta, tässä tapauksessa segmenttien lukumäärästä ja sijoittelusta kyseisen segmentin sisällä. Erikokoisten segmenttien käytön vuoksi segmentointi on samanlainen kuin dynaaminen osiointi. Jos päällekkäismalleja tai virtuaalimuistia ei käytetä, vaaditaan, että kaikki ohjelmasegmentit ladataan muistiin suorittamista varten. Ero dynaamiseen osiointiin verrattuna on se, että segmentointi voi viedä useamman kuin yhden osion ja että osion ei tarvitse olla vierekkäinen. Segmentointi ratkaisee sisäisen pirstoutumisen ongelman, mutta dynaamisen osittumisen lisäksi ulkoisen pirstoutumisen ongelma on edelleen olemassa. Koska prosessi on jaettu lukuisiin pienempiin osiin, ulkoinen pirstoutuminen on kuitenkin tyypillisesti pienempi. Toisin kuin ohjelmoijalle näkymätön haku, segmentointi on yleensä näkyvää ja sopivaa ohjelmien ja datan järjestämiseen. Modulaarista ohjelmointia varten ohjelma tai data voidaan jakaa edelleen useisiin pienempiin segmentteihin. Tämän tekniikan haittapuoli on, että ohjelmoijan on tunnettava segmentin enimmäiskoon rajoitukset. Seuraava mukavuus erikokoisten segmenttien käyttämisessä on, että loogisen ja fyysisen osoitteen välillä ei ole tulevaisuuden yhteyttä. Kuten haku, yksinkertainen segmentointitekniikka käyttää segmenttitaulukoita jokaiselle prosessille ja luetteloa päämuistissa käytettävissä olevista lohkoista.
Haku tarjoaa virtuaalisen ja fyysisen osoitetilan ja toissijaisen muistitilan yhtä pitkillä lohkoilla (sivuilla). Tämä sallii jatkuvan virtuaalisen osoitealueen allokoinnin hajotusprosessille (ei välttämättä jatkuvasti hajautetulle) todellisessa osoitetilassa ja toissijaisessa muistissa. Jopa sivu viittaa terminä pikemminkin muistiin kuin loogisiin objekteihin, jotka ovat näkyvissä ohjelmatasolla. Segmentointi toimittaa virtuaalisen osoitealueen lohkoille (segmenteille), jotka vastaavat suoraan objektit ohjelmatasolla. Tämän vuoksi segmentillä ei ole kiinteää pituutta, joten jopa segmentin kokoa voidaan muuttaa ohjelman suorittamisen aikana. Suojaus ja jakaminen ovat siksi mahdollista objektitasolla, ja segmentoinnissa tapahtuu näkyviä prosesseja.
Sovelluskehittäjä ei ole tietoinen sivusta. Hän kirjoittaa ohjelmia ikään kuin muisti on lineaarinen, ja käyttöjärjestelmä ja prosessori ovat huolissaan sen osioinnista ja muuntamisesta virtuaaliosoitteiksi. Segmentointijärjestelmien ohjelmoija kuitenkin luettelee kaksi osaa osoitteen, segmentin ja sivun ohjelmissaan. Kaikki sivut ovat samankokoisia, kun taas segmentit ovat erilaiset. Segmentoinnissa on useita lineaarisia osoiteväliä ja sivulla vain yksi. Segmentit sallivat loogisen osituksen ja sovelluskomponenttien suojauksen, ja sivut eivät.
Sivunvaihto, joka on avoin ohjelmoijalle, eliminoi ulkoisen pirstoutumisen ja varmistaa siten päämuistin tehokkaan käytön. Päämuistista sisään ja ulos liikkuvat palat ovat kiinteitä ja samankokoisia, joten on mahdollista kehittää hienostuneita muistinhallintaalgoritmeja, jotka hyödyntävät ohjelman käyttäytymistä. Segmentointi on kehittäjälle näkyvää ja sillä on kyky hallita tietorakenteen kasvua, modulaarisuutta sekä tukea vaihtoa ja suojausta varten.
Hakulaite | jakautuminen |
kiinteä sivukoko | segmenttien koko ei ole kiinteä |
näkymätön ohjelmoijalle | näkyvissä ohjelmoijalle |
yksi lineaarinen osoitetila | useita lineaarisia osoiteväliä |
ei salli loogista osiointia ja sovelluskomponenttien suojausta | sallii |