Euhm, je haalt een aantal zaken door elkaar. Je hebt namelijk virtual memory en physical memory. De processen in vrijwel ieder OS werken met virtueel geheugen, wat wil zeggen dat het OS voor ieder proces het geheugen op een andere manier kan mappen op het daadwerkelijke fysieke geheugen (middels paging). MMIO zit hier dus doorgaans niet bij, omdat applicaties daar doorgaans helemaal niet mee te maken hebben, dus een videokaart die 1GB aan geheugen neemt zal niet zomaar 1GB van het beschikbare geheugen van je applicatie in beslag nemen, tenzij je applicatie aan het OS vraagt om dat te doen (om bijvoorbeeld bij de contents van een texture te kunnen komen, maar dan wordt ook alleen dat stuk geheugen gemapped naar een vrij stuk in de memory space van het proces, en niet de volledige 1GB van je kaart).
Verder is door middel van een extensie in het paging meganisme van de x86 CPU het weldegelijk mogelijk om voor een 32 bits OS meer dan 4GB aan geheugen te adresseren. Dit zie je bijvoorbeeld in linux en de 32 bits server OS'en van microsoft. Windows XP maakt wel gebruik van de extensie (omdat die ook de per-page no-execute bit mogelijk maakt), maar niet van de mogelijkheid om meer dan 4GB aan geheugen aan te spreken wegens driver incompatibility redenen. Dáárom ziet XP minder dan 4GB, maar dat zegt dus weer helemaal niets over hoe de space van een proces gemapped is (en kan een app dus wel 4GB aan geheugen gebruiken als we kernel space even vergeten - wat niet in het echte geheugen past wordt dan naar de page file geswapped)
[Reactie gewijzigd door .oisyn op donderdag 22 oktober 2009 19:27]
Dat geheugen wordt wel degelijk gereserveerd, en is idd ook niet bruikbaar meer. Waar jij het over had heet overigens PAE ("physical address extension" stond het geloof ik voor), en daardoor kan ik idd op mijn 32bits Linux bak de volledige 4G ram in m'n computer gebruiken, zelfs met mijn 512M videokaart. Zonder een kernel met PAE ondersteuning blijft er nog maar 3.2G ofzo over.