Virtuel hukommelse ( engelsk virtual memory ) er en metode til styring af computerhukommelse , der giver dig mulighed for at udføre programmer, der kræver mere RAM , end der er tilgængeligt på computeren , ved automatisk at flytte dele af programmet mellem hovedhukommelsen og sekundært lager (f.eks. en harddisk ) [1] [2 ] [3] . For et kørende program er denne metode fuldstændig gennemsigtig og kræver ingen yderligere indsats fra programmørens side , men implementeringen af denne metode kræver både hardwaresupport og support fra operativsystemet.
I et virtuelt hukommelsessystem bliver de adresser, der bruges af programmer , kaldet virtuelle adresser , oversat til fysiske adresser i computerens hukommelse. Oversættelse af virtuelle adresser til fysiske udføres af et stykke hardware kaldet en hukommelsesstyringsenhed . For et program ser hovedhukommelsen ud som et tilgængeligt og sammenhængende adresseområde eller et sæt sammenhængende segmenter , uanset om computeren har den passende mængde RAM. Håndtering af virtuelle adresserum, kortlægning af fysisk og virtuel hukommelse og flytning af hukommelsesfragmenter mellem primær og sekundær lagring udføres af operativsystemet (se side ).
Brugen af virtuel hukommelse giver dig mulighed for at:
Virtuel hukommelse understøttes i øjeblikket af hardware i de fleste moderne processorer [1] . Samtidig bruges virtuel hukommelse relativt sjældent i mikrocontrollere og i specialsystemer, hvor der enten kræves meget hurtig drift, eller der er begrænsninger på responstiden ( realtidssystemer ). Multitasking og komplekse hukommelseshierarkier er også mindre almindelige i sådanne systemer .
I 1940'erne og 1950'erne skulle alle programmer større end RAM indeholde RAM og ekstern hukommelsesstyringslogik, såsom en overlay . I denne henseende blev virtuel hukommelse introduceret ikke kun for at øge mængden af RAM, men også for at gøre en sådan stigning til den nemmeste at bruge for programmører. [4] For at understøtte multiprogrammering og multitasking delte mange tidlige computersystemer hukommelse mellem flere programmer uden virtuel hukommelse ved at bruge segmentering (for eksempel i PDP-10- computere ).
Begrebet virtuel hukommelse blev først introduceret i 1956 af den tyske fysiker Fritz-Rudolf Güntsch ( tysk: Fritz-Rudolf Güntsch ) fra det tekniske universitet i Berlin i sin doktorafhandling "Logisk design af en digital computer med flere asynkrone roterende trommer og automatiske højhastighedshukommelseskontrol". Den beskriver en maskine med 6 blokke magnetisk kernehukommelse med en kapacitet på 100 ord hver og et adresseområde på 1000 blokke med 100 ord. Maskinens hardware flytter automatisk blokke mellem hoved- og ekstern magnetisk tromlehukommelse . [5] [6] Paging blev først implementeret på University of Manchester som en måde at udvide hukommelsen på en Atlas -computer ved at kombinere dens 16.000-ords magnetiske kernehukommelse med 96.000-ords magnetisk tromlehukommelse. Den første levering af Atlas-maskinen var i 1962, men der blev udviklet fungerende personsøgerprototyper allerede i 1959. [4] [7] [8] I 1961 udgav Burroughs Corporation uafhængigt den første industrielt producerede virtuelle hukommelsescomputer, B5000 , ved brug af segmentering i stedet for personsøgning. [9] [10] I 1965 blev virtuel hukommelse implementeret i den indenlandske maskine BESM-6 , selvom den implementerede mekanisme ikke tillod udvidelse af processens 15-bit adresserum og begrænsede programmerings bekvemmelighed. [elleve]
Før virtuel hukommelse kunne bruges i almindelige operativsystemer, skulle en række problemer løses. Dynamisk adresseoversættelse krævede dyrt og vanskeligt at fremstille specialudstyr. Tidlige implementeringer bremsede hukommelsesadgang. [4] Der var bekymring for, at nye systemdækkende algoritmer, der bruger ekstern hukommelse, ville være mindre effektive end tidligere anvendte applikationsspecifikke algoritmer. I 1969 var debatten om virtuel hukommelse for industrielle computere forbi: et hold af IBM-forskere ledet af David Sayre viste, at deres virtuelle hukommelsessystem var overlegent på alle måder i forhold til de bedste manuelt betjente systemer. [4] [12] Den første minicomputer , der brugte virtuel hukommelse, var den norske Norsk Data ( n. ) Nord-1 ( n. ). I 1970'erne dukkede virtuelle hukommelsesimplementeringer op i andre minicomputere, den bedst kendte er VAX , der kører VMS -operativsystemet .
Virtuel hukommelse på x86 -arkitekturen blev implementeret med fremkomsten af den beskyttede tilstand af 80286-processoren , men den brugte hukommelsessegmentering, og segmentsøgningsmetoden skaleres ikke godt til store segmentstørrelser. 80386 - processoren introducerede understøttelse af personsøgning uden at forårsage en dobbeltfejl, hvis en sidefejlundtagelse opstår, mens en anden undtagelse behandles. Oven på personsøgningssystemet fungerede den eksisterende hukommelsessegmenteringsmekanisme. Indlæsning af segmentbeskrivelser var imidlertid en bekostelig operation, der tvang operativsystemudviklere til udelukkende at stole på personsøgningsmekanismen frem for en kombination af personsøgning og segmentering.
I de fleste moderne operativsystemer organiseres virtuel hukommelse ved hjælp af personsøgning. RAM er opdelt i sider: hukommelsesområder med en fast længde (for eksempel 4096 bytes [13] ), som er minimumsenheden af allokeret hukommelse (det vil sige, at selv en anmodning om 1 byte fra en applikation vil resultere i en side af hukommelse, der er allokeret til det). En processor-udførende brugertråd får adgang til hukommelsen ved hjælp af en virtuel hukommelsesadresse divideret med sidetallet og forskydningen på siden. Processoren oversætter det virtuelle sidenummer til dets tilsvarende fysiske sideadresse ved hjælp af translation association buffer (TLB). Hvis han undlod at gøre dette, så er buffergenopfyldning påkrævet ved at henvise til sidetabellen (den såkaldte Page Walk ), som enten kan udføres af processoren selv eller af operativsystemet (afhængigt af arkitekturen) [14] . Hvis siden er blevet skiftet ud af RAM, så skifter operativsystemet siden fra harddisken under behandlingen af sidefejlhændelsen (se swap , paging). Når du anmoder om hukommelsesallokering, kan operativsystemet "skylle" sider til harddisken, som ikke har været tilgået i lang tid. Kritiske data (for eksempel koden for kørende og kørende programmer, koden og hukommelsen til systemkernen ) er normalt placeret i RAM (der findes undtagelser, men de vedrører ikke de dele, der er ansvarlige for at behandle hardwareafbrydelser, arbejde med sidetabel og ved hjælp af swap-filen).
En mekanisme til at organisere virtuel hukommelse, hvor det virtuelle rum er opdelt i dele af vilkårlig størrelse - segmenter. Denne mekanisme gør det for eksempel muligt at opdele procesdata i logiske blokke. [15] For hvert segment, såvel som for siden, kan der tildeles adgangsrettigheder til det for brugeren og dennes processer. Når en proces indlæses, placeres nogle af segmenterne i RAM (for hvert af disse segmenter leder operativsystemet efter et passende stykke ledig hukommelse), og nogle af segmenterne placeres i diskhukommelsen. Segmenter af et program kan optage ikke-sammenhængende områder i RAM. Ved opstart opretter systemet en tabel over processegmenter (svarende til en sidetabel ), hvori for hvert segment den fysiske startadresse på segmentet i RAM, segmentstørrelsen, adgangsregler, et tegn på ændring, et tegn på adgang til dette segment i det sidste tidsinterval, og nogle andre oplysninger er angivet. Hvis de virtuelle adresserum for flere processer inkluderer det samme segment, så refererer segmenttabellerne for disse processer til den samme RAM-sektion, hvori dette segment er indlæst i en enkelt instans. Et system med en segmentorganisation fungerer på samme måde som et system med en personsøgningsorganisation: fra tid til anden opstår der afbrydelser på grund af manglen på de nødvendige segmenter i hukommelsen, hvis hukommelsen skal frigøres, aflæses nogle segmenter, med hver adgang til RAM, den virtuelle adresse konverteres til en fysisk. Derudover kontrolleres det ved adgang til hukommelse, om adgang af den påkrævede type er tilladt til dette segment.
En virtuel adresse med en segmenteret hukommelsesorganisation kan repræsenteres af et par (g, s), hvor g er segmentnummeret, og s er forskydningen i segmentet. Den fysiske adresse fås ved at tilføje den fysiske startadresse for segmentet, som findes i segmenttabellen ved nummer g, og offset s.
Ulempen ved denne metode til hukommelsesallokering er fragmentering på segmentniveau og langsommere adresseoversættelse sammenlignet med personsøgning.
Der er også en hybrid sidesegmentorganisation af virtuel hukommelse [13] .
af operativsystemer | Aspekter|||||
---|---|---|---|---|---|
| |||||
Typer |
| ||||
Nucleus |
| ||||
Procesledelse _ |
| ||||
Hukommelseshåndtering og adressering | |||||
Indlæsnings- og initialiseringsværktøjer | |||||
skal | |||||
Andet | |||||
Kategori Wikimedia Commons Wikibooks Wiktionary |