Holy cow, I wrote a book!
Here's a question that came from a customer:
I have set my boot options to /3GB /NOPAE.
Even though the server has 4GB of physical memory, we see only
3.5GB of physical memory on the server after it boots up.
However, when we change the boot options to /PAE, we can observe
4GB of memory.
Furthermore, when I enable only /PAE, even though the physical
memory is 4GB, I can see 4GB.
Without /PAE, even though the physical memory is 4GB,
I can see 3.5GB.
What is the reason for this?
Remember that in the absence of the /PAE switch,
the Windows memory manager is limited to a 4GB physical address space.
Most of that address space is filled with RAM, but not all of it.
Memory-mapped devices (such as your video card) will use some of
that physical address space,
as will the BIOS ROMs.
After all the non-memory devices have had their say, there will be
less than 4GB of address space available for RAM below the 4GB physical
The rest of it went above the boundary.
Here's a picture:
On this imaginary system, the motherboard assigned the ROMs
and the hardware devices to the physical address space between
3.5GB and 4GB (occupying 0.5GB of address space).
When you start plugging in your memory chips, then, they
are assigned physical addresses starting at the bottom,
and then skip over the address space that has already been assigned
to the hardware and ROM, then resume.
On this imaginary system, then, the 0.5GB of address space used
for hardware and ROMs causes that much memory to get shoved upwards,
and it ends up above the 4GB boundary.
Without PAE, the processor is capable only of addressing memory
below the 4GB boundary, which means that the memory above that
boundary is inaccessible.
It's consuming electricity but isn't doing anything.
The solution is to enable /PAE so that the processor can access
the physical address space above the 4GB boundary.
Because that's what PAE stands for:
Physical Address Extension.