For anybody who has installed 4gb of memory on their machine and...

Page 2 - Seeking answers? Join the Tom's Hardware community: where nearly two million members share solutions and discuss the latest tech.
This is my understanding of the "problem":
if others can elaborate on the above and/or
correct any errors I may have made,
please do so!


I hope this helps.


Sincerely yours,
/s/ Paul Andrew Mitchell
Webmaster, Supreme Law Library
http://www.supremelaw.org/

Yea that is basically correct. 32-bit systems only have enough address space for 4GB of allocated memory. However, allocated memory is made up of total physical memory and I/O address space. In this case the addresses required for physical space and I/O mapping overlap and I/O takes precedence. So the memory you see is the result of total physical memory - I/O addressed space.
 



This is due to the fact that it is a limitation of 32-bit addressing used in IA-32 systems
 


I thought it was already covered in this thread. in x86 systems you just need to change mode, to be able to address more than 4GB. Linux supports this completely
 



I don't know enough about Linux to argue that, I'm just reiterating what I've learned over the years.
 


I'm also confused by what you mean when you say "change mode"
 


uname -a
Linux greed 2.6.20-16-server #2 SMP Tue Dec 18 05:52:19 UTC 2007 i686 GNU/Linux

free
total used free shared buffers cached
Mem: 4148616 3982832 165784 0 145156 3370996
-/+ buffers/cache: 466680 3681936
Swap: 7815580 1812 7813768

I'm not aware of any Linux distribution which does not include kernels to support 4 GB or more of RAM, though some of them do not make this immediately obvious. Right now, I'm using Ubuntu 7.04.
 


This has not been true since the Pentium Pro CPU. All modern x86 CPUs support 36 bit addressing modes.
 
supremelaw, i think there is something wrong with your math. You conclude that to address 4GB of address space you need 34 bits? You only need 32. Each combination of those bits points to a byte, which gives ... 4GB

Don't confuse how you then address a byte in a word og dword you have stored in a register or something, that is something else.

Edit: The PAE switch has always been available. So you cannot blame Microsoft for that. Driver developers just didn't figure (i guess) that home users some day would break the 4G barrier. And when you don't follow the proper guidelines for writing lowlevel software, you end up here ...
 
I cannot see how all that is relevant here. Itsn't that just to confuse everybody?

If you have an address bus with 32 lines, then you can reach 2^32 bytes. It doesn't need to be more complicated than that.

With PAE, you can use more than 32 lines because the structure of the page table allows it
 
This is my understanding of the "problem":
if others can elaborate on the above and/or
correct any errors I may have made,
please do so!


I hope this helps.


Sincerely yours,
/s/ Paul Andrew Mitchell
Webmaster, Supreme Law Library
http://www.supremelaw.org/

I think you have a good understanding of the problem. I've worked with computers since the Air Force introduced me to them in 1970. I've seen this question over the ram come up from time to time and I too have tried to explain it as a M$ problem. I've been called an idiot, moron, and suggestion has been made that I have no understanding of computers. I gave up trying to explain it.

You are correct that if Bill Gates had wanted to allow 4 gig of ram to be recognized and used, that's what would have happened. At the same time, when XP came out 512 mb was a lot of ram and no one knew any good reason to buy 1 gb of ram. Had XP been replaced during a normal 3-4 year cycle and a 64 bit OS replaced it, none of these questions about ram use would have come up. A 64 bit OS would have easily allowed 16 gig of ram.

In fact, M$ did give a half hearted try to replace XP with XP64, but for reasons unknown to me, Gates decided to drop support of the idea. AMD had a processor that would support a 64 bit OS, and Intel developed one shortly after that, so the basic hardware was there. Unfortunately, without pressure from M$, few third party hardware companies bothered to develope drivers to run on a 64 bit OS, which contributed to XP64 never becoming popular.
Even now with Vista, since M$ made a 32 bit version, there has not been the imputous to develope drivers as there would have been if Vista was 64 bit only. Thus the problem remains one that is created by Gates and M$, not one that is caused by deficiencies of hardware, beyond the necessary drivers.
 


I think you've got it backwards. The programers did follow the guidelines, guidelines that were made by M$. M$ made an OS (XP) and gave its parameters to the programers, who then wrote programs and drivers to suit the OS. If M$ had made the OS slightly differently and then given those parameters to the programers, then they would have written the programs and drivers to suit that different OS. I place no fault on the programers, only on those who gave them the OS for which they were to write.
 
How does that make sense? If the driver lets Windows do all the address translation and stuff, then the driver wouldn't know about it, regardless of the mode.
 
ok, so maybe IBM should have went with I/O mapped I/O (like the 8080 and z-80 used) instead of memory mapped I/O. that way we can have all of our memory address space for program use (either in ram or rom). However, you still wouldn't get full use of 4 gig of ram, due to bios and addon cards roms taking up space.

Also, the progression of fetching 8 bit data to 32 bit data has confused it a bit as well. In reality, we are not addressing 4 gig worth of doublewords, but 1 gig unique locations, 4 bytes at a time (4 gigaBYTES). yes, you can access 1, 2 or 4 bytes at a time if you program properly, but when was the last time anyone has done that?? LOL
 
oh, how I miss the days of simple, flat memory maps.. you knew where everything was gonna be, didn't have to select a memory page to access the data.. I miss non-x86 stuff...
 


But the physical memory space IS flat, in any mode you run it in