Originally posted by: DAM
Saw this link that says to disable memory hole:
Actually, memory remapping should be enabled to utilize the entire 4GB. Your system (w/XP 64-bit) can't utilize all 4GB because memory remapping is disabled, not supported, or just plain broken.
The problem is the way that 32bit Windows does virtual memory management and addressing. As I said above, I don't really want to write an essay, but suffice to say it can't use 4GB, but not because of lack of addresses (more like lack of addresses available, since it's stealing some physical addresses to map for virtual memory).
I'd be interested in reading your essay, since you can't even get the 'synopsis' right. This has nothing to do with virtual memory and is indeed all about a lack of physical addresses (i.e. 32-bit x86 architecture).
In order for the processor to address 4GB RAM, it would need 4,294,967,296 unique address combinations (one address per byte), which also happens to exactly be the total number of unique addresses possible in a 32-bit processor address space.
PCI, AGP, IDE/SATA, BIOS (ACPI), video cards, and all that stuff, require processor address space to function so the processor can access (i.e. "see") them, else you would have an expensive doorstop. The BIOS reserves ranges of the 32-bit address space for the hardware to function, then passes the resulting memory map (e820) to the operating system - ANY operating system - telling the OS which memory address ranges are available to it and which are not.
It's also specific to 32bit Windows, not 32bit OS in general.
Huh? I guess you haven't seen the numerous dozens of cases reported in various forums and newsgroups by 32-bit Linux users having the exact same problem. Using ANY standard 32-bit Linux kernel, the same limitation exists. A small sampling:
4GB RAM not showing
Maximum memory reported
meminfo is only showing 3.5GB
LinuxRamLimits
Memory Management in Linux (.pdf)
Memory Hole in x86 Based Systems (.pdf)
Of course, 32-bit Linux distros can work-around this limitation by using PAE (or SMP in some) kernel, which exploits the 36-bit PAE addressing extension capability designed into all 32-bit x86 Intel and AMD processors for about 10 years now. But hey, so can 32-bit enterprise and server class Microsoft operating systems. And this only extends
physical address space to 36-bit, enabling the processor to address (i.e. "see") up to 64GB theoretical/48GB practical RAM (subject also to OS limitation).
Microsoft limited the kernel of its 32-bit desktop operating systems to 32-bit MAX (i.e. 4GB) addressing because 36-bit addressing mode exposes not-uncommon driver and application bugs, due to developers becoming lazy or inattentive from many years of not having to worry about how their pointers, buffers, and mallocs would get along in a system where address space > 32-bit (4GB boundary).