Hukommelsesadministration er en af de grundlæggende funktioner i operativsystemet. Moderne operativsystemer tillader, at hver proces får mere virtuel hukommelse end den samlede størrelse af den faktiske (fysiske) hukommelse på et givet computersystem. Hovedmålet med hukommelsesstyring er, at ved at kombinere stor, men langsom hukommelse med lille, men højhastighedshukommelse, for at opnå effekten af større højhastighedshukommelse.
Adskillelse mellem fast og variabel partitionering er ineffektiv med hensyn til hukommelsesudnyttelse, da fast partitionering resulterer i intern, mens dynamisk er ekstern fragmentering. En mulig løsning på problemet med fragmentering er at tillade, at processen ikke skrives til en kontinuerlig hukommelsesblok. Programmet kan spredes vilkårligt i hukommelsen. I dette tilfælde er arbejdshukommelsen opdelt i mindre blokke med fast størrelse kaldet rammer. Programmets logiske adresserum er også opdelt i blokke i samme størrelse, kaldet sider. Når et program indtastes i hukommelsen, skrives siderne i frie hukommelsesrammer. For let at overføre programmer fra en disk til en arbejdshukommelse er disken også opdelt i rammer i samme størrelse som hukommelsesrammerne. Således skrives en ramme fra disken til en ramme i arbejdshukommelsen. Personsidesystemet fungerer på følgende måde: Når programmet accepteres til udførelse, beregnes dets størrelse, hvilket udtrykkes med det krævede antal sider. Hvis et tilstrækkeligt antal rammer er gratis, registreres processen på hukommelsessiden pr. Side. Samtidig indtastes antallet af rammer, som hver side skrives i, i rammetabellen.
Brugerprogrammet og tilhørende data kan opdeles i et antal segmenter. Segmenter af alle programmer behøver ikke at have samme størrelse, selvom der er en maksimal segmentlængde. Som med personsøgning består den logiske adresse, der bruger segmenteringen, af to dele, i dette tilfælde antallet af segmenter og forskydninger inden for det segment. På grund af brugen af segmenter i forskellige størrelser ligner segmentering dynamisk partitionering. I mangel af et overlay-skema eller brug af virtuel hukommelse kræves det, at alle programsegmenter indlæses i hukommelsen til udførelse. Forskellen sammenlignet med dynamisk partitionering er, at segmentering kan tage mere end en partition, og denne partition behøver ikke at være tilstødende. Segmentering løser problemet med intern fragmentering, men såvel som dynamisk partitionering forbliver problemet med ekstern fragmentering. Fordi processen er opdelt i et antal mindre dele, er den ydre fragmentering imidlertid typisk mindre. I modsætning til personsøgning, der er usynlig for programmereren, er segmentering normalt synlig og egnet til at organisere programmer og data. Med henblik på modulær programmering kan programmet eller dataene yderligere opdeles i flere mindre segmenter. Ulempen med denne teknik er, at programmereren skal kende begrænsningerne for den maksimale segmentstørrelse. Den næste bekvemmelighed ved at bruge segmenter i forskellige størrelser er, at der ikke er nogen potentiel forbindelse mellem logiske og fysiske adresser. I lighed med personsøgning bruger den enkle segmenteringsteknik segmenttabel til hver proces og en liste over tilgængelige blokke i hovedhukommelsen.
Personsøgning leverer et virtuelt og et fysisk adresserum og et sekundært hukommelsesområde på blokke (sider) af samme længde. Dette tillader, at det kontinuerlige virtuelle adresserum tildeles til processen med spredning (ikke nødvendigvis kontinuerligt distribueret) i den virkelige adresserum og sekundær hukommelse. Selv siden refererer som et udtryk til hukommelse snarere end til logiske objekter, der er synlige på programniveau. Segmentering leverer et virtuelt adresserum på blokke (segmenter), der direkte svarer til objekter på programniveau. På grund af dette har segmentet ingen fast længde, så selv segmentstørrelsen kan ændres under programudførelse. Beskyttelse og opdeling er derfor mulig på objektniveau, og der er synlige processer, hvor segmentering udføres.
Programudvikleren er ikke opmærksom på søgen. Han skriver programmer som om hukommelsen er lineær, og operativsystemet og processoren er bekymrede over dens partitionering og konvertering til virtuelle adresser. Programmerer på segmenteringssystemer viser imidlertid to dele af adressen, segmentet og siden i deres programmer. Alle sider har samme størrelse, mens segmenterne er forskellige. Segmentering har flere lineære adresserum og søger kun et. Segmenter tillader logisk partitionering og beskyttelse af applikationskomponenter, og sider gør det ikke.
Personsøgning, som er gennemsigtig for programmereren, eliminerer ekstern fragmentering og sikrer således effektiv brug af hovedhukommelsen. De stykker, der bevæger sig ind og ud af hovedhukommelsen, er faste og af samme størrelse, så det er muligt at udvikle sofistikerede hukommelsesstyringsalgoritmer, der udnytter programmets opførsel. Segmentering er synlig for udvikleren og har evnen til at styre væksten af datastruktur, modularitet og support til udveksling og beskyttelse.
Paging | Segmentering |
fast sidestørrelse | segmenterne er ikke faste i størrelse |
usynlig for programmerer | synlig for programmerer |
et lineært adresserum | flere lineære adresserum |
tillader ikke logisk partitionering og beskyttelse af applikationskomponenter | tillader |