Virtuellt minne

Fra IT2
Hopp til: navigasjon, søk

Begrepet virtuelt minne brukes ofte om teknikken til å bruke harddisk til å utvide primærminnet, men dette er kun en del av begrepet. Virtuelt minne omfatter også andre teknikker helt ned på maskinvarenivå. De fleste moderne systemer benytter seg av virtuelt minne i dag, med unntak av systemer ment for svært spesielle bruksområder. Moderne operativsystemer som Microsoft Windows og Unix bruker paging i kombinasjon med virtuelt minne («tilsynelatende minne», også kalt swapping). Med virtuelt minne settes en seksjon av platelageret til side, og gis funksjonalitet som minne på tross av den store hastighetsforskjellen mellom «ekte» minne og platelagere.

Virtuelt.png

Det virtuelle minnet får tildelt minneadresser akkurat som det ordinære minnet. En egen tabell holder rede på disse adressene og den samsvarende delen av platelageret. Om prosessoren (via hurtigminnet) ber om innholdet i en minneadresse som ligger i det virtuelle minnet, kastes lite brukt innhold i det egentlige minnet ut til fordel for de etterspurte dataene som ligger i det virtuelle minnet. Da dette er en svært dyr operasjon finnes det mange forskjellige algoritmer som prøver å gjøre dette på en best mulig måte. En typisk strategi vil være å kopiere over også nærliggende minneområder i tillegg til det som egentlig var etterspurt, da sjansen er stor for at også disse vil bli etterspurt i nær fremtid. Samtidig må også operativsystemet gjøre antagelser om hvilke data i minnet som vil bli minst etterspurt fremover, slik at man kan «kaste ut» disse fra minnet og dermed minimere sjansen for nye bytter mellom det egentlige minnet og det virtuelle minnet.

Blokkinndelt virtuelt minne

Omtrent alle systemer i dag som benytter seg av virtuelt minne bryter primærminnet opp i blokker av varierende lagringsplass og oppretter virtuelle adresser til hver av blokkene. Disse virtuelle adressene kan oversettes av maskinvaren til fysiske adresser i minnet. Rent fysisk kan gjerne dataen i en blokk være spredd (fragmentert) rundt i minnet, men for programmet som benytter blokken vil blokken se ut som én sammenhengende bit med minne. Fordelen med dette er at et eventuelt program kan forholde seg til én enkel blokk ved hjelp av dens virtuelle adresse, mens maskinvaren holder orden på den fysiske adressen til dataen blokken inneholder. Dette kan sees på som en form for maskinvarebasert abstraksjon av primærminnet.

Bruk av harddisk som ekstra minne

At data fra primærminnet lagres på harddisk er et naturlig følge av virtuelt minne. Lagringsplassen som settes av til dette kalles ofte for vekslefil eller swap-partisjon, avhengig av operativsystem. På grunn av abstraksjonen av primærminnet vil et program normalt ikke vite om tilhørende data ligger i primærminnet eller på harddisk. Det vil kun se en virtuell adresse og forholde seg til denne.

En vanlig myte er at dersom det er noe i vekslefilen, har ikke dette fått plass i primærminnet. Dette stemmer ikke, da vekslefilen og brukes til å ha "backup" av data fra primærminnet. Grunnen til dette kan beskrives slik;

Dersom brukeren av datamaskinen starter et program som tar mer minne enn det er plass til, må datamaskinen frigjøre plass til dette programmet. Den vil da måtte flytte data fra primærminnet til vekslefilen på harddisken, og deretter hente det nye programmet fra harddisken. Men dersom det allerede ligger en kopi av all data i primærminnet i vekslefilen vil den ikke trenge dette. Den kan hente opp det nye programmet med en gang uten å måtte flytte data til vekslefilen først. Dette reduserer flaskehalsen som oppstår ved bruk av vekslefil med svært mye.