Let me put my 2cents:
1. In olden days 16bit processors had 16 bit address bus, which implies addresseble memory was 2[SUP]16[/SUP] which is equal to 65,536 which means earlier 16bit computers were able to address
64kB of ram.
2. Intel guys came with an innovative solution to the above problem by implementing segmentation with which the people were able to address 2[SUP]20[/SUP] addresses which is equal to 1,048,576 means the computers were now able to address
1mB of ram with just 16 address lines. this method was called Memory segmentation. The address was divided to
segment and
offset where first byte resented segment and next byte represented the offset. do not confuse this segmentation with
Memory segmentation - Wikipedia, the free encyclopedia, both are different.
3. With the introduction of 32bit processor (x86) the address bus increased to 32bits or a double word (dword) where the addressible memory is now 2[SUP]32[/SUP] which is equivalent to
4gB of address space. Windows and Linux uses flat addressing where you can simply go to any address in this range. but, Windows split this 4gb space to two parts, first 2gb as kernel space and remaining 2gb as user space. since most computers dont have 4GB of memory and to avoid lots of problems with memory segmentation, the OS uses page tables to address data. where the address used by applications is virtual address and the address stored in the page tables is the real address. (now dont confuse yourself with this virtual real addresses with the 16 bit era.)
With the RAM getting cheaper, people started putting more than 4GB ram into machines and wondering why they were unable to use it. to solve this again, windows implemented a similar thing called PAE (Physical address extenstion)
4. 64bit processors theoritically support 16TB of RAM. but they still use PAE which I could never really understand.:unsure: