Most likely you have the wrong build of 32 bit kernel.
The common 32 bit kernel supports up to about 3.5GB. But there are kernel build time options that limit support to around the much smaller amount you are seeing. So that is probably the problem.
There is also a 32 bit PAE kernel that will support all the memory your BIOS lets Linux use.
You may want to check how much ram the BIOS lets Linux use. Type
dmesg | less
and look for a table similar to this (which is from one of my systems)
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 00000000000a0000 (usable)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000bfe8ac00 (usable)
BIOS-e820: 00000000bfe8ac00 - 00000000bfe8cc00 (ACPI NVS)
BIOS-e820: 00000000bfe8cc00 - 00000000bfe8ec00 (ACPI data)
BIOS-e820: 00000000bfe8ec00 - 00000000c0000000 (reserved)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fec00000 - 00000000fed00400 (reserved)
BIOS-e820: 00000000fed20000 - 00000000feda0000 (reserved)
BIOS-e820: 00000000fee00000 - 00000000fef00000 (reserved)
BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 000000013c000000 (usable)
Notice the big chunk of "usable" memory
100000 - 00000000bfe8ac00
That means that with the common 32 bit kernel this system could use about 3070MiB of ram.
Notice the extra chunk of usable at the end where it says
That means that a 64 bit Linux or a 32 bit PAE kernel could use an extra 960MiB on this system that an ordinary 32 bit kernel cannot use.
You can switch to a different 32 bit kernel build just by installing the right Debian package for that kernel. Switching to 64 bit requires reinstalling Linux.
You should post the results of
To verify that you do have a 32 bit kernel (rather than some stranger problem) and to give us some idea which 32 bit kernel.
I'm not certain the command to grep the kernel config would be the same in Debian. I just did
grep HIGHMEM /boot/config-2.6.9-42.0.10.ELsmp
# CONFIG_NOHIGHMEM is not set
# CONFIG_HIGHMEM4G is not set
That is I did grep HIGHMEM
followed by the name of the config file. I got the 2.6.9-42.0.10.ELsmp
part of that name from the output of uname.
Post your version of that if you can. Notice in mine that HIGHMEM64G=y means I have a PAE kernel (that can use that last chunk of memory) and HIGHMEM=y means it can use most of that big chunk.
I'm guessing you have neither of those set, so you can only use about 900MB. So you should install a different kernel package.