Why 32bits OSs can't address more than 3.2/3.2 gb of memory?
Solution 1:
Windows uses some of the hardware addresses meant to address memory, for other hardware (like USB, SATA, Disk Controllers, whatever). So some of those hardware addresses cannot be used for your memory. Hence the limit.
To my knowledge, Unix/Linux CAN address a little more than the 3.2GB limit of Windows. This is because Linux uses a different addressing scheme.
There is also a function called PAE (Physical Address Extension) which makes 32-bit OSes use more than 4GB.
Solution 2:
This has to do with memory the BIOS has to reserve for base processes like transferring data to devices and video memory. Memory above about 3.2GB (it varies from system to system, I've seen 3.6GB and 3.1GB) gets remapped over the 4GB boundary where PAE is required to access it. Different systems handle this case differently. Some systems don't bother accessing it, giving only 3.2ish GB of RAM for processes. Others just seamlessly use PAE, which is slower, for processes.
Solution 3:
PAE is not standard in 2.6 kernels of Linux.. But it is supported above 2.3.23 kernels..
PAE allows usage of up too 64GB of ram on a 32bit system However limiting a single process to the 32bit space.. and degradation of performance overall/ not just for using above 4gb..
I had to change some growing databases operating systems to 64bit so MySQL could take advantage of the RAM installed.. The speed difference was noticeable :D
Take a look here http://en.wikipedia.org/wiki/Physical_Address_Extension#Linux