The following is taken from http://www.dansdata.com/askdan00015.htm
For many years, it's been normal for personal computers to include a Memory Management Unit (MMU
). MMUs were expensive add-ons for old computers, but modern CPUs all have one built in. A primary function of an MMU is to allow a computer to have "virtual memory", which in the PC world means "swapping" or "paging" data in and out of however much actual RAM you have as needed, keeping the swapped-out data in a file, or files, on hard drives.
Virtual memory is what allows your PC to have more than 4Gb of total memory, including the swap file(s). Memory management lets the computer augment its physical RAM, and lets programs running on that computer feel as if they've each got a simple solid space of memory available to them without treading on each others' toes. But virtual memory doesn't increase the amount of physical RAM you can have.
The explanation for the three-to-four-gigabyte problems is that modern computers include an arrangement conceptually similar to the old Upper Memory Area one. Many of the original Upper Memory Area MMIO reserved areas still exist today (for backward-compatibility reasons - otherwise you couldn't install DOS on a new PC), and a few more little ones sprouted above 1Mb as PCs went through their growing pains. Those are preserved today as well.
For this reason, a modern "3Gb" computer, which has 3,145,728 kilobytes of physical memory, is only likely to show something like 3,145,192 kilobytes available (look at the Performance tab in the Windows Task Manager, for instance). MMIO ranges "shadow" some of the physical memory, and so the system can't even see that RAM, at the hardware level.
3,145,728 minus 3,145,192 is only a shortfall of 536 kilobytes, though. So this 3Gb computer gives you 99.983% of the memory you paid for. Install more expansion cards in the computer, each of which is likely to eat some MMIO space for itself, and you'll lose a bit more memory. But you'll have to try pretty hard to lose even one whole megabyte.
I, for one, am OK with that.
But things get worse above 3Gb.
Large areas of the memory between three and four gigabytes are cordoned off for system devices in exactly the same way that chunks of the Upper Memory Area were purloined in the old days. Once again, the processor (and other system components
) can talk with some devices by reading and writing memory addresses up above 3Gb.