On Fri, Mar 21, 2008 at 8:25 PM, Mike Gill <[EMAIL PROTECTED]> wrote:
>> In Windows XP, Microsoft made the
>> decision to just cordon off the upper part of the 32-bit virtual
>> address space, reserving it for kernel, device drivers, and hardware
>> I/O. Windows Server doesn't have that restriction (neither does
>> Linux).
>
> That statement is vague to the point it's not correct. All 32bit OS's have
> this limitation ...
No, they don't. Understand that we're *not* just talking about the
fact that you can only address 4 GiB with a 32-bit address word.
Windows XP will not let the system use all available RAM, despite the
fact that you've got a 4 GiB virtual address space for *each*
individual task, and often 64 GiB of address space available to the
hardware.
Even if you limit yourself to 32-bit addresses everywhere, that
doesn't mean you have to sacrifice all RAM above some arbitrary
address. It is true that memory mapped I/O regions will take away
address space ("memory holes"), preventing the system from addressing
a full 4 GiB of RAM. But not 0.5 or 1.0 GiB worth. The system is
perfectly capable of addressing RAM that is not consumed by I/O.
Virtual memory means that RAM could be mapped into user space tasks
(i.e., on XP, below the 2 GiB mark).
PAE lets the processor address more than 4 GiB of physical hardware.
It expands the physical address bus -- the actual address lines
coming out of the CPU -- and the corresponding address words in the
page tables. Just about every x86 processor designed since the
Pentium Pro (circa 1995) has supported PAE. Meanwhile, the PCI spec
says 32-bit PCI hardware has to support 64-bit addresses by
transferring the address in two address cycles. So while the hardware
may be "32-bit" in many ways, it's capable of supporting addressing
more than 4 GiB. You can have a full 4 GiB of RAM usable, and still
have address space for hardware I/O. Each task has a 4 GiB virtual
address space, but the physical addresses are mapped in from a larger
address space.
There's a tremendous amount of misinformation out there above
exactly how all this works on Windows XP. I've seen claims of various
limits imposed in various releases of XP. It appears that frequently,
quite a bit less RAM is available than should be, even accounting for
I/O regions. I've read varying explanations. One is that there are
drivers which assume there won't be RAM (storage, not I/O regions)
above a certain address, so Microsoft limited usable RAM to about 3
GiB. Another is that XP sets up memory management starting from the
address of the lowest I/O region, and Microsoft can't change that for
similar reasons.
When it comes to physical addresses above 4 GiB, I guess there are
even more drivers that can't handle that, and also a fair bit of
hardware (both PCI cards and motherboards) that don't implement it, or
do so improperly. So XP doesn't support this at all, again to avoid
making the world figure out what works and what doesn't. I suspect
this saved the majority of people a lot of grief, but it's still a
limitation imposed by the OS, since not *all* hardware and drivers are
broken.
There's some discussion of some of the issues here:
Changes to Functionality in Microsoft Windows XP Service Pack 2
Part 3: Memory Protection Technologies
http://technet.microsoft.com/en-us/library/bb457155.aspx
Physical Address Extension - PAE Memory and Windows
http://www.microsoft.com/whdc/system/platform/server/PAE/PAEdrv.mspx
-- Ben
~ Upgrade to Next Generation Antispam/Antivirus with Ninja! ~
~ <http://www.sunbelt-software.com/SunbeltMessagingNinja.cfm> ~