Minneshantering är en av operativsystemets grundläggande funktioner. Moderna operativsystem tillåter varje process att få mer virtuellt minne än den totala storleken på det faktiska (fysiska) minnet på ett visst datorsystem. Huvudsyftet med minneshantering är att genom att kombinera stort men långsamt minne med liten men höghastighetsminne för att uppnå effekten av större höghastighetsminne.
Att skilja mellan fast och variabel partitionering är ineffektiv när det gäller minnesutnyttjande, eftersom fast partitionering resulterar i intern, medan dynamisk i extern fragmentering. En möjlig lösning på problemet med fragmentering är att tillåta processen inte att skrivas till ett kontinuerligt minnesblock. Programmet kan spridas godtyckligt i minnet. I det här fallet är arbetsminnet uppdelat i mindre block med fast storlek som kallas ramar. Programmets logiska adressutrymme är också indelat i block av samma storlek, så kallade sidor. När ett program är inmatat i minnet skrivs sidorna i fria minnesramar. För att underlätta överföring av program från en skiva till ett arbetsminne delas skivan också in i ramar av samma storlek som minnesramarna. Således skrivs en ram från skivan till en ram i arbetsminnet. Personsökningssystemet fungerar på följande sätt: När programmet godkänns för körning beräknas dess storlek, vilket uttrycks med det önskade antalet sidor. Om ett tillräckligt antal bilder är lediga registreras processen på minnesidan per sida. Samtidigt anges antalet ramar där varje sida skrivs in i ramtabellen.
Användarprogrammet och tillhörande data kan delas in i ett antal segment. Segment av alla program behöver inte vara av samma storlek, även om det finns en maximal segmentlängd. Liksom vid personsökning består den logiska adressen som använder segmenteringen av två delar, i det här fallet antalet segment och dislokationer inom det här segmentet. På grund av användningen av segment av olika storlekar, liknar segmentering till dynamisk partitionering. I avsaknad av ett överlagringsschema eller användning av virtuellt minne krävs det att alla programsegment laddas i minnet för exekvering. Skillnaden jämfört med dynamisk partitionering är att segmenteringen kan ta mer än en partition, och den partitionen behöver inte vara angränsande. Segmentering löser problemet med intern fragmentering, men såväl som dynamisk partitionering kvarstår problemet med extern fragmentering. Men eftersom processen är uppdelad i ett antal mindre delar är den externa fragmenteringen vanligtvis mindre. Till skillnad från personsökning som är osynlig för programmeraren är segmentering vanligtvis synlig och lämplig för organisering av program och data. För modulär programmering kan programmet eller data delas upp ytterligare i flera mindre segment. Nackdelen med denna teknik är att programmeraren måste känna till gränserna för den maximala segmentstorleken. Nästa bekvämlighet med att använda segment av olika storlekar är att det inte finns någon potentiell koppling mellan logiska och fysiska adresser. I likhet med personsökning använder den enkla segmenteringstekniken segmenttabellen för varje process och en lista över tillgängliga block i huvudminnet.
Paging levererar ett virtuellt och ett fysiskt adressutrymme och ett sekundärt minnesutrymme på block (sidor) med lika längder. Detta gör att det kontinuerliga virtuella adressutrymmet kan allokeras till dispersionsprocessen (ej nödvändigtvis kontinuerligt distribuerad) i det verkliga adressutrymmet och sekundärt minne. Även sidan, som en term, avser minne snarare än logiska objekt som är synliga på programnivå. Segmentering ger ett virtuellt adressutrymme på block (segment) som direkt motsvarar objekt på programnivå. På grund av detta har segmentet ingen fast längd, så även segmentstorleken kan ändras under programkörning. Skydd och delning är därför möjliga på objektnivå, och det finns synliga processer där segmentering utförs.
Applikationsutvecklaren är omedveten om sökningen. Han skriver program som om minnet är linjärt och operativsystemet och processorn är oroliga för partitioneringen och konverteringen till virtuella adresser. Programmerare på segmenteringssystem listar dock två delar av adress, segment och sida i sina program. Alla sidor är av samma storlek medan segmenten är olika. Segmentering har flera linjära adressrum och endast en sökning. Segment tillåter logisk partitionering och skydd av applikationskomponenter, och sidor gör det inte.
Paging, som är transparent för programmeraren, eliminerar extern fragmentering och därigenom säkerställer effektiv användning av huvudminnet. Bitarna som rör sig in och ut ur huvudminnet är fasta och lika stora, så det är möjligt att utveckla sofistikerade minneshanteringsalgoritmer som utnyttjar programmets beteende. Segmentering är synlig för utvecklaren och har förmåga att hantera tillväxten av datastruktur, modularitet och stöd för utbyte och skydd.
personsökning | segmente~~POS=TRUNC |
fasta sidor storlek | segmenten är inte fixade i storlek |
osynlig för programmeraren | synlig för programmeraren |
ett linjärt adressutrymme | flera linjära adressrum |
tillåter inte logisk partitionering och skydd av applikationskomponenter | tillåter |