On a system configured with 4 GB of random-access memory (RAM), Microsoft® Windows® reports 3.0 to 3.8 GB of available memory. The same behavior is seen in Linux and other operating systems, as this is a limitation of 32-bit addressing used in IA-32 systems.
This is a limitation of a 32-bit architecture. The system can only address 4 GB of allocated memory. Allocated memory is made up of physical RAM, and any I/O space needed by devices. The way memory is allocated is that starting at 4 GB, the system allocates device I/O addresses working its way down. Normally this is not a problem, but when systems have 4 GB of physical memory, the addresses needed to address RAM overlap the space needed for I/O. In this case, the need for I/O space takes precedence, and the amount of RAM visible to the operating system and applications is limited to 4 GB minus I/O space. Examples of devices that consume I/O space are:
System BIOS
PCI Express configuration space and memory for PCI Express device(s)
Memory mappy I/O
Motherboard Resources (I/OxAPIC)
Chipset
PCI Enumeration
For example: If you have 4GB of system memory, an Intel 915g Express chipset, Windows XP with Service Pack 2, and a PCI Express graphics card the remaining system memory as reported by System Information would be ~3.25GB. The same configuration but with 2GB of system memory would result in all 2GB being available. This is due to the limited capability of memory mapping (or limited amount of addresses) on 32-bit architecture systems.
Server systems are able to extend the address space with physical address extension (PAE) . This option is not available on desktop and workstation systems.
For in-depth information regarding this topic, please refer to the
Intel Whitepaper detailing the above.