Understanding the "3GB not 4GB" RAM problem
PART 1:

Question: I just bought a system with 4GB of physical RAM in it. The BIOS posts 4GB, but Windows tells me that I have anywhere from 2.75 - 3.5GB of RAM. Where is the rest of my RAM?

Summary: If you are running 32-bit Windows, you must live with it. You will not ever see all 4GB of RAM but it WILL be used by the system for hardware devices. If you are running 64-bit Windows, you may or may see all the memory, depending on your motherboard's chipset, your system may support memory remapping. If so, you will be able to see all 4GB of RAM.

Due to an architectural decision made long ago, if you have 4GB of physical RAM installed, Windows is only able to report a portion of the physical 4GB of RAM (ranges from ~2.75GB to 3.5GB depending on the devices installed, motherboard's chipset & BIOS).

This behavior is due to "memory mapped IO reservations". Those reservations overlay the physical address space and mask out those physical addresses so that they cannot be used for working memory. This is independent of the OS running on the machine.

Significant chunks of address space below 4GB (the highest address accessible via 32-bit) get reserved for use by system hardware:

• BIOS – including ACPI and legacy video support

• PCI bus including bridges etc.

• PCI Express support will reserve at least 256MB, up to 768MB depending on graphics card installed memory

What this means is a typical system may see between ~256MB and 1GB of address space below 4GB reserved for hardware use that the OS cannot access. Intel chipset specs are pretty good at explaining what address ranges gets reserved by default and in some cases call out that 1.5GB is always reserved and thus inaccessible to Windows.

When looking at memory in systems (be it desktop or notebook) there are three questions to ask that will tell you the maximum amount of memory your O/S will be able to use:

1. What O/S Edition have you installed?

a. 32-bit Windows is limited to a maximum of 4GB and cannot see any pages above 4GB.

b. 64-bit Windows can use between 8GB and 128GB depending on SKU.

2. What address range can your processor actually access?

a. Typically that’ll be 40-bit addressing today for x64 (Intel EM64T/AMD64), but older processors may be limited to 36-bit or even 32-bit

3. Can your system’s chipset map memory above 4GB?

a. Mobile chipsets on sale today cannot (but that may change with time)

b. Newer workstations (which use chipsets developed for single or multi-proc servers) usually can.

Windows can remap memory from below 4GB to above 4GB and use it there, however, that relies on the three points above:

1. Can Windows access memory above 4GB?

a. 32-bit – NO

b. 64-bit – Maybe (due to chipset limitations)

2. Can your processor access memory above 4GB?

a. If it’s recent then it might, and if it’s either AMD64 or EM64T (Intel 64-Bit) it’s almost certain

3. Does your chipset allow pages to be remapped above 4GB?

a. Probably not – and that’s what’s catching people who install 64-bit Vista to work around point 1 – they find they still cannot see above 4GB

In some cases, OEMs may be able to tweak their BIOS to reserve less memory for platform use, but we’re not talking a huge difference (ie, 100’s of MBs).  In the end a 32-bit OS and/or application can only, ever, handle 4GB of memory at a time, the AWE stuff just swaps chunks of memory in and out of that 4GB space, thus fooling the application and OS into using more space than it can “see”.

PART TWO:

To be perfectly clear, this isn't a Windows problem-- it's an x86 hardware problem. The memory hole is quite literally invisible to the CPU, no matter what 32-bit operating system you choose. The following diagram from Intel illustrates just where the memory hole is:

 
Additional information:

http://support.microsoft.com/kb/929605 (Vista - all editions)

http://support.microsoft.com/kb/888137/en-us (Windows XP SP2)