My short answer is: likely because the BIOS designer was sloppy.
The long anwser is:
Although you have 4GB RAM installed, you can not expect to have 4GB of usable RAM available with the Intel 945GM chipset. This is a chipset limitation. You can tell this from the chipset's specification:
http://www.intel.com/content/www/us/en/intelligent-systems/navy-pier/mobile-945-express-chipset-datasheet.html
Quote from section 9.2: "The Memory Controller Hubs provides a maximum DRAM address decode space of 4 GB. The MCH does not remap APIC or PCI Express memory space. This means that as the amount of physical memory populated in the system reaches 4 GB, there will be physical memory
that exists yet is non-addressable and therefore unusable by the system."
The BIOS must reserve address ranges for several resources, i.e. the BIOS itself, PCI and PCI Express memory mapped space, internal graphics, APIC memory space and other memory windows for I/O access. All these address ranges have to lie within the 4GB address space and as such occupy address ranges that are not available to system memory any longer. You could say these resources "steal" physical RAM memory space.
That being said, if you have 4GB installed you can expect to have more than 3GB system memory available.
The amount of physical memory that is available to the system depends on how much effort the BIOS designer puts into arranging theses address ranges. For example, the BIOS could allocate the least amount needed for each resource. Or it could allow for disabling or limiting address allocation for PCI Express depending on your system's usage of PCI Express devices.
The BIOS designer of your system likely set the upper limit of usable RAM to a static maximum of 3GB even though you installed 4GB. This approach provides a static address window of 1GB to the BIOS designer and as such simplifies the BIOS designers task to allocate address ranges for the resources so they do not conflict with any other address range.
uname -a
, the output offree -m
and also confirm that you have more than 3GB of ram active by looking at your dmidecode.uname -a
say?