Atmiņas pārvaldība ir viena no operētājsistēmas pamatfunkcijām. Mūsdienu operētājsistēmas ļauj katram procesam iegūt vairāk virtuālās atmiņas nekā faktiskās (fiziskās) atmiņas kopējais lielums attiecīgajā datorsistēmā. Galvenais atmiņas pārvaldības mērķis ir apvienot lielu, bet lēnu atmiņu ar mazu, bet ātrgaitas atmiņu, lai panāktu lielāku ātrdarbīgu atmiņu.
Atdalīšana starp fiksēto un mainīgo sadalīšanu nav efektīva atmiņas izmantojuma ziņā, jo fiksēta sadalīšana rada iekšēju, bet dinamiska - ārēju sadrumstalotību. Iespējamais sadrumstalotības problēmas risinājums ir ļaut procesu nerakstīt nepārtrauktas atmiņas blokā. Programmu var patvaļīgi izkliedēt atmiņā. Šajā gadījumā darba atmiņa tiek sadalīta mazākos fiksēta lieluma blokos, ko sauc par rāmjiem. Programmas loģiskās adreses telpa ir sadalīta arī tāda paša izmēra blokos, ko sauc par lapām. Kad programma tiek ievadīta atmiņā, lapas tiek ierakstītas brīvos atmiņas rāmjos. Lai atvieglotu programmu pārsūtīšanu no diska uz darba atmiņu, disks ir sadalīts arī tāda paša izmēra kadros kā atmiņas kadri. Tādējādi viens rāmis no diska tiek ierakstīts vienā darba atmiņas rāmī. Peidžeru sistēma darbojas šādā veidā: kad programma tiek pieņemta izpildei, tiek aprēķināts tās lielums, kas tiek izteikts ar nepieciešamo lappušu skaitu. Ja pietiekams kadru skaits ir brīvs, process tiek ierakstīts atmiņas lapā katrā lappusē. Tajā pašā laikā rāmju tabulā tiek ierakstīts kadru skaits, kurā ir uzrakstīta katra lapa.
Lietotāja programmu un saistītos datus var iedalīt vairākos segmentos. Visu programmu segmentiem nav jābūt vienāda lieluma, lai gan ir maksimālais segmenta garums. Līdzīgi kā peidžeriem, loģiskā adrese, kurā tiek izmantots segmentēšana, sastāv no divām daļām, šajā gadījumā segmentu skaita un dislokācijas šajā segmentā. Tā kā tiek izmantoti dažāda lieluma segmenti, segmentēšana ir līdzīga dinamiskai sadalīšanai. Ja nepastāv pārklājuma shēma vai netiek izmantota virtuālā atmiņa, izpildei visi programmas segmenti ir jāielādē atmiņā. Atšķirība salīdzinājumā ar dinamisko nodalījumu ir tā, ka segmentēšana var aizņemt vairāk nekā vienu nodalījumu un šim nodalījumam nav jābūt blakus. Segmentācija atrisina iekšējās sadrumstalotības problēmu, bet, tāpat kā dinamiska sadalīšana, saglabājas arī ārējās sadrumstalotības problēma. Tā kā process ir sadalīts vairākās mazākās daļās, ārējā fragmentācija parasti ir mazāka. Atšķirībā no lappuses, kas programmētājam ir neredzama, segmentēšana parasti ir redzama un piemērota programmu un datu organizēšanai. Modulāras programmēšanas nolūkos programmu vai datus var sīkāk sadalīt vairākos mazākos segmentos. Šīs tehnikas negatīvie ir tas, ka programmētājam jāzina maksimālā segmenta lieluma ierobežojumi. Nākamā dažāda lieluma segmentu izmantošanas ērtība ir tāda, ka starp loģiskajām un fiziskajām adresēm nepastāv iespējamā saikne. Līdzīgi kā peidžeriem, vienkāršajā segmentēšanas tehnikā katram procesam tiek izmantota segmentu tabula un galvenajā atmiņā pieejamo bloku saraksts.
Lappuse nodrošina virtuālu un fizisku adrešu telpu un sekundāru atmiņas vietu vienāda garuma blokos (lappusēs). Tas ļauj pastāvīgo virtuālo adrešu telpu sadalīt (ne vienmēr nepārtraukti sadalītās) izkliedes procesam reālajā adreses telpā un sekundārajā atmiņā. Pat lapa kā termins attiecas uz atmiņu, nevis uz loģiskiem objektiem, kas ir redzami programmas līmenī. Segmentācija nodrošina virtuālu adrešu telpu blokiem (segmentiem), kas tieši atbilst objektiem programmas līmenī. Tādēļ segmentam nav noteikta garuma, tāpēc programmas izpildes laikā var mainīt pat segmenta lielumu. Tāpēc aizsardzība un dalīšana ir iespējama objekta līmenī, un ir redzami procesi, kur tiek veikta segmentēšana.
Lietojumprogrammu izstrādātājs nezina par lapošanu. Viņš raksta programmas tā, it kā atmiņa būtu lineāra, un operētājsistēma un procesors ir nobažījušies par tās sadalīšanu un konvertēšanu uz virtuālajām adresēm. Tomēr segmentēšanas sistēmu programmētājs savās programmās norāda divas adreses, segmenta un lapas daļas. Visas lapas ir vienāda lieluma, savukārt segmenti ir atšķirīgi. Segmentācijā ir vairākas lineāras adreses telpas, un peidžerā ir tikai viena. Segmenti ļauj loģiski sadalīt un aizsargāt lietojumprogrammu komponentus, un lapas to nedara.
Lappuse, kas programmētājam ir caurspīdīga, novērš ārēju sadrumstalotību un tādējādi nodrošina efektīvu galvenās atmiņas izmantošanu. Daļas, kas pārvietojas galvenajā atmiņā un no tās, ir fiksētas un vienāda lieluma, tāpēc ir iespējams izstrādāt sarežģītus atmiņas pārvaldības algoritmus, kas izmanto programmas uzvedību. Segmentācija ir redzama izstrādātājam, un tai ir spēja pārvaldīt datu struktūras pieaugumu, modularitāti, kā arī apmaiņas un aizsardzības atbalstu.
Peidžēšana | Segmentācija |
fiksēts lappuses lielums | segmentu lielums nav noteikts |
neredzams programmētājam | redzams programmētājam |
viena lineārā adreses telpa | vairākas lineāras adreses atstarpes |
neļauj loģiski sadalīt un aizsargāt lietojumprogrammu komponentus | atļauj |