Its not a matter of what OS, its the platform. 32 bit platforms, by nature, can only address up to 3.5 GB of ram. So yes, Vista can SEE it, but it can't map it.
Wrong, it's all
about the OS (well, and partially BIOS/chipset - more about that in a sec).
What happens, by default, when you plug in 4 gigabytes of RAM in a system, is that it gets mapped physically from 0-4GB - this is the 32bit address space. The problem is that various hardware devices (not just physical expansion cards, but also on-motherboard devices, some CPU structures etc.) are memory mapped
- this means that when requests to certain physical
memory ranges are generated, your chipset sends those requests to the hardware devices rather than the memory chips, thus shadowing the memory.
Decent chipsets support memory remapping
, which relocates RAM addresses - basically "anything goes" I guess, and I've seen many different remappings. But the most typical seems to be relocating entire RAM sticks at a time
. With a lot of physical memory in your machine, lots of memory is going to be moved above the 4GB mark, into 64-bit address space. A request for physical
address 6GB might then go to RAM address
2GB, while a request for physical
address 2GB might be remapped to your GPU memory.
Phew. So far, so good.
When you're working with a 32-bit OS, applications can only see the 32bit address space - no way around that. Under Windows, there's furthermore a 2:2 split of the address space, meaning that each individual application can only access up to 2 gigabytes of memory
, the other 2 gigabytes of address space
are reserved for kernel use (including, but certianly not limited to, filesystem cache). With a special boot option, you can change this into a 3:1 mapping, allowing individual applications to access up to 3 gigabytes of memory (but only if they're linked with "large address-space aware" linker flag).
With PAE enabled, a 32-bit OS can use up to 64 gigabytes of memory. Each invidiual application can still only see the 32-bit address space, but each address space
can be mapped to different portions of physical memory
. This has been possible ever since the Pentium Pro
. Also, with OS support routines like windows AWE, applications can be allowed to map "windows" to other parts of the system memory, effectively giving you access to lots of memory. It's more complicated to program for than a flat 64bit address space, but it's certainly doable - and it's quite similar to how 16-bit programs used XMS/EMS memory back in the days.
Now, the million dollar question is, if this is possible... why doesn't XP support it? Funny thing is that before the service packs, XP supported 4GB of physical memory
. This means that with vanilla XP and PAE enabled (and BIOS/chipset memory remap) you didn't get those meager 3.25GB of memory, but the full 4GB. With SP1, this was changed to 4GB of address space
Microsoft claims it did this because of buggy drivers, and I guess that's at least half the truth - on Windows, even 32bit drivers have always had to use 64bit addresses when dealing with physical memory kernel APIs, but a lot of moronic driver writers have probably ignored this. Another reason could be that MS wants you to buy 64bit and/or server editions if you want to use lots of memory (32bit server OSes support >4GB memory through PAE).