In computing, Physical Address Extension (PAE), sometimes referred to as Page Address Extension,

is a memory management feature for the x86 architecture. PAE was first introduced by Intel in the Pentium Pro, and later by AMD in the Athlon processor. It defines a page table hierarchy of three levels (instead of two), with table entries of 64 bits each instead of 32, allowing these CPUs to directly access a physical address space larger than 4&nbsp;gigabytes (2<sup>32</sup> bytes).

The page table structure used by x86-64 CPUs when operating in long mode further extends the page table hierarchy to four or more levels, extending the virtual address space, and uses additional physical address bits at all levels of the page table, extending the physical address space. It also uses the topmost bit of the 64-bit page table entry as a no-execute or "NX" bit, indicating that code cannot be executed from the associated page. The NX feature is also available in protected mode when these CPUs are running a 32-bit operating system, provided that the operating system enables PAE.

History

PAE was first implemented in the Intel Pentium Pro in 1995, although the accompanying chipsets usually lacked support for the required extra address bits.

PAE is supported by the Pentium Pro, Pentium II, Pentium III, and Pentium 4 processors. The first Pentium M family processors ("Banias") introduced in 2003 also support PAE; however, they do not show the PAE support flag in their CPUID information. This was remedied in a later revision of the "Dothan" core in 2005. It was also available on AMD processors including the AMD Athlon (although the chipsets are limited to 32-bit addressing) and later AMD processor models.

When AMD defined their 64-bit extension of the industry standard x86 architecture, AMD64 or x86-64, they also enhanced the paging system in "long mode" based on PAE.), 52-bit physical addresses, Later processor families use interconnects such as Hypertransport or QuickPath Interconnect, which lack dedicated memory address signals, so this relationship is less apparent.

The 32-bit size of the virtual address is not changed, so regular application software continues to use instructions with 32-bit addresses and (in a flat memory model) is limited to 4&nbsp;gigabytes of virtual address space. Operating systems supporting this mode use page tables to map the regular 4&nbsp;GB virtual address space into the physical memory, which, depending on the operating system and the rest of the hardware platform, may be as big as 64&nbsp;GB. The mapping is typically applied separately for each process, so that the additional RAM is useful even though no single process can access it all simultaneously.

Later work associated with AMD's development of x86-64 architecture expanded the theoretical possible size of physical addresses to 52 bits.

32-bit paging, 2 MiB pages, with PAE

400px|thumb|right|With PAE; 2&nbsp;MB pages

The entries in the page directory have an additional flag in bit&nbsp;7, named <code>PS</code> (for page size). If the system has set this bit to <code>1</code>, the page directory entry does not point to a page table but to a single, large 2&nbsp;MB page (Page Size Extension).

Summary of 32-bit paging

In all page table formats supported by IA-32 and x86-64, the 12 least significant bits of the page table entry are either interpreted by the memory management unit or are reserved for operating system use. In processors that implement the "no-execute" or "execution disable" feature, the most significant bit (bit&nbsp;63) is the NX bit. The next eleven most significant bits (bits 52 through 62) are reserved for operating system use by both Intel and AMD's architecture specifications. Thus, from 64 bits in the page table entry, 12 low-order and 12 high-order bits have other uses, leaving 40 bits (bits 12 though 51) for the physical page number. Combined with 12 bits of "offset within page" from the linear address, a maximum of 52&nbsp;bits are available to address physical memory. This allows a maximum RAM configuration of 2<sup>52</sup>&nbsp;bytes, or 4&nbsp;petabytes (about 4.5×10<sup>15</sup> bytes).

x86-64 paging

On x86-64 processors in native long mode, the address translation scheme uses PAE but adds a fourth table, the 512-entry page-map level&nbsp;4 table, and extends the page directory pointer table to 512&nbsp;entries instead of the original 4&nbsp;entries it has in protected mode. This means that 48&nbsp;bits of virtual page number are translated, giving a virtual address space of up to 256&nbsp;TB. For some processors, a mode can be enabled with a fifth table, the 512-entry page-map level&nbsp;5 table; this means that 57&nbsp;bits of virtual page number are translated, giving a virtual address space of up to 128&nbsp;PB. In Linux, commands such as <code>cat /proc/cpuinfo</code> can list the <code>pae</code> flag when present, as well as other tools such as the SYSLINUX Hardware Detection Tool.

To run the processor in PAE mode, operating system support is required. To use PAE to access more than 4&nbsp;GB of RAM, further support is required in the operating system, in the chipset, and on the motherboard. Some chipsets do not support physical memory addresses above 4&nbsp;GB (FFFFFFFF in hexadecimal), and some motherboards simply do not have enough RAM sockets to allow the installation of more than 4&nbsp;GB of RAM. Nevertheless, even if no more than 4&nbsp;GB of RAM is available and accessible, a PAE-capable CPU may be run in PAE mode, for example to allow use of the No execute feature.

Operating system support

Microsoft Windows

32-bit versions of Microsoft Windows support PAE if booted with the appropriate option. According to Microsoft Technical Fellow Mark Russinovich, some drivers were found to be unstable when encountering physical addresses above 4&nbsp;GB.

The following table shows the memory limits for 32-bit versions of Microsoft Windows:

{| class="wikitable sortable"

|+ Memory limits on 32-bit editions of Microsoft Windows,<br />with PAE support

! Windows version

! data-sort-type=number | Memory limit

|-

| Windows 2000 Professional, Server

| style="text-align:right;" | 4 GB

|-

| Windows 2000 Advanced Server

| style="text-align:right;" | 8 GB

|-

| Windows 2000 Datacenter

| style="text-align:right;" | 32 GB

|-

| Windows XP Starter

| style="text-align:right;" | 512 MB

|-

| Windows XP (other editions)

| style="text-align:right;" | 4 GB

|-

| Windows Server 2003 Web SP2

| style="text-align:right;" | 2 GB

|-

| Windows Server 2003 Standard SP2

| style="text-align:right;" | 4 GB

|-

| Windows Server 2003 Enterprise/Datacenter SP2

| style="text-align:right;" | 64 GB

|-

| Windows Storage Server 2003 Enterprise

| style="text-align:right;" | 8 GB

|-

| Windows Storage Server 2003 (other editions)

| style="text-align:right;" | 4 GB

|-

| Windows Home Server

| style="text-align:right;" | 4 GB

|-

| Windows Vista Starter

| style="text-align:right;" | 1 GB

|-

| Windows Vista (other editions)

| style="text-align:right;" | 4 GB

|-

| Windows Server 2008 Standard, Web

| style="text-align:right;" | 4 GB

|-

| Windows Server 2008 Enterprise, Datacenter

| style="text-align:right;" | 64 GB

|-

| Windows 7 Starter

| style="text-align:right;" | 2 GB

|-

| Windows 7 (other editions)

| style="text-align:right;" | 4 GB

|-

| Windows 8 (all editions)

| style="text-align:right;" | 4 GB

|-

|Windows 10 (all editions)

| style="text-align:right;" | 4 GB

|}

The original releases of Windows XP and Windows XP SP1 used PAE mode to allow RAM to extend beyond the 4&nbsp;GB address limit. However, it led to compatibility problems with 3rd party drivers which led Microsoft to remove this capability in Windows XP Service Pack 2. Windows XP SP2 and later, by default, on processors with the no-execute (NX) or execute-disable (XD) feature, runs in PAE mode to allow NX. The NX bit resides in bit&nbsp;63 of the page table entry and, without PAE, page table entries on 32-bit systems have only 32&nbsp;bits; therefore PAE mode is required to exploit the NX feature. However, "client" versions of 32-bit Windows (Windows XP SP2 and later, Windows Vista, Windows 7) limit physical address space to the first 4&nbsp;GB for driver compatibility

macOS

Mac OS X Tiger through Mac OS X Snow Leopard support PAE and the NX bit on IA-32 processors; Snow Leopard was the last version to support IA-32 processors. On x86-64 processors, all versions of macOS use 4-level paging (IA-32e paging rather than PAE) to address memory above 4&nbsp;GB. Mac Pro and Xserve systems can use up to 64&nbsp;GB of RAM.

Linux

The Linux kernel includes full PAE-mode support starting with version 2.3.23, in 1999 enabling access of up to 64&nbsp;GB of memory on 32-bit machines. A PAE-enabled Linux kernel requires that the CPU also support PAE. The Linux kernel supports PAE as a build option and major distributions provide a PAE kernel either as the default or as an option.

The NX bit feature requires a kernel built with PAE support.

Linux distributions now commonly use a PAE-enabled kernel as the default, a trend that began in 2009. many, including Ubuntu (and derivatives like Xubuntu and Linux Mint), and CentOS, have stopped distributing non-PAE kernels, thus making PAE-supporting hardware mandatory. Linux distributions that require PAE may refuse to boot on Pentium M family processors because they do not show the PAE support flag in their CPUID information (even though it is supported internally).

Distributions that still provide a non-PAE option, including Debian (and derivatives like LMDE 2 (Linux Mint Debian Edition)), Slackware, and LXLE, typically do so with "i386", "i486", or "retro" labels. The article Light-weight Linux distribution does list some others, allowing to install Linux onto old computers.

Others

FreeBSD and NetBSD also support PAE as a kernel build option. FreeBSD supports PAE in the 4.x series starting with 4.9, in the 5.x series starting with 5.1, and in all 6.x and later releases. Support requires the kernel <code>PAE</code> configuration-option. Loadable kernel modules can only be loaded into a kernel with PAE enabled if the modules were built with PAE enabled; the binary modules in FreeBSD distributions are not built with PAE enabled, and thus cannot be loaded into PAE kernels. Not all drivers support more than 4&nbsp;GB of physical memory; those drivers won't work correctly on a system with PAE.

OpenBSD has had support for PAE since 2006 with the standard GENERIC i386 kernel. GeNUA mbH supported the initial implementation. Since release 5.0 PAE has had a series of changes, in particular changes to i386 MMU processing for PMAP, see pmap(9).

Solaris supports PAE beginning with Solaris version 7. However, third-party drivers used with version 7 which do not specifically include PAE support may operate erratically or fail outright on a system with PAE.

Haiku added initial support for PAE sometime after the R1 Alpha 2 release. With the release of R1 Alpha 3 PAE is now officially supported.

ArcaOS has limited support for PAE for the purpose of creating RAM disks above the 4&nbsp;GB boundary.

See also

  • RAM limit
  • Page Size Extension
  • PCI hole
  • PSE-36
  • Architecture of Windows NT
  • 3 GB barrier
  • Large Physical Address Extension (LPAE) – in the ARM architecture
  • Intel 5-level paging

References

Further reading