Virtuellt minne ( engelska virtuellt minne ) är en metod för att hantera datorminne som låter dig köra program som kräver mer RAM - minne än vad som finns tillgängligt i datorn genom att automatiskt flytta delar av programmet mellan huvudminnet och sekundärminnet (till exempel en hårddisk ) [1] [2 ] [3] . För ett körande program är denna metod helt transparent och kräver ingen ytterligare ansträngning från programmerarens sida , men implementeringen av denna metod kräver både hårdvarustöd och support från operativsystemet.
I ett virtuellt minnessystem översätts adresserna som används av program , så kallade virtuella adresser , till fysiska adresser i datorns minne. Översättning av virtuella adresser till fysiska utförs av en hårdvara som kallas minneshanteringsenhet . För ett program ser huvudminnet ut som ett tillgängligt och sammanhängande adressutrymme, eller en uppsättning sammanhängande segment , oavsett om datorn har rätt mängd RAM-minne. Hanteringen av virtuella adressutrymmen, kartläggningen av fysiskt och virtuellt minne och förflyttningen av minnesfragment mellan primär och sekundär lagring utförs av operativsystemet (se sida ).
Användningen av virtuellt minne låter dig:
Virtuellt minne stöds för närvarande av hårdvara i de flesta moderna processorer [1] . Samtidigt används virtuellt minne relativt sällan i mikrokontroller och i specialsystem, där antingen mycket snabb drift krävs, eller det finns restriktioner för svarstiden ( realtidssystem ). Dessutom är multitasking och komplexa minneshierarkier mindre vanliga i sådana system .
På 1940- och 1950-talen var alla program större än RAM tvungna att innehålla RAM och extern minneshanteringslogik, såsom en överlagring . I detta avseende introducerades virtuellt minne inte bara för att öka mängden RAM, utan också för att göra en sådan ökning den enklaste att använda för programmerare. [4] För att stödja multiprogrammering och multitasking , delade många tidiga datorsystem minne mellan flera program utan virtuellt minne, med hjälp av segmentering (till exempel i PDP-10- datorer ).
Begreppet virtuellt minne introducerades först 1956 av den tyske fysikern Fritz-Rudolf Güntsch ( tyska: Fritz-Rudolf Güntsch ) vid Berlins tekniska universitet i sin doktorsavhandling "Logic design of a digital computer with multiple asynchronous rotating trums and automatic höghastighetsminneskontroll". Den beskriver en maskin med 6 block av magnetiskt kärnminne med en kapacitet på 100 ord vardera och ett adressutrymme på 1000 block med 100 ord. Maskinens hårdvara flyttar automatiskt block mellan huvud- och externt magnetiskt trumminne . [5] [6] Paging implementerades först vid University of Manchester som ett sätt att utöka minnet av en Atlas -dator genom att kombinera dess 16 000-ords magnetiska kärnminne med 96 000-ords magnetiska trumminne. Den första leveransen av Atlas-maskinen var 1962, men fungerande personsökningsprototyper utvecklades redan 1959. [4] [7] [8] År 1961 släppte Burroughs Corporation självständigt den första industriellt producerade virtuella minnesdatorn, B5000 , med segmentering istället för personsökning. [9] [10] År 1965 implementerades virtuellt minne i den inhemska maskinen BESM-6 , även om den implementerade mekanismen inte tillät att utöka processens 15-bitars adressutrymme och begränsade bekvämligheten med programmering. [elva]
Innan virtuellt minne kunde användas i vanliga operativsystem behövde ett antal problem lösas. Dynamisk adressöversättning krävde dyr och svårtillverkad specialutrustning. Tidiga implementeringar saktade ner minnesåtkomsten. [4] Det fanns farhågor om att nya systemomfattande algoritmer som använder externt minne skulle vara mindre effektiva än tidigare använda applikationsspecifika algoritmer. År 1969 var debatten om virtuellt minne för industriella datorer över: ett team av IBM-forskare ledda av David Sayre visade att deras virtuella minnessystem var överlägset på alla sätt de bästa manuellt styrda systemen. [4] [12] Den första minidatorn som använde virtuellt minne var norska Norsk Data ( n. ) Nord-1 ( n. ). På 1970-talet dök virtuella minnesimplementationer upp i andra minidatorer, den mest kända var VAX , som körde operativsystemet VMS .
Virtuellt minne på x86- arkitekturen implementerades med tillkomsten av det skyddade läget för 80286-processorn , men det använde minnessegmentering och segmentsökningsmetoden skalade inte bra för stora segmentstorlekar. 80386 -processorn introducerade stöd för personsökning utan att orsaka ett dubbelfel om ett sidfelundantag inträffar medan ett annat undantag bearbetas. Ovanpå personsökningssystemet fungerade den befintliga minnessegmenteringsmekanismen. Att ladda segmentbeskrivningar var dock en kostsam operation, vilket tvingade operativsystemutvecklare att förlita sig enbart på personsökningsmekanismen snarare än en kombination av personsökning och segmentering.
I de flesta moderna operativsystem organiseras virtuellt minne med hjälp av personsökning. RAM är uppdelat i sidor: minnesområden med en fast längd (till exempel 4096 byte [13] ), som är den minsta enheten för tilldelat minne (det vill säga, även en begäran om 1 byte från en applikation kommer att resultera i en sida minne som allokeras till den). En processorexekverande användartråd får åtkomst till minnet med hjälp av en virtuell minnesadress dividerat med sidnumret och förskjutningen inom sidan. Processorn översätter det virtuella sidnumret till dess motsvarande fysiska sidadress med hjälp av översättningsassocieringsbufferten (TLB). Om han misslyckades med att göra detta krävs buffertpåfyllning genom att hänvisa till sidtabellen (den så kallade Page Walk ), vilket kan göras antingen av processorn själv eller av operativsystemet (beroende på arkitekturen) [14] . Om sidan har bytts ut från RAM byter operativsystemet sidan från hårddisken under bearbetningen av sidfelhändelsen (se byte , sökning). När du begär minnesallokering kan operativsystemet "spola" sidor till hårddisken som inte har nåtts på länge. Kritiska data (till exempel koden för program som körs och körs, koden och minnet för systemkärnan ) finns vanligtvis i RAM (undantag finns, men de gäller inte de delar som är ansvariga för att bearbeta hårdvaruavbrott, arbeta med sidtabell och använda växlingsfilen).
En mekanism för att organisera virtuellt minne, där det virtuella utrymmet är uppdelat i delar av godtycklig storlek - segment. Denna mekanism gör det möjligt att till exempel dela upp processdata i logiska block. [15] För varje segment, såväl som för sidan, kan åtkomsträttigheter till det för användaren och hans processer tilldelas. När en process laddas placeras några av segmenten i RAM (för vart och ett av dessa segment letar operativsystemet efter en lämplig bit ledigt minne), och några av segmenten placeras i diskminnet. Segment av ett program kan uppta icke sammanhängande områden i RAM. Vid uppstart skapar systemet en tabell med processsegment (liknande en sidtabell ), i vilken för varje segment den fysiska startadressen för segmentet i RAM, segmentstorleken, åtkomstregler, ett tecken på modifiering, ett tecken på åtkomst till detta segment under det senaste tidsintervallet, och viss annan information anges. . Om de virtuella adressutrymmena för flera processer inkluderar samma segment, gör segmenttabellerna för dessa processer referenser till samma RAM-sektion i vilken detta segment laddas i en enda instans. Ett system med en segmentorganisation fungerar på samma sätt som ett system med en personsökningsorganisation: då och då uppstår avbrott på grund av bristen på nödvändiga segment i minnet, om minnet behöver frigöras laddas vissa segment av, med varje åtkomst till RAM, den virtuella adressen omvandlas till en fysisk. Vid åtkomst till minne kontrolleras det dessutom om åtkomst av önskad typ tillåts till detta segment.
En virtuell adress med en segmenterad minnesorganisation kan representeras av ett par (g, s), där g är segmentnumret och s är förskjutningen i segmentet. Den fysiska adressen erhålls genom att addera den fysiska startadressen för segmentet, som finns i segmenttabellen vid nummer g, och offset s.
Nackdelen med denna metod för minnesallokering är fragmentering på segmentnivå och långsammare adressöversättning jämfört med personsökning.
Det finns också en hybrid sidsegmentorganisation av virtuellt minne [13] .
av operativsystem | Aspekter|||||
---|---|---|---|---|---|
| |||||
Typer |
| ||||
Kärna |
| ||||
Processledning _ |
| ||||
Minneshantering och adressering | |||||
Ladda och initieringsverktyg | |||||
skal | |||||
Övrig | |||||
Kategori Wikimedia Commons Wikibooks Wiktionary |