FAQ: Windows och 4 GiB RAM-problemet
Sådär, texten genomläst, lite ändringar gjorda.
Den här FAQ:n är till för att reda ut 4 GiB RAM-problemet på x86 och x86-64 plattformarna och med inriktning på windows som operativsystem.
Inleder med korta svar och sen längre förklaring av problemet tekniken.
All den här texten skrevs utan åtanke på ett litet hack jag läste om där man "transplanterar" lite server 2008-saker in i vista SP1. Jag har INTE testat det själv men det låter rimligt att det kan fungera (att ta vissa saker mellan XP och server 2003 fungerade).
http://www.tipandtrick.net/2008/how-to-enable-use-and-support...
Det är inget för den oinsatte att försöka sig på att göra.
Q: Som förberedelse för resten av FAQ:n, hur vet jag om jag har 32- eller 64-bit windows?
Guide som hjälper dig: http://support.microsoft.com/kb/827218/en-us
Q: Jag har 4 GiB (eller mer) internminne i min XP/Vista-maskin men allt kan inte användas (ofta ~3 GiB tillgängligt), vad är det för fel?
Läs vidare här. Har du 64-bit windows och modernt moderkort-chipset (gäller intel, AMD:s ska fungera på alla som stödjer 64-bit) kan det gå att lösa, annars inte.
Q: Kan jag använda 4 GiB (eller mer) internminne i windows XP 32-bit (service pack 2 eller senare) eller i Vista 32-bit?
Nej, det går inte och det finns ingen fix, det är ett hårdvaruproblem och en kombination av mjukvarubegränsningar i XP och Vista. Mer info i tekniska förklaringen.
Q: Om jag lägger till /3GB flaggan i boot.ini då (XP)?
Nej det hjälper inte heller, den flaggan handlar om fördelningen av virtuellt minne mellan varje process och systemet. Internetminnet är det fysiska minnet och /3GB flaggan har inte något med det att göra.
Q: Om jag lägger till /PAE flaggan i boot.ini då (XP SP2 eller senare)?
Nej. det hjälper inte heller. PAE (Physical Address Extension) kan användas för att ge ett 32-bitars operativsystem tillgång till hela 64 GiB internminne. Men även med PAE aktiverat så ger det inte mer än 4 GiB i XP eller Vista. Mer i tekniska förklaringen.
Q: Jag har Vista 32-bit med service pack 1 och systeminformationsrutan (win+pause/break) visar 4 GiB, är det sant?
Nej inte sant i meningen att det visar hur mycket som är tillgängligt.
Microsoft gjorde om det här i service pack 1. Nu visas det hur mycket minne som är installerat i systemet, inte hur mycket som är tillgängligt. Ta upp aktivitetshanteraren och kolla prestandafliken på hur mycket fysiskt minne du har, det bevisar att problemet är kvar.
Q: Jag har skaffat 64-bitars windows men jag kan ändå inte få tillgång till alla mina 4 GiB minne (eller mer), vad är felet?
Du behöver endera ha en AMD-processor (vad jag läst ska det fungera med alla 64-bitarskompatibla, så länge moderkortet inte har något eget hinder) eller Intel-processor med ett moderkortchipset som stödjer en teknik som brukar kallas memory remapping. Titta efter i BIOS (ev. flasha till senaste) efter inställning kallad "memory remap feature", "memory remapping" eller dylikt (bör finnas under chipset features). Har kortet t.ex. P35 eller senare kan inställningen saknas fast det ändå är aktiverat. Använder man 32-bit XP/Vista ska man INTE ha denna på, då kan man få ännu mindre minne.
Intel-chipset som stödjer detta är 955X, P965, 975X och alla senare (3x- och 4x-serierna, t.ex. P35). Observera att lakeport, vilket är 945 och 946 INTE klarar det.
Man kan inte få tillgängligt mer än den mängd minne som datorn visar på POST-skärmen när den bootar, det ska visa 4 GiB annars har man inte löst problemet och att fixa med 64-bitarsoperativsystemet kan inte hjälpa.
Q: Hur mycket minne stödjer XP/Vista 64-bit?
XP samt Vista business, enterprise och ultimate: 128 GiB. Vista home premium 16 GiB och home basic 8 GiB.
Observera att det är gränsen som microsoft kan ändra i efterhand (t.ex. med service pack), då de t.ex. ökat server 2003 enterprise x86-64 från 64 GiB till 1 TiB och sist till 2 TiB.
Teknisk förklaring
x86-arkitekturen har normalt 32-bitars adressrymd. 2^32 bytes är just 4 GiB.
Från början när processorn skulle tala med andra enheter än internminnet så använde den speciella instruktioner för detta. Det var klumpigt och tog tid. En mycket enklare modell är att ha enheternas minne i samma adressrymd som internminnet, så kallad Memory-mapped I/O (MMIO).
Internminnet börjar man adressera "nerifrån" (förenklat: från noll) och uppåt, men MMIO-adresserna uppifrån (2^32) och neråt. Därimellan har det funnits ett hål i adressrymden fram tills nu när vi kommit upp i så mycket internminne att det krockar med MMIO-reserverade adresser, vilka måste finnas så det skuggar internminnet. Observera att det handlar om adresser, inte att enheter sparar data i internminnet.
Grafikkortet är skyldig till mycket av dessa adresser så med mycket minne på grafikkortet kan man räkna med att bli av med mycket tillgängligt internminne i adressrymden.
En teknik att gå runt problemet är att det skuggade minnet "flyttas upp" så högre adresser ger åtkomst till det minnet. Då flyttar man det till ovanför den mängd RAM som finns installerat i systemet (t.ex. 4 GiB (2^32 bytes)). Att man inte flyttar MMIO-adresserna istället är för att det finns enheter som bara klarar av 32-bitarsadressering (t.ex. enheter på 32-bitars PCI-buss).
Nu måste dock operativsystemet och drivrutiner kunna hantera adresser som är ovanför 4 GiB-gränsen. Man kan göra det med 32-bitars operativsystem genom tekniken PAE (Physical Address Extension) som funnits hos Intel sedan Pentium Pro och hos AMD sedan första Athlon (inte säker på det sista). Det gör att hela adressbussen aktiveras, vilket är 36-bitar på dessa processorer (40-bit på nuvarande 64-bitarsprocessorer i 64-bitarsläge)
Även ett lager i översättningen mellan virtuella och fysiska adresser läggs till.
Många 32-bitars drivrutiner är inte skrivna med det här i åtanke, de förväntar sig max 32-bitar i minnesadresser. Att aktivera sådant här kan skapa massa buggar så microsoft har valt att på konsumentversionerna av windows (XP och Vista) begränsa det maximala adressutrymmet till 32-bitar trotts att man aktiverat PAE. [1]
PAE aktiveras alltid när man använder NX-bit (eller eXecute Disable som Intel kallar det). Det är hårdvaruparten i skyddet microsoft kallar data execution prevention (DEP) och det blev standardaktiverat i.o.m. att det kom i XP service pack 2 och i Vista. Så då flesta med sådan processor "kör redan" i PAE-läge.
Microsofts 32-bitars serveroperativsystem av grövre klass (2000 advanced server, server 2003 enterprise och server 2008 enterprise samt alla data center versioner av dem) kan använda PAE för att utnyttja mer än 4 GiB RAM.
Servervärlden är mer homogen i fråga om hårdvarukonfigurationer och det ställs större krav på drivrutinsmakarna, så där har man tillåtit det. T.ex. så lär man vara mycket noggrannare med drivrutinerna till ett dyrt RAID-kontrollerkort än till en no-name webbkamera. Summerat så skulle PAE i var mans hand i 32-bitars OS ge många buggar och problem. Vill man ha 4 GiB eller mer internminne är det bättre att migrera till 64-bitars. Även om det i början var brist på drivrutiner så finns det idag många fler och man vet att drivrutinerna fungerar internt med 64-bitarsadresser - de är ju utvecklade med det i åtanke.
Lite om varför man inte ska använda memory remapping på 32-bitars XP/Vista (dvs utan PAE-stöd för mer än 4 GiB).
Vissa BIOS (t.ex. på tidigare chipset som P965) tog alla minnesadresser mellan 2 och 4 GiB och flyttade upp dem. Har man det aktiverat så blir det helt enkelt bara 2 GiB minne tillgängligt och inte ~3. I serveroperativsystemen som kan utnyttja extraminnet med PAE så bör man få ut hela 4 GiB. Jag testade med server 2003 enterprise och fick ut hela 8 GiB (vilket jag hade installerat), alltså memory remapping fungerade även vid PAE i 32-bitars. Utan memory remapping borde jag bara fått ~7 GiB.
Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG