I understand that if I have an integrated graphics and 4 gb of ram, windows 7 needs to address some of it o the integrated ones. However how come if I have a discrete graphics card with 1 gb of vram, the os can only see about 2.8 gb of ram? Is this because 32 bit can only address 4gb of total ram (gfx + normal ram)?
A 32-bit OS without PAE has a maximum address range of 4GB of physical memory. With an integrated graphics card, some of the RAM is used by the GPU. With an external graphics card, some of the address space is used for hardware mappings into the VRAM, but it is not as large as the amount of memory on the card. Typically, a discrete GPU needs about 256MB of mapped space regardless of how much memory is on the card. Other hardware mappings typically need around 256MB in total. Typically a 4GB machine with a 32-bit OS without PAE and a discrete graphics card will have 3.2GB to 3.5GB of usable RAM.
Note that if your BIOS has a specific setting for a 32-bit OS, it will keep the mappings to a minimum to allow more usable memory with a 32-bit OS. Usually the setting is called "Memory remapping". Turn if off if you're using a 32-bit OS without PAE.
The limit is 'set' by your Windows License (and enforced by the ntoskrnl) and nothing else .
Common misunderstanding re: how much address space is needed to support i/o for large memory graphics cards .
More than 10 years ago Intel started making CPU's with 'PAE' that could address whatever amount of RAM ...and MS released 32bit versions of XP known as '2003 Server versions' that could support whatever size RAM the Marketing Dept. deemed 'appropriate' .. (I believe Enterprise Ed. went to 128 GB see here
However in the case of their 'client' OS's, like XP Pro, that was 4Gb = and that address space had to be shared with Drivers
A PAE aware driver only needs about 32Mb of the 4Gb ... however non-PAE aware drivers will cause BSOD's, and that's what happened 10 years ago .. so MS decoded to 'reserve' about 750Mb of address space and that's the way it's been ever since ..
Needless to say, these days all drivers are PAE aware and there really is no reason for limiting real RAM on 32bit clients (such as win 7 32 bit) to 3.25Gb or less EXCEPT for the MS Marketing Department wish to 'separate' the 32 and 64 bit systems ..
Proof of this is that 32bit Linux / MAC OS on EXACTLY the same hardware can see and use all available RAM
MS added license check which only allows Server Editions to use the fully possible RAM with 32Bit systems. This patch hacks to kernel so that the license check always return true so that you can use the full RAM with the 32Bit Client Windows. I've used this patch in Vista and Win7 successfully with my Radeon HD. But don't use it with Intel HD chipsets (part of the Intel iCore CPUs). Their driver are buggy and can cause issues! This is not an issue with the patch!