4GB in 32bit?

Hi there. Yesterday I downloaded and installed openSUSE11 on my pc with an Intel Q6600. I’m sure that it is the 32 bit version. But when I type free -m in konsole, I see this:
lzfy@linux-sh86:~/Desktop> free the fish
total used free shared buffers cached
Mem: 4149256 3976444 172812 0 84956 3236792
-/+ buffers/cache: 654696 3494560
Swap: 979956 116 979840

Now correct me if I’m wrong, but isn’t it true that a 32 bit system can’t use more then 3,2GB? Can someone explain this?

PS. why is the swap used with 4gig ram? I have only a few apps open.


I THINK its a case that 32bit can address 4gb TOTAL! But factor in the space a gfx card needs etc, and thats what left spacewise for your RAM.

That’s because you are using the kernel-pae, as it names says it has PAE enabled.

32 bits cpu use an address bus 32 bits wide. So they can address 2^32=4294967296 bytes. This is addressable space. The available one can be less due to peripheral mappings

Actually it’s a bit more complex than that. IA32 processors actually can address more than 4GB, using you guessed it, PAE. But not all IA32 processors have it, and anyway those that don’t you wouldn’t want to run with a lot of memory anyway. It seems that the Linux kernel has it enabled in such a way that if the CPU doesn’t support PAE, it doesn’t use it. So having a -pae kernel name doesn’t mean your CPU supports PAE, it’s a one-size fits all kernel.

However, not just the CPU has to support > 32 bits of address, the supporting chips have to too. So sometimes you may have a PAE CPU and a PAE kernel but the mobo lets you down because you can’t address > 4GB on that mobo.

So the OP might be lucky, he might have a PAE CPU and a capable mobo that allows > 4GB to be addressed, so it doesn’t matter that some space in the lowest 4GB is taken up by devices, PCI space, etc, it gets relocated up. One would have to look at the boot messages, in particular the memory sizing chatter to see if that really is the case.

Thanks for the explanation. I found it strange because Ubuntu didn’t see all my ram. But now I know why. Also wikipedia was very useful about this