I've got 4gb of RAM installed in my machine but Ubuntu only detects 2.8gb of RAM

If I run uname -a I get:

Linux DeLillo 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

Which seems to confirm that I'm running Ubuntu in 64-bit.

I also have an nVidia graphics card installed that may have memory allocated to it. But 1.2gb seems a bit excessive.

I've had a poke around in BIOS and can't seem to find any settings to change the amount of RAM allocated to my GPU. Is this just something I have to live with?

EDIT: sudo lshw -class memory outputs:

PCI (sysfs) *-firmware description: BIOS vendor: Phoenix Technologies, LTD physical id: 0 version: 6.00 PG date: 06/19/2008 size: 128KiB capacity: 448KiB capabilities: isa pci pnp apm upgrade shadowing cdboot bootselect socketedrom edd int13floppy360 int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int9keyboard int14serial int17printer int10video acpi usb ls120boot zipboot biosbootspecification *-cache:0 description: L1 cache physical id: 8 slot: Internal Cache size: 32KiB capacity: 32KiB capabilities: synchronous internal write-back *-cache:1 description: L2 cache physical id: 9 slot: External Cache size: 4MiB capacity: 4MiB capabilities: synchronous external write-back *-memory description: System Memory physical id: 24 slot: System board or motherboard size: 4GiB *-bank:0 description: DIMMProject-Id-Version: lshwReport-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>POT-Creation-Date: 2009-10-08 14:02+0200PO-Revision-Date: 2012-02-05 00:26+0000Last-Translator: Andi Chandler <Unknown>Language-Team: English (United Kingdom) <en_GB@li.org>MIME-Version: 1.0Content-Type: text/plain; charset=UTF-8Content-Transfer-Encoding: 8bitX-Launchpad-Export-Date: 2014-04-10 12:53+0000X-Generator: Launchpad (build 16976) Synchronous 50410 MHz (0.0 ns) physical id: 0 slot: A0 size: 2GiB width: 64 bits clock: 3165MHz (0.3ns) *-bank:1 description: DIMMProject-Id-Version: lshwReport-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>POT-Creation-Date: 2009-10-08 14:02+0200PO-Revision-Date: 2012-02-05 00:26+0000Last-Translator: Andi Chandler <Unknown>Language-Team: English (United Kingdom) <en_GB@li.org>MIME-Version: 1.0Content-Type: text/plain; charset=UTF-8Content-Transfer-Encoding: 8bitX-Launchpad-Export-Date: 2014-04-10 12:53+0000X-Generator: Launchpad (build 16976) Synchronous 50410 MHz (0.0 ns) physical id: 1 slot: A1 size: 2GiB width: 64 bits clock: 3165MHz (0.3ns)

Which suggests that it's detecting two 2gb sticks of RAM, but free outputs:

total used free shared buffers cached Mem: 2822496 2575872 246624 70960 15316 338656 -/+ buffers/cache: 2221900 600596 Swap: 0 0 0

EDIT 2: just ran memtest. It correctly reports that I have two 2gb sticks installed, but claims my total memory is 2814mb. When it tests slot0 it runs from 196kbs - 2048mb and then when it tests slot1 it runs from 2048mb - 2815mb. It also claims my cached memory is 2814mb with 332kb reserved.

Everything else (FSB, memory speed, caches, etc.) seem to be reported correctly. BIOS correctly reports that I have 4096mb installed. I now suspect this is a hardware issue.