64-Bit Computing
64-bit processors have been around for many years. They first appeared in supercomputer designs, then workstations and servers, and now are widely available. The Xbox 360’s PowerPC is a 64-bit processor, but has a 32-bit process model. Many well-known CPUs are 64-bit processors, but none of them were successful enough to displace the broad adoption of the x86 PC.
The x64 64-bit processor design directly addresses backward compatibility concerns by extending the existing x86 architecture, allowing it to run x86 32-bit binaries without emulation and providing a new 64-bit memory model.
First introduced by AMD and known alternatively as “x86-64“ and “AMD64,” it has since been adopted by Intel as “EM64T” or “Intel 64.” Now it is known more generically as “x64.” The vast majority of desktop CPUs and most laptop CPUs sold in recent years are all x64 capable processors. They fully support both pure 32-bit and mixed 32-bit/64-bit applications.
With the introduction of a new architecture, some improvements were made to the 64-bit execution mode beyond expanding the registers and addressing from 32 bit to 64 bit. These include eight more general purpose registers, eight more SSE registers, an NX no-execute bit (which otherwise requires the use of PAE to access), new instructions, and guaranteed SSE2 or later support.
A few old system programming features of x86 were declared “legacy.” While they are still available in the current hardware to support x86 32-bit applications, they are not available in 64-bit execution mode.9 Current implementations support 1 TB of physical memory, a limit that can easily be increased in the future. The ample physical addressing capability completely eliminates the concerns about the “hidden memory” problem.
Supporting the 64-bit execution mode requires a new version of the operating system. Windows now comes in two flavors:
Current Windows x64 versions (Windows XP Pro X64 Edition, Windows Server 2003, Windows Server 2008, and Windows Vista) support up to 44 bits of virtual memory addressing. Each application is given a 43-bit address space which is 8 TB, or 4,096 times larger than the process address space under 32-bit Windows. Future versions of Windows can easily extend this to even greater levels.
One of the benefits of being able to run 64-bit native versions of applications is obviously a huge increase in memory capacity, but there are other added benefits. Because the kernel itself is running in 64-bit mode, it can easily accommodate the desires of a 32-bit Large Address Aware (LAA) application.
As such, 32-bit programs linked with the Large Address Aware flag are able to allocate a full 4 GB of user mode address space when running on Windows x64. There is no special boot mode required or system stability impact that would require careful configuration. This makes LAA a highly attractive, consumer-friendly way of giving 32-bit processes more virtual address space on Windows x64.
Windows XP Pro x64 Edition, released in April 2005, was an early adopter consumer OS. The Windows-on-Windows-64 (WOW64) system works well for running 32-bit applications on the x64 version of Windows. The OS still required a new generation of 64-bit native kernel-mode drivers, as kernel-mode code must use the native memory model of the system. Existing programs ran into problems on the new OS in three ways:
-
Older installer packages still included 16-bit code from the Windows 3.1 era, and this code is not supported when running in 64-bit execution mode.
-
Applications that used kernel-mode drivers, such as copy protection schemes common in games, needed to provide 64-bit native Authenticode signed versions of these components.
-
The new OS sometimes exposed bugs in poorly written installers that made assumptions about directory paths, invalid path characters, or ran afoul of WOW64’s legacy registry handling.
The release of Windows Vista brings x64 into the mainstream. Now, all editions of Windows Vista are available in both x86 and x64 versions, and all the Windows Vista logo programs push support for Windows x64. These programs help drive the whole Windows ecosystem to support x64 versions of Windows. In particular, they provide third-party, 64-bit device drivers. The lack of broad driver support was the main reason for the limited distribution of Windows XP Pro x64 Edition.
9 “AMD64 Architecture Programmer’s Manual,” AMD.
|
Part 1 - Practical Problems With 32bit Addressing In Windows (description and test of current games without LAA boot)
http://www.anandtech.com/gadgets/showdoc.aspx?i=3034
Part 2 - Windows XP, Vista, and the 2GB Barrier: (Comparison of Vista/XP virtual memory usage of games)
http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=3044
Part 3 - Vista Buys Some Time: (Testing the KB940105 Hotfix)
http://www.anandtech.com/systems/showdoc.aspx?i=3060
This is not entirely true, depending on what metrics you use for the "distance from the barrier". Part of the problem is memory fragmentation, and the position of the "hole" created by the allocation differs depending on its size.
The game will usually "hit the 2GB barrier" way before it uses 2 GB of virtual space.
The first mitigation effort for all the titles hitting this problem was to reduce vm fragmentation. Glaring problems are easy to fix, but games have been dealing with this concern for a while. Many AAA titles with full content are very close to filling up the 2 GB of VAS available to standard 32-bit apps. While KB9410105 brings the memory usage inline with XPDM to eliminate the Windows XP vs. Windows Vista differences, it doesn't change the fact that games are wanting to include more and more content.