Virtuellt adressutrymme

Virtual address space and physical address space relationship.svg

Inom datorer är ett virtuellt adressutrymme ( VAS ) eller adressutrymme uppsättningen av intervall av virtuella adresser som ett operativsystem gör tillgängliga för en process. Utbudet av virtuella adresser börjar vanligtvis på en låg adress och kan sträcka sig till den högsta adressen som tillåts av datorns instruktionsuppsättningsarkitektur och stöds av operativsystemets pekarstorleksimplementering, som kan vara 4 byte för 32-bitars eller 8 byte för 64-bitars OS-versioner. Detta ger flera fördelar, varav en är säkerhet genom processisolering förutsatt att varje process ges ett separat adressutrymme .

Exempel

I följande beskrivning kommer den använda terminologin att vara speciell för operativsystemet Windows NT , men koncepten är tillämpliga på andra operativsystem för virtuellt minne.

När en ny applikation på ett 32-bitars OS exekveras, har processen en 4 GiB VAS: var och en av minnesadresserna (från 0 till 2 32 − 1) i det utrymmet kan ha en enda byte som värde. Inledningsvis har ingen av dem värden ('-' representerar inget värde). Att använda eller ställa in värden i ett sådant VAS skulle orsaka ett minnesundantag .

0 4 GiB VAS |------------------------------------------------ -|

Därefter mappas programmets körbara fil till VAS. Adresser i processens VAS mappas till byte i exe-filen. OS hanterar mappningen:

0 4 GiB VAS |---vvv------------------------------------------------| kartläggning ||| fil bytes app

V:n är värden från bytes i den mappade filen . Därefter mappas nödvändiga DLL- filer (detta inkluderar anpassade bibliotek såväl som systemfiler som kernel32.dll och user32.dll ):

0 4 GiB VAS |---vvv--------vvvvvv---vvvv------------------------| kartläggning ||| |||||| |||| filbytes appkärnanvändare

Processen börjar sedan exekvera bytes i exe-filen. Det enda sättet som processen kan använda eller ställa in '-'-värden i dess VAS är att be operativsystemet mappa dem till byte från en fil. Ett vanligt sätt att använda VAS-minnet på detta sätt är att mappa det till sidfilen . Sidfilen är en enda fil, men flera distinkta uppsättningar av sammanhängande byte kan mappas till en VAS:

0 4 GiB VAS |---vvv--------vvvvvv---vvvv----vv---v----vvv--| kartläggning ||| |||||| |||| || | ||| filbytes appkärnanvändare system_page_file

Och olika delar av sidfilen kan mappas in i VAS för olika processer:

0 4 GiB VAS 1 |---vvvv-------vvvvvv---vvvv----vv---v----vvv--| kartläggning |||| |||||| |||| || | ||| filbytes app1 app2 kärnanvändare system_page_filmapping |||| |||||| |||| || | VAS 2 |--------vvvv--vvvvvv---vvvv-------vv---v------|

Microsoft Windows 32-bitars, som standard, görs endast 2 GiB tillgängliga för processer för eget bruk. De andra 2 GiB används av operativsystemet. På senare 32-bitarsversioner av Microsoft Windows är det möjligt att utöka det virtuella adressutrymmet i användarläge till 3 GiB medan endast 1 GiB finns kvar för virtuellt adressutrymme i kärnläge genom att markera programmen som IMAGE_FILE_LARGE_ADDRESS_AWARE och aktivera /3GB-växeln i filen boot.ini.

På Microsoft Windows 64-bitars, i en process som kör en körbar fil som var länkad med /LARGEADDRESSAWARE:NO, begränsar operativsystemet artificiellt användarlägesdelen av processens virtuella adressutrymme till 2 GiB. Detta gäller både 32- och 64-bitars körbara filer. Processer som kör körbara filer som var länkade med alternativet /LARGEADDRESSAWARE:YES, som är standard för 64-bitars Visual Studio 2010 och senare, har tillgång till mer än 2 GiB virtuellt adressutrymme: upp till 4 GiB för 32-bitars körbara filer, upp till 8 TiB för 64-bitars körbara filer i Windows genom Windows 8, och upp till 128 TiB för 64-bitars körbara filer i Windows 8.1 och senare.

Allokering av minne via C :s malloc etablerar sidfilen som backing-lagring för alla nya virtuella adressutrymmen. En process kan emellertid också explicit mappa filbytes.

Linux

För x86- processorer tillåter Linux 32-bitars uppdelning av användar- och kärnadressintervall på olika sätt: 3G/1G användare/kärna (standard), 1G/3G användare/kärna eller 2G/2G användare/kärna .

Se även

Anteckningar

  • " Advanced Windows " av Jeffrey Richter, Microsoft Press