Interesting article about how 32 bit windows handles memory >4gb

He talks about how Windows Server is the same code base as Windows client OSes, and Server can access more than 4GBs of RAM using PAE in 32-bit versions, but client OSes can not. All well and good, but what he neglects to research/mention is that there are a lot of consumer devices that you wouldn't run on a server that die when their device drviers are loaded above the 4GB mark. Also, I think it's good that MS is moving everyone to 64-bit, instead of trying to prop up a 32-bit hack. So technically a good article, but its conclusions are off, imo.
 
this article is terrible because it misrepresents why it was disabled. It was disabled because some* consumer drivers cant handle running with over 4gb enabled. Since the licensing mechanism was already in place for the various server flavors it was a logical way to disabled the >4gb use.

Because its only some drivers that break, his test on his machine is invalid. Microsoft has to worry about support calls from millions more people.

Its just microsoft bashing from somebody who's making too much of a deal about it being a "license value" that disables it.

Its all about driver compatibility, not "licensing" as this article claims.

Its a good thing, hauppauge drivers and others had problems with 4gb or >4gb machines even with the current 4gb limitation.
 
Please note, I don't have a dog in this fight, I just thought it was interesting information. Several months ago, there was some discussion about how much memory should show up (with particular emphasis on how the amount of video memory on a add-in card changes the amount of memory that 32 bit Windows sees as "available"). My take-away from that discussion (mistaken, apparently) was that the 4gb limit had to do with the 2^32 thing.

The author does discuss, and dismiss the incompatibility issue with drivers in the following text.
Anyway, how significant are these incompatibilities in real-world practice? The drivers that Microsoft talks about are not the sort of things that users install willy-nilly. They are much more the sort that come installed with a new computer, such that they have been tested (or ought to have been) by the manufacturer. They are also the sort of driver to which Microsoft will not give a digital signature unless the driver passes Microsoft’s testing at the Windows Hardware Quality Labs (WHQL). Add that Microsoft’s Device Driver Kit (DDK) for writing device drivers has defined the PHYSICAL_ADDRESS type as 64 bits since at least Windows NT 4.0 and that double-buffering into physical memory below 4GB has been supported since Windows 2000, and you might be forgiven some incredulity that these incompatibilities can now exist in any number, let alone that concern for them explains the forcible crippling of new installations of 32-bit Windows Vista on new computers.​

Is he right or wrong to dismiss it in this way? I don't know, and I won't pretend to.
 
My take-away from that discussion (mistaken, apparently) was that the 4gb limit had to do with the 2^32 thing.
You're right, though. 2^32 addresses on a byte-addressable machine leaves you with 4GB of addressable memory, nothing more. PAE actually depends on the existence of a 36-bit address bus which allows up to 64GB of addressable memory.
 
PAE is an ugly hack anyway - even with it on, no individual process could access more than 2 (or 3 with the right flags) GB and would have to be specially coded to take advantage of it. MS is right to preserve system stability over ugly hacks. If you need more than 4GB of RAM, install the 64-bit versions, which support it just fine.
 
Bah, he's trying to use a few cases where it may work good enough as a reason why it should be enabled globally. That's not realistic when the same kernel has to support all compatible hardware. It would cause a lot more problems to distinguish why system A works and system B doesn't.

The somewhat clean break between Win32 and "Win64" was a necessity.
 
PAE is an ugly hack anyway - even with it on, no individual process could access more than 2 (or 3 with the right flags) GB and would have to be specially coded to take advantage of it. MS is right to preserve system stability over ugly hacks. If you need more than 4GB of RAM, install the 64-bit versions, which support it just fine.

How can you call it an ugly hack? You are using a 32bit OS, so of course the virtual address space is limited to 4GB. PAE just extends the physical address space (depending on the CPU, a lot more than 64GB can be addressed). Nothing ugly about that. And if you are running multiple applications they will happily benefit from a lot of ram without being coded in any special way.
 
Last edited:
1. Some 32-bit drivers don't function with addresses > 4GBs.
2. Some drivers have to use double-buffering mechanisms that zap performance with addresses > 4GBs.
3. Processes are limited to 2 or 3GBs of ram, unless extra coding is added to allow inter-process communication.

Ergo, it's an ugly hack. What's the use of talking about it, it's just going to get people pumped up to use 32-bits with more than 4GBs of memory when 64-bit is better in the long run.
 
1. Some 32-bit drivers don't function with addresses > 4GBs.
2. Some drivers have to use double-buffering mechanisms that zap performance with addresses > 4GBs.
3. Processes are limited to 2 or 3GBs of ram, unless extra coding is added to allow inter-process communication.

Ergo, it's an ugly hack. What's the use of talking about it, it's just going to get people pumped up to use 32-bits with more than 4GBs of memory when 64-bit is better in the long run.
While I agree with your conclusion, your points are silly. It's absolutely not an ugly hack and fits naturally into the virtual memory subsystem we've been using since 80386. The limitations you describe are only relevant to Windows desktop systems, and except for the third (which is arguable on merit alone), are easily resolved (and probably already resolved) third-party problems, that could neatly all be dealt with by shipping with PAE support disabled but included optionally.

FWIW at a previous job doing medical imaging we were running into real memory limitations 4 years ago in our Windows XP-based workstation software. Proper PAE support would have helped a good deal.
 
2. Some drivers have to use double-buffering mechanisms that zap performance with addresses > 4GBs.
Sure, if the hardware device cannot address above 4G, double buffering is used. But that doesn't change because you install a 64bit OS - double buffering will still be used.

Btw, you cannot call PAE a dirty hack just because some driver programmers fail to write functional drivers.
 
Last edited:
keenan: unix OSes have to do double-buffering as well.

pallesen: fine, not a dirty hack, but sub-optimal compared to 64-bit.

I can't find any articles explaining that 64-bit OSes have to use double-buffering, but maybe they do. Anyways, I don't think this subject matters, everyone will be better off on 64-bit...
 
A perifical hardware device doesn't magically get 64bit addressing support just because you install a 64bit OS.

Anyways, here is a link: http://www.microsoft.com/whdc/system/platform/64bit/64bitsystems.mspx

"Adding 64-bit addressing support to a driver can significantly improve overall system performance. In 64-bit Windows, device drivers that perform DMA but do not support 64-bit addressing are double-buffered, which results in lower relative performance"
 
FWIW at a previous job doing medical imaging we were running into real memory limitations 4 years ago in our Windows XP-based workstation software. Proper PAE support would have helped a good deal.
PAE doesn't increase the amount of memory a program can use, only the system, so it wouldn't have helped.

And saying "leave it disabled as an option" doesn't work either. If it affects system stability, cut it. Even having the option makes debugging and crash analysis that much tougher.
 
a) there was never a "license" that enabled >4GB support other than server licenses and server qualified drivers had a lot more limitations, so there was no money gouging here
b) when this was first implemented 4GB was unheard of in even extreme high end desktop machines, by the time this started to be an issue 64-bit XP was released and all OSes since have had licenses that let you use either 32 or 64bit with the same license, depending on your needs, so again, no gouging, just idiots who want to use 32 bit on systems that should be 64 bit because they're idiots.
 
PAE doesn't increase the amount of memory a program can use, only the system, so it wouldn't have helped.

For all we known that application could be coded to use AWE, or the work was done using multiple applications.
 
I'm sorry you have reading comprehension issues, let me insert the missing, easily assumable word. There never was a "workstation license" to enable >4GB support.
 
Back
Top