Misplaced Pages

Physical Address Extension: Difference between revisions

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
Browse history interactively← Previous editContent deleted Content addedVisualWikitext
Revision as of 22:12, 2 March 2014 editSomeone not using his real name (talk | contribs)11,896 edits Self-revert while investigating this further← Previous edit Latest revision as of 01:51, 16 September 2024 edit undoMeno25 (talk | contribs)Autopatrolled, Administrators215,919 edits Linux 
(298 intermediate revisions by more than 100 users not shown)
Line 1: Line 1:
{{short description|Memory management feature}}
{{ref improve|date=March 2014}}
{{more citations needed|date=March 2014}}
In ], '''Physical Address Extension''' ('''PAE''') is a feature to allow 32-bit ] ]s (CPUs) to access a physical address space (including ] and memory mapped devices) larger than 4 ]s.


In ], '''Physical Address Extension''' ('''PAE'''), sometimes referred to as '''Page Address Extension''',<ref>{{cite book
PAE was first implemented in the Intel ] in 1995,<ref name="Shanley1998">{{cite book|author=T. Shanley|title=Pentium Pro and Pentium II System Architecture|url=http://books.google.com/books?id=MLJClvCYh34C&pg=PA439|year=1998|publisher=Addison-Wesley Professional|isbn=978-0-201-30973-7|page=439}}</ref> although the accompanying chipsets usually lacked support for the required extra address bits.<ref></ref> It was extended{{when|date=December 2013}} by ] to add a level to the page table hierarchy, to allow it to handle up to 52-bit physical addresses, add ] functionality, and make it the mandatory memory paging model in ].<ref>{{cite web |url=http://support.amd.com/us/Processor_TechDocs/24593.pdf |title=AMD64 Architecture Programmer's Manual Volume 2: System Programming |date=November 1, 2009 |work=AMD64 Architecture Programmer's Manual |publisher=Advanced Micro Devices |pages=124–143 |format=PDF |accessdate=February 3, 2010 |quote=Long-mode page translation requires the use of physical-address extensions (PAE). Before activating long mode, PAE must be enabled by setting <code>CR4.PAE</code> to <code>1</code>. Activating long mode before enabling PAE causes a general-protection exception (#GP) to occur.}}</ref> PAE is supported by Intel Pentium Pro and later Pentium-series processors except most 400&nbsp;MHz-bus versions of the ].{{Citation needed|date=January 2013}} It is also available on AMD processors including the AMD ]{{dubious|date=March 2014}} and later AMD processor models.
|author=<!--Staff writer(s); no by-line.-->
|title=Dual-Core Intel® Xeon® Processor 2.80 GHz Specification Update
|url= https://www.intel.com/content/dam/support/us/en/documents/processors/xeon/sb/309159.pdf
|publisher= Intel Corporation
|page= 18
|date=October 2006
}}</ref>
is a memory management feature for the x86 architecture. PAE was first introduced by Intel in the ], and later by AMD in the ] processor.<ref name="Athlon PAE">{{cite book|url=http://pdf.datasheetcatalog.com/datasheet/AdvancedMicroDevices/mXvyvs.pdf |access-date=2017-04-13|publisher=AMD, Inc.|title=AMD Athlon™ Processor x86 Code Optimization Guide|chapter=Appendix E|page=250 |date=February 2002|edition=Revision K|quote=A 2-bit index consisting of PCD and PWT bits of the page table entry is used to select one of four PAT register fields when PAE (page address extensions) is enabled, or when the PDE doesn’t describe a large page.}}</ref> It defines a ] 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 ] larger than 4&nbsp;]s (2<sup>32</sup> bytes).

The page table structure used by ] CPUs when operating in ] 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 ], indicating that code cannot be executed from the associated page. The NX feature is also available in ] 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 ] in 1995,<ref name="Shanley1998">{{cite book|author=T. Shanley|title=Pentium Pro and Pentium II System Architecture|url=https://books.google.com/books?id=MLJClvCYh34C&pg=PA439|year=1998|publisher=Addison-Wesley Professional|isbn=978-0-201-30973-7|page=439}}</ref> although the accompanying chipsets usually lacked support for the required extra address bits.<ref>{{cite web|url=https://learn.microsoft.com/en-us/previous-versions/windows/hardware/design/dn613969(v=vs.85) |title=Operating Systems and PAE Support |work=Hardware Developers Center |date=1 June 2017 |access-date=11 July 2023}}</ref>

PAE is supported by the Pentium Pro, ], ], and ] processors. The first ] family processors ("Banias") introduced in 2003 also support PAE; however, they do not show the PAE support flag in their ] information.<ref name="Pentium-M-PAE">{{cite web |url=https://help.ubuntu.com/community/PAE |title=PAE - Ubuntu Community Help Wiki}}</ref> This was remedied in a later revision of the "Dothan" core in 2005. It was also available on AMD processors including the AMD ]<ref>{{cite book|url=http://pdf.datasheetcatalog.com/datasheet/AdvancedMicroDevices/mXvyvs.pdf |access-date=2017-04-13|publisher=AMD, Inc.|title=AMD Athlon™ Processor x86 Code Optimization Guide|chapter=Appendix E|page=250 |date=February 2002|edition=Revision K|quote=A 2-bit index consisting of PCD and PWT bits of the page table entry is used to select one of four PAT register fields when PAE (page address extensions) is enabled, or when the PDE doesn’t describe a large page.}}</ref><ref>{{cite web|url=https://www.cpu-world.com/CPUs/K7/AMD-Athlon%20500%20-%20AMD-K7500MTR51B%20C.html |title=AMD Athlon 500 - AMD-K7500MTR51B C |work=Cpu-world.com |date=26 March 2014 |access-date=11 July 2023}}</ref> (although the chipsets are limited to 32-bit addressing<ref>{{cite web |url=http://pdf.datasheetcatalog.com/datasheet/AdvancedMicroDevices/mXvrtt.pdf |title=AMD-762 System Controller |page=2 |quote=Supports up to 4 Gbytes of memory}}</ref>) and later AMD processor models.

When ] defined their 64-bit extension of the industry standard ] architecture, ] or x86-64, they also enhanced the paging system in "]" based on PAE.<ref name="amd-24593-PAE-REQ">{{cite web
|url = https://www.amd.com/system/files/TechDocs/24593.pdf
|title = Volume 2: System Programming
|author = AMD Corporation
|date = June 2023
|work = AMD64 Architecture Programmer's Manual
|publisher = AMD Corporation
|access-date = 2023-07-11
|page = 139
|quote=Long-mode page translation requires the use of physical-address extensions (PAE). Before activating long mode, PAE must be enabled by setting CR4.PAE to 1. Activating long mode before enabling PAE causes a general-protection exception (#GP) to occur.}}</ref>
It supports 64-bit virtual addresses<ref name="amd-24593"/>{{rp|page=24|date=July 2023}} ({{as of|2023|7|lc=y|post=,}} 48 bits are implemented on some processors and 57 bits are implemented on others<ref name="amd-24593">{{cite web
|url = https://www.amd.com/system/files/TechDocs/24593.pdf
|title = Volume 2: System Programming
|author = AMD Corporation
|date = June 2023
|work = AMD64 Architecture Programmer's Manual
|publisher = AMD Corporation
|access-date = 2023-07-11
}}</ref>{{rp|pages=139,141–143|date=July 11, 2023}}<ref>{{cite web
|url = https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html
|title = Volume 3 (3A, 3B, 3C & 3D): System Programming Guide
|at = p. 4-7
|date = June 2023
|work = Intel 64 and IA-32 Architectures Software Developer’s Manual
|publisher = Intel
|access-date = 2023-07-11
}}</ref>), 52-bit physical addresses,<ref name="amd-24593"/>{{rp|page=24|date=December 2018}}
and includes ] functionality.
When the x86-64 processor is initialized, the PAE feature is required to be enabled before the processor is switched from Legacy Mode to Long Mode.<ref name="amd-24593-PAE-REQ"/>


== Design == == Design ==
With PAE, the ] of the x86 architecture is enlarged from 32 to 64 bits. This allows more room for the physical page address, or "page frame number" field, in the page table entry. In the initial implementations of PAE the page frame number field was expanded from 20 to 24 bits. The size of the "byte offset" from the address being translated is still 12 bits, so total physical address size increases from 32&nbsp;bits to 36&nbsp;bits (i.e. from 20+12 to 24+12). This increased the physical memory that is theoretically addressable by the CPU from 4&nbsp;GB to 64&nbsp;GB.
With PAE, ] architecture is augmented with additional address lines used to select the additional memory, so physical address size increases from 32&nbsp;bits to 36&nbsp;bits. This increases the physical memory addressable by the system from 4&nbsp;GB to 64&nbsp;GB. 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 ]) is limited to 4&nbsp;gigabytes of virtual address space. Operating systems supporting this mode use ]s to map the regular 4&nbsp;GB address space into the physical memory, which depending on the operating system may be as big as 64&nbsp;GB. The mapping is typically applied separately for each ], so that the extra memory is useful even though no single regular application can access it all simultaneously.


In the first processors that supported PAE, support for larger physical addresses is evident in their package pinout, with address pin designations going up to A35 instead of stopping at A31.<ref>{{cite book|title=Pentium® III Xeon™ Processor at 500 and 550 MHz Datasheet | publisher=Intel Corporation |publication-date=February 2000 |id=245094-002 |quote=A# (I/O): The A# (Address) signals define a 2-to-the-36-byte physical memory address space. |page=86 }}</ref> Later processor families use interconnects such as ] or ], which lack dedicated memory address signals, so this relationship is less apparent.
Later work associated with AMD's development of ] architecture expanded the theoretical possible size of physical addresses to 52 bits.


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 ]) is limited to 4&nbsp;gigabytes of virtual address space. Operating systems supporting this mode use ]s 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 ], so that the additional RAM is useful even though no single process can access it all simultaneously.
==Page table structures==
In ], ] processors use a two-level page translation scheme, where the ] <code>CR3</code> points to a single 4&nbsp;KB long ''page directory'' divided into 1024 &times; 4&nbsp;byte entries that point to 4&nbsp;KB long ]s, similarly consisting of 1024 &times; 4&nbsp;byte entries pointing to 4&nbsp;KB long ].


Later work associated with AMD's development of ] architecture expanded the theoretical possible size of physical addresses to 52 bits.<ref name="amd-24593"/>{{rp|page=24|date=July 2023}}
Enabling PAE (by setting bit&nbsp;5, <code>PAE</code>, of the system register <code>CR4</code>) causes major changes to this scheme. By default, the size of each page remains as 4&nbsp;KB. Each entry in the page table and page directory becomes 64&nbsp;bit long (8&nbsp;bytes), instead of 32&nbsp;bits, to allow for additional address bits. However, the size of tables ''does not'' change, so both table and directory now have only 512 entries. Because this allows only one quarter of the entries of the original scheme, an extra level of hierarchy has been added, so CR3 now points to ''Page Directory Pointer Table'', a short table containing four pointers to page directories.


== Page table structures ==
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 (]).


=== 32-bit paging, 4 KiB pages, without PAE ===
In all page table formats supported by ] and ], 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 diable" feature, the most significant bit (bit&nbsp;63) is the ]. 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 page table entry, 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).
]
In ] with paging enabled (bit&nbsp;31, <code>PG</code>, of control register <code>CR0</code> is set), but without PAE, ] processors use a two-level page translation scheme. ] <code>CR3</code> holds the page-aligned physical address of a single 4&nbsp;KB long ''page directory''. This is divided into 1024 four-byte page directory entries that in turn, if valid, hold the page-aligned physical addresses of ]s, each 4&nbsp;KB in size. These similarly consist of 1024 four-byte page table entries which, if valid, hold the page-aligned physical addresses of 4&nbsp;KB long ] of physical memory (RAM).


{{clear}}
On ] processors in native ], 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. Currently 48&nbsp;bits of virtual page number are translated, giving a virtual address space of up to 256&nbsp;TB.<ref name="amd-24593">{{cite web
|url=http://support.amd.com/us/Embedded_TechDocs/24593.pdf
|title =Volume 2: System Programming
|author =AMD Corporation
|date=May 2011
|work =AMD64 Architecture Programmer's Manual
|publisher =AMD Corporation
|format =pdf
|accessdate =2011-10-29
}}</ref> In the page table entries, in the original specification, 40&nbsp;bits of physical page number are implemented.


=== 32-bit paging, 4 MiB pages, without PAE ===
<gallery caption="Page table structures" widths="400px" heights="300px" perrow="2">
Image:X86 Paging 4K.svg|No PAE, 4&nbsp;KB 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 4&nbsp;MB page (]).
Image:X86 Paging 4M.svg|No PAE, 4&nbsp;MB pages
Image:X86 Paging PAE 4K.svg|With PAE; 4&nbsp;KB pages
Image:X86 Paging PAE 2M.svg|With PAE; 2&nbsp;MB pages
</gallery>


{{clear}}
==Support==

=== 32-bit paging, 4 KiB pages, with PAE ===
]

Enabling PAE (by setting bit&nbsp;5, <code>PAE</code>, of the system register <code>CR4</code>) causes major changes to this scheme. By default, the size of each page remains as 4&nbsp;KB. Each entry in the page table and page directory becomes 64&nbsp;bits long (8&nbsp;bytes), instead of 32&nbsp;bits, to allow for additional address bits. However, the size of each table ''does not'' change, so both table and directory now have only 512 entries. Because this allows only one half of the entries of the original scheme, an extra level of hierarchy has been added, so the system register {{code|CR3}} now points physically to a ''Page Directory Pointer Table'', a short table containing four pointers to page directories.

Supporting 64&nbsp;bit addresses in the page-table is a significant change as this enables two changes to the processor addressing. Firstly, the page table walker, which uses physical addresses to access the page table and directory, can now access physical addresses greater than the 32-bit physical addresses supported in systems without PAE. From {{code|CR3}}, the page table walker can access page directories and tables that are beyond the 32-bit range. Secondly, the physical address for the data being accessed (stored in the page table) can be represented as a physical address larger than the 32-bit addresses supported in a system without PAE. Again, this allows data accesses to access physical memory regions beyond the 32-bit range.<ref name="Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A, Chapter 4.4 Paging">{{cite book |title=Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A |chapter=4.4 Paging |url=https://www.intel.com/content/www/us/en/content-details/782158/intel-64-and-ia-32-architectures-software-developer-s-manual-combined-volumes-1-2a-2b-2c-2d-3a-3b-3c-3d-and-4.html?wapkw=intel%2064%20and%20ia-32%20architectures%20software%20developer%27s%20manual&docid=782161 |publisher=] |access-date=28 October 2023}}</ref>

=== 32-bit paging, 2 MiB pages, with PAE ===
]
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 (]).

{{clear}}

=== Summary of 32-bit paging===
In all page table formats supported by ] and ], 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 ]. 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 ] processors in native ], 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 ]; this means that 57&nbsp;bits of virtual page number are translated, giving a virtual address space of up to 128&nbsp;PB.<ref name="amd-24593"/>{{rp|pages=141–153}}
In the page table entries, in the original specification, 40&nbsp;bits of physical page number are implemented.

== Hardware support ==
{{see also|CPUID}} {{see also|CPUID}}
Software can identify via the <code>]</code> flag <code>PAE</code> whether a CPU supports PAE mode or not. A free-of-charge program for Microsoft Windows is available which will list many processor capabilities, including PAE support.<ref></ref> In Linux, commands such as <code>cat /proc/cpuinfo</code> can list the <code>pae</code> flag when present,<ref>{{cite web | title = Detecting your Hardware | publisher = Gentoo | date = October 8, 2008 | url = http://www.gentoo-wiki.info/Detecting_your_Hardware | accessdate = 2013-04-28 }}</ref> as well as other tools such as the ] Hardware Detection Tool.


Software can identify via the <code>]</code> flag <code>PAE</code> whether a CPU supports PAE mode or not. A free-of-charge program for Microsoft Windows is available which will list many processor capabilities, including PAE support.<ref>{{cite web|url=https://learn.microsoft.com/en-us/sysinternals/downloads/coreinfo |title=Coreinfo - Sysinternals |work=Windows Sysinternals |publisher=Microsoft |date=7 June 2023 |access-date=11 July 2023}}</ref> In Linux, commands such as <code>cat /proc/cpuinfo</code> can list the <code>pae</code> flag when present,<ref>{{cite web | title = Detecting your Hardware | publisher = Gentoo | date = October 8, 2008 | url = http://www.gentoo-wiki.info/Detecting_your_Hardware | access-date = 2013-04-28 |archive-url=https://web.archive.org/web/20130503041154/http://www.gentoo-wiki.info/Detecting_your_Hardware#.2Fproc.2Fcpuinfo |archive-date=2013-05-03 |url-status=usurped}}</ref> as well as other tools such as the ] Hardware Detection Tool.
To use PAE, motherboard and ] support is required.

To run the processor in PAE mode, ] support is required. To use PAE to access more than 4 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 GB (FFFFFFFF in hexadecimal), and some motherboards simply do not have enough RAM sockets to allow the installation of more than 4 GB of RAM. Nevertheless, even if no more than 4 GB of RAM is available and accessible, a PAE-capable CPU may be run in PAE mode, for example to allow use of the ] feature.

== Operating system support ==


=== Microsoft Windows ===
==Operating system support==


32-bit versions of ] support PAE if booted with the appropriate option. According to Microsoft Technical Fellow ], some drivers were found to be unstable when encountering physical addresses above 4GB.<ref name="markr200807">{{cite web
===Microsoft Windows===
] supports PAE if booted with the appropriate option, but according to Geoff Chappell, Microsoft limits 32-bit versions of Windows to 4&nbsp;GB as a matter of its licensing policy.<ref name="geoffchappell.com">http://www.geoffchappell.com/notes/windows/license/memory.htm</ref> Microsoft Technical Fellow ] says that some drivers were found to be unstable when encountering physical addresses above 4&nbsp;GB.<ref name="markr200807">{{cite web
|url=http://blogs.technet.com/markrussinovich/archive/2008/07/21/3092070.aspx |url=http://blogs.technet.com/markrussinovich/archive/2008/07/21/3092070.aspx
|title=Pushing the Limits of Windows: Physical Memory |title=Pushing the Limits of Windows: Physical Memory
|date=2008-07-21 |date=2008-07-21
|accessdate=2010-07-11 |access-date=2010-07-11
|author=Mark Russinovich |author=Mark Russinovich
|archive-url=https://web.archive.org/web/20080725002837/http://blogs.technet.com/markrussinovich/archive/2008/07/21/3092070.aspx
|archive-date=2008-07-25
|url-status=dead
}}</ref> }}</ref>


The following table shows the hard memory limits for ]-based versions of Microsoft Windows, with PAE enabled: The following table shows the memory limits for 32-bit versions of Microsoft Windows:
{| class="wikitable sortable" style="text-align: center;" {| class="wikitable sortable"
|+ Memory limits on 32-bit editions of Microsoft Windows, with PAE support<ref>{{cite web |title = Memory Limits for Windows releases |website=] |publisher = ] |date = December 5, 2007 |url = http://msdn2.microsoft.com/en-us/library/aa366778.aspx |accessdate = 2007-12-10 }}</ref><ref>{{cite web |title = Intel Physical Addressing Extensions (PAE) in Windows 2000 |website=Support |publisher = ] |date = October 26, 2007 |url = http://support.microsoft.com/kb/268363/ |accessdate = 2007-12-29 }}</ref><ref>{{cite web |title = Overview of Windows Server 2003 R2 Datacenter Edition |website=] |publisher = ] |url = http://technet.microsoft.com/en-au/windowsserver/bb429508.aspx |accessdate = 2009-05-15 }}</ref> |+ Memory limits on 32-bit editions of Microsoft Windows,<br/>with PAE support<ref>{{cite web|title = Memory Limits for Windows releases|website = ]|publisher = ]|date = December 5, 2007|url = http://msdn2.microsoft.com/en-us/library/aa366778.aspx|access-date = 2015-11-16|archive-url = https://web.archive.org/web/20071217093949/http://msdn2.microsoft.com/en-us/library/aa366778.aspx|archive-date = December 17, 2007|url-status = dead}}</ref><ref>{{cite web |title = Intel Physical Addressing Extensions (PAE) in Windows 2000 |website=Support |publisher = ] |date = October 26, 2007 |url = http://support.microsoft.com/kb/268363/ |access-date = 2007-12-29 |archive-url=https://web.archive.org/web/20080101144938/http://support.microsoft.com/kb/268363/ |archive-date=2008-01-01 |url-status=dead}}</ref><ref>{{cite web |title = Overview of Windows Server 2003 R2 Datacenter Edition |website=] |publisher = ] |url = https://technet.microsoft.com/en-au/windowsserver/bb429508.aspx |access-date = 2009-05-15 |archive-url=https://web.archive.org/web/20111128004758/https://technet.microsoft.com/en-au/windowsserver/bb429508.aspx |archive-date=2011-11-28 |url-status=dead}}</ref>
! Windows Version ! Windows version
! Memory limit ! data-sort-type=number | Memory limit
|- |-
| ] Professional, Server | ] Professional, Server
| style="text-align:right;" | 4 GB
| 4 GB
|- |-
| ] Advanced Server | ] Advanced Server
| style="text-align:right;" | 8 GB
| 8 GB
|- |-
| ] Datacenter | ] Datacenter
| style="text-align:right;" | 32 GB
| 32 GB
|- |-
| ] Starter | ] Starter
| style="text-align:right;" | 0.5 GB
| 512 MB
|- |-
| ] (Other editions) | ] (other editions)
| style="text-align:right;" | 4 GB
| 4 GB
|- |-
| ] Web SP2 | ] Web SP2
| style="text-align:right;" | 2 GB
| 2 GB
|- |-
| ] Standard SP2 | ] Standard SP2
| style="text-align:right;" | 4 GB
| 4 GB
|- |-
| ] Enterprise/Datacenter SP2 | ] Enterprise/Datacenter SP2
| style="text-align:right;" | 64 GB
| 64 GB
|- |-
| ] Enterprise | ] Enterprise
| style="text-align:right;" | 8 GB
| 8 GB
|- |-
| ] (other editions) | ] (other editions)
| style="text-align:right;" | 4 GB
| 4 GB
|- |-
| ] | ]
| style="text-align:right;" | 4 GB
| 4 GB
|- |-
| ] Starter | ] Starter
| style="text-align:right;" | 1 GB
| 1 GB
|- |-
| ] (Other editions) | ] (other editions)
| style="text-align:right;" | 4 GB
| 4 GB
|- |-
| ] Standard, Web | ] Standard, Web
| style="text-align:right;" | 4 GB
| 4 GB
|- |-
| ] Enterprise, Datacenter | ] Enterprise, Datacenter
| style="text-align:right;" | 64 GB
| 64 GB
|- |-
| ] Starter | ] Starter
| style="text-align:right;" | 2 GB
| 2 GB
|- |-
| ] (Other editions) | ] (other editions)
| style="text-align:right;" | 4 GB
| 4 GB
|- |-
| ] | ] (all editions)
| style="text-align:right;" | 4 GB
| 4 GB
|- |-
| ] Pro, Enterprise |] (all editions)
| style="text-align:right;" | 4 GB
| 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 ] or ] feature, runs in PAE mode in order to allow NX.<ref>{{cite web |url=http://support.microsoft.com/kb/888137 |title=The RAM reported by the System Properties dialog box and the System Information tool is less than you expect in Windows Vista or in Windows XP Service Pack 2 or later version (MSKB 888137) |accessdate=2009-01-30 |work=Knowledge Base |publisher=Microsoft }}</ref> The ''no execute'' (NX, or XD for ''execution disable'') 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 in order 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 <ref name="markr200807"/> via the licensing limitation mechanism,<ref name="geoffchappell.com"/> even though these versions do run in PAE mode if NX support is enabled. 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 ] or ] feature, runs in PAE mode in order to allow NX.<ref>{{cite web |url=http://support.microsoft.com/kb/888137 |title=The RAM reported by the System Properties dialog box and the System Information tool is less than you expect in Windows Vista or in Windows XP Service Pack 2 or later version (MSKB 888137) |access-date=2009-01-30 |work=Knowledge Base |publisher=Microsoft |archive-url=https://web.archive.org/web/20090204015716/http://support.microsoft.com/kb/888137 |archive-date=2009-02-04 |url-status=dead}}</ref> 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 in order 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 <ref name="markr200807"/> even though these versions do run in PAE mode if NX support is enabled.


] will only run on processors which support PAE, in addition to ] and ].<ref></ref> ] and later releases will only run on processors which support PAE, in addition to ] and ].<ref>{{cite web|last=Khurshid |first=Usman |url=http://www.technize.net/how-to-check-if-your-processor-supports-pae-nx-and-sse2-for-windows-8-installation/?ModPagespeed=noscript |title=How To Check If Your Processor Supports PAE, NX And SSE2 For Windows 8 Installation |work=technize.net |publisher=Technize |date=2 November 2012 |access-date=20 April 2014}}</ref><ref>{{cite web|url=https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/dn482072(v=win.10)|title=PAE/NX/SSE2 Support Requirement Guide for Windows 8|publisher=Microsoft Docs|date=10 February 2014|access-date=11 July 2023}}</ref>


===OS X=== === macOS ===
Intel versions of ] support PAE. Versions 10.4.4 through 10.5.8 of ] run on both x86 and PowerPC processors. Version 10.6 and 10.7 version of OS X only run on x86 processors. So far, all x86 Macs have used Intel (not AMD) CPUs. OS X versions that are compatible with x86 fully support PAE and the ] on all Intel Macs. ] and ] systems can use up to 64&nbsp;GB of RAM. The Mac OS X 10.5 (Leopard) kernel remains 32-bit. Mac OS X 10.6 (Snow Leopard) can be booted into a 64-bit version of the kernel on certain systems; Mac OS X 10.7 (Lion) and OS X 10.8 (Mountain Lion) ship with a 64-bit enabled kernel by default.<ref>{{cite web | title = Road to Mac OS X 10.6 Snow Leopard: 64-Bits | date = 2008-09-26 | url = http://www.appleinsider.com/articles/08/08/26/road_to_mac_os_x_10_6_snow_leopard_64_bits.html | accessdate = 2008-09-26}}</ref>


] through ] support PAE and the ] on IA-32 processors; Snow Leopard was the last version to support IA-32 processors. On x86-64 processors, all versions of ] use 4-level paging (IA-32e paging rather than PAE) to address memory above 4GB. ] and ] systems can use up to 64&nbsp;GB of RAM.<ref>{{cite web | title = Road to Mac OS X 10.6 Snow Leopard: 64-Bits | date = 2008-09-26 | url = http://www.appleinsider.com/articles/08/08/26/road_to_mac_os_x_10_6_snow_leopard_64_bits.html | access-date = 2008-09-26}}</ref>
===Linux===

=== Linux ===
{{see also|Executable space protection#Linux}} {{see also|Executable space protection#Linux}}
The ] includes full PAE mode support starting with version 2.3.23,<ref>{{cite web | title = 2.3.23-pre4 x86 64&nbsp;GB RAM changes &#91;HIGHMEM patch&#93; explained a bit | url = http://lkml.indiana.edu/hypermail/linux/kernel/9910.2/0542.html}}</ref> with ] mentioning PAE's 4&nbsp;MB page support in 1.3.15,<ref>{{cite web | title = More Intel Appendix H secrets to be released (4M Pages) | url = http://computer-programming-forum.com/46-asm/8b502c8c7685494c.htm}}</ref> 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. {{As of|2009}},<ref name=fedora11/> some common ] have started to use a PAE-enabled kernel as the distribution-specific default.<ref name=fedora11>{{cite web | title = x86 Specifics for Fedora 11 | url = http://docs.fedoraproject.org/en-US/Fedora/11/html/Release_Notes/sect-Release_Notes-Architecture_Specific_Notes.html#sect-Release_Notes-x86_Specifics_for_Fedora}}</ref> {{As of|2012}}, common Linux distributions have stopped distributing non-PAE kernels, thus making PAE hardware mandatory - examples being ] / ] from version 6.0, ] (and derivatives like ]) from 12.10.<ref>{{cite web | title = EnablingPAE | url = https://help.ubuntu.com/community/EnablingPAE |accessdate = 2013-04-28}}</ref><ref>{{cite web|url=https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/6.0_Release_Notes/kernel.html|title=RHEL 6 Release Notes, 12.6. General Kernel Updates 12.6.1. Physical Address Extension (PAE)|publisher=RedHat|accessdate=27 November 2013}}</ref> ] distributed both PAE and non-PAE kernels up to version 19, and ] still does.


The ] includes full PAE-mode support starting with version 2.3.23,<ref>{{cite mailing list | title = 2.3.23-pre4 x86 64&nbsp;GB RAM changes &#91;HIGHMEM patch&#93; explained a bit | url = http://lkml.indiana.edu/hypermail/linux/kernel/9910.2/0542.html |first=Ingo |last=Molnar |date=20 October 1999 |mailing-list=linux-kernel}}</ref> 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.
NX bit feature will not work if the kernel was built without PAE support.<ref>, Figure 3.16 Code flow for paging_init, "Execute Disable Protection is also enabled if supported by processor and if the kernel was compiled with PAE support; unfortunately, the feature is otherwise not available."</ref>


The NX bit feature requires a kernel built with PAE support.<ref>{{cite book |url=https://books.google.com/books?id=-6zvRFEfQ24C |title=Professional Linux Kernel Architecture |isbn=978-1-118-07991-1 |at=Figure 3.16 Code flow for paging_init |quote=Execute Disable Protection is also enabled if supported by processor and if the kernel was compiled with PAE support; unfortunately, the feature is otherwise not available. |last1=Mauerer |first1=Wolfgang |date=11 March 2010 }}</ref>
===Others===
*] and ] also support PAE as a kernel build option. ] 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. ]s 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.<ref>{{cite web | title = FreeBSD PAE(4) man page | date = 2003-04-08 | url = http://www.FreeBSD.org/cgi/man.cgi?query=pae&sektion=4 | accessdate = 2007-11-26}}</ref>


] now commonly use a PAE-enabled kernel as the default, a trend that began in 2009.<ref name=fedora11>{{cite web | title = x86 Specifics for Fedora 11 | url = http://docs.fedoraproject.org/en-US/Fedora/11/html/Release_Notes/sect-Release_Notes-Architecture_Specific_Notes.html#sect-Release_Notes-x86_Specifics_for_Fedora |archive-url=https://web.archive.org/web/20100704051357/http://docs.fedoraproject.org/en-US/Fedora/11/html/Release_Notes/sect-Release_Notes-Architecture_Specific_Notes.html |archive-date=2010-07-04 |url-status=dead}}</ref> {{as of|2012}} many, including ] (and derivatives like ] and ]),<ref name=xubuntu-non-pae-end>{{cite web|title=Xubuntu 12.04 released|url=http://xubuntu.org/news/12-04-release/|website=Xubuntu.org|access-date=24 October 2015|date=April 26, 2012|quote= The non-PAE kernel will not be available in future Xubuntu releases.}}</ref><ref>{{cite web | title = PAE | url = https://help.ubuntu.com/community/PAE | website = Ubuntu Community Help Wiki | access-date = 2023-07-11}}</ref> ] 6.0,<ref>{{cite web|url=https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/6.0_Release_Notes/kernel.html|title=RHEL 6 Release Notes, 12.6. General Kernel Updates 12.6.1. Physical Address Extension (PAE)|publisher=RedHat|access-date=27 November 2013}}</ref> and ], have stopped distributing non-PAE kernels, thus making PAE-supporting hardware mandatory. Linux distributions that require PAE may refuse to boot on ] family processors because they do not show the PAE support flag in their CPUID information (even though it is supported internally).<ref name="Pentium-M-PAE"/> However, this can be easily bypassed with the <code>forcepae</code> option.<ref>{{cite web |url=https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html |title=The kernel's command-line parameters |work=The Linux Kernel documentation}}</ref>
*] 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.<ref>{{cite web | title=Solaris 7 5/99 Release Notes (Intel Platform Edition), Appendix B: Hardware Compatibility List and Device Configuration Guide (Intel Platform Edition) 5/99 | year = 1999 | url=http://docs.sun.com/app/docs/doc/806-0225/6j9ji3kj2 | accessdate = 2007-11-26}}</ref>


Distributions that still provide a non-PAE option, including ] (and derivatives like ]<ref>{{cite web|title=Known problems in Linux Mint Debian|url=http://linuxmint.com/rel_debian.php|quote=To guarantee compatibility with non-PAE processors, the 32-bit versions of Linux Mint Debian come with a 486 kernel by default.|access-date=2015-10-24|archive-date=2015-10-16|archive-url=https://web.archive.org/web/20151016052124/http://www.linuxmint.com/rel_debian.php|url-status=dead}}</ref>), ], and ], typically do so with "i386", "i486", or "retro" labels.<ref>{{cite web|url=http://puppylinux.org/wikka/PuppyPrecise |title=Precise Puppy |work=puppylinux.org |publisher=PuppyLinux |access-date=20 April 2014 |archive-url=https://web.archive.org/web/20140813071203/http://puppylinux.org/wikka/PuppyPrecise |archive-date=2014-08-13 |url-status=dead}}</ref><ref>{{cite web|url=https://www.debian.org/releases/stable/i386/ch02s01.html.en |title=2.1. Supported Hardware |work=Debian GNU/Linux Installation Guide |publisher=SPI |access-date=20 April 2014 |archive-url=https://web.archive.org/web/20140513011042/https://www.debian.org/releases/stable/i386/ch02s01.html.en |archive-date=2014-05-13 |url-status=dead}}</ref> The article ] does list some others, allowing to install Linux onto old computers.
*] added initial support for PAE sometime after the R1 Alpha 2 release. With the release of R1 Alpha 3 PAE is now officially supported.


==See also== === Others ===

] and ] also support PAE as a kernel build option. ] 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. ]s 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.<ref>{{cite web | title = FreeBSD i386 5.5-RELEASE PAE(4) man page | date = 2003-04-08 | url = https://man.freebsd.org/cgi/man.cgi?query=pae&apropos=0&sektion=4&manpath=FreeBSD+5.5-RELEASE&arch=i386&format=html | access-date = 2023-07-11}}</ref>

] has had support for PAE since 2006 with the standard GENERIC i386 kernel. GeNUA mbH supported the initial implementation.<ref>{{cite web | title = PAE for OpenBSD/i386 by Michael Shalayeff, NYC | date = 2006 | url = https://www.openbsd.org/papers/nyc2006/index.html | access-date = 2018-02-03}}</ref> Since release 5.0 PAE has had a series of changes, in particular changes to i386 MMU processing for PMAP, see pmap(9).<ref>{{man|9|pmap|OpenBSD}}</ref>{{failed verification|date=July 2023}}

] 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.<ref>{{cite web | title=Added Support for Physical Address Extension (PAE) Mode | work=Solaris 7 5/99 Release Notes (Intel Platform Edition), Appendix B: Hardware Compatibility List and Device Configuration Guide (Intel Platform Edition) 5/99 | year=1999 | url=https://docs.oracle.com/cd/E19620-01/806-0225/app-hcl-21/index.html | access-date=2018-03-23 }}</ref>

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

] has limited support for PAE for the purpose of creating RAM disks above the 4&nbsp;GB boundary.<ref>{{cite web | title=ArcaOS 5.0 from Arca Noae is the new release of OS/2 for the 21st Century | year=2017 | url=https://www.arcanoae.com/arcaos/ | access-date=2019-12-16 }}</ref>

== See also ==
* ]
* ] * ]
** ] * ]
* ]
* ] * ]
* ] * ]
* ] — with Large Physical Address Extensions (LPAE) * ] (LPAE) – in the ARM architecture
* ]


== References == == References ==

{{Reflist|30em}} {{Reflist|30em}}


==Further reading== ==Further reading==
* {{cite web |url=http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html |title=Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3A: System Programming Guide, Part 1 |publisher=] |date=11 February 2014}}
{{Refbegin}}
* {{cite web |url=https://learn.microsoft.com/en-us/windows/win32/memory/physical-address-extension |title=Physical Address Extension |website=] |date=7 January 2021 |access-date=2023-07-11}}
* {{Cite web |url=http://www.intel.com/Assets/PDF/manual/253668.pdf |title=Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3A: System Programming Guide, Part 1 |publisher=] }}
* {{Cite web |url=http://msdn2.microsoft.com/en-us/library/aa366796.aspx |title=Physical Address Extension |work=] |publisher=]}}
{{Refend}}


] ]

Latest revision as of 01:51, 16 September 2024

Memory management feature
This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.
Find sources: "Physical Address Extension" – news · newspapers · books · scholar · JSTOR (March 2014) (Learn how and when to remove this message)

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 gigabytes (2 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. It supports 64-bit virtual addresses (as of July 2023, 48 bits are implemented on some processors and 57 bits are implemented on others), 52-bit physical addresses, and includes NX bit functionality. When the x86-64 processor is initialized, the PAE feature is required to be enabled before the processor is switched from Legacy Mode to Long Mode.

Design

With PAE, the page table entry of the x86 architecture is enlarged from 32 to 64 bits. This allows more room for the physical page address, or "page frame number" field, in the page table entry. In the initial implementations of PAE the page frame number field was expanded from 20 to 24 bits. The size of the "byte offset" from the address being translated is still 12 bits, so total physical address size increases from 32 bits to 36 bits (i.e. from 20+12 to 24+12). This increased the physical memory that is theoretically addressable by the CPU from 4 GB to 64 GB.

In the first processors that supported PAE, support for larger physical addresses is evident in their package pinout, with address pin designations going up to A35 instead of stopping at A31. 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 gigabytes of virtual address space. Operating systems supporting this mode use page tables to map the regular 4 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 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.

Page table structures

32-bit paging, 4 KiB pages, without PAE

No PAE, 4 KB pages

In protected mode with paging enabled (bit 31, PG, of control register CR0 is set), but without PAE, x86 processors use a two-level page translation scheme. Control register CR3 holds the page-aligned physical address of a single 4 KB long page directory. This is divided into 1024 four-byte page directory entries that in turn, if valid, hold the page-aligned physical addresses of page tables, each 4 KB in size. These similarly consist of 1024 four-byte page table entries which, if valid, hold the page-aligned physical addresses of 4 KB long pages of physical memory (RAM).

32-bit paging, 4 MiB pages, without PAE

No PAE, 4 MB pages

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

32-bit paging, 4 KiB pages, with PAE

With PAE; 4 KB pages

Enabling PAE (by setting bit 5, PAE, of the system register CR4) causes major changes to this scheme. By default, the size of each page remains as 4 KB. Each entry in the page table and page directory becomes 64 bits long (8 bytes), instead of 32 bits, to allow for additional address bits. However, the size of each table does not change, so both table and directory now have only 512 entries. Because this allows only one half of the entries of the original scheme, an extra level of hierarchy has been added, so the system register CR3 now points physically to a Page Directory Pointer Table, a short table containing four pointers to page directories.

Supporting 64 bit addresses in the page-table is a significant change as this enables two changes to the processor addressing. Firstly, the page table walker, which uses physical addresses to access the page table and directory, can now access physical addresses greater than the 32-bit physical addresses supported in systems without PAE. From CR3, the page table walker can access page directories and tables that are beyond the 32-bit range. Secondly, the physical address for the data being accessed (stored in the page table) can be represented as a physical address larger than the 32-bit addresses supported in a system without PAE. Again, this allows data accesses to access physical memory regions beyond the 32-bit range.

32-bit paging, 2 MiB pages, with PAE

With PAE; 2 MB pages

The entries in the page directory have an additional flag in bit 7, named PS (for page size). If the system has set this bit to 1, the page directory entry does not point to a page table but to a single, large 2 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 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 bits are available to address physical memory. This allows a maximum RAM configuration of 2 bytes, or 4 petabytes (about 4.5×10 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 4 table, and extends the page directory pointer table to 512 entries instead of the original 4 entries it has in protected mode. This means that 48 bits of virtual page number are translated, giving a virtual address space of up to 256 TB. For some processors, a mode can be enabled with a fifth table, the 512-entry page-map level 5 table; this means that 57 bits of virtual page number are translated, giving a virtual address space of up to 128 PB. In the page table entries, in the original specification, 40 bits of physical page number are implemented.

Hardware support

See also: CPUID

Software can identify via the CPUID flag PAE whether a CPU supports PAE mode or not. A free-of-charge program for Microsoft Windows is available which will list many processor capabilities, including PAE support. In Linux, commands such as cat /proc/cpuinfo can list the pae 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 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 GB (FFFFFFFF in hexadecimal), and some motherboards simply do not have enough RAM sockets to allow the installation of more than 4 GB of RAM. Nevertheless, even if no more than 4 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 4GB.

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

Memory limits on 32-bit editions of Microsoft Windows,
with PAE support
Windows version Memory limit
Windows 2000 Professional, Server 4 GB
Windows 2000 Advanced Server 8 GB
Windows 2000 Datacenter 32 GB
Windows XP Starter 0.5 GB
Windows XP (other editions) 4 GB
Windows Server 2003 Web SP2 2 GB
Windows Server 2003 Standard SP2 4 GB
Windows Server 2003 Enterprise/Datacenter SP2 64 GB
Windows Storage Server 2003 Enterprise 8 GB
Windows Storage Server 2003 (other editions) 4 GB
Windows Home Server 4 GB
Windows Vista Starter 1 GB
Windows Vista (other editions) 4 GB
Windows Server 2008 Standard, Web 4 GB
Windows Server 2008 Enterprise, Datacenter 64 GB
Windows 7 Starter 2 GB
Windows 7 (other editions) 4 GB
Windows 8 (all editions) 4 GB
Windows 10 (all editions) 4 GB

The original releases of Windows XP and Windows XP SP1 used PAE mode to allow RAM to extend beyond the 4 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 in order to allow NX. The NX bit resides in bit 63 of the page table entry and, without PAE, page table entries on 32-bit systems have only 32 bits; therefore PAE mode is required in order 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 GB for driver compatibility even though these versions do run in PAE mode if NX support is enabled.

Windows 8 and later releases will only run on processors which support PAE, in addition to NX and SSE2.

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 4GB. Mac Pro and Xserve systems can use up to 64 GB of RAM.

Linux

See also: Executable space protection § Linux

The Linux kernel includes full PAE-mode support starting with version 2.3.23, in 1999 enabling access of up to 64 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. As of 2012 many, including Ubuntu (and derivatives like Xubuntu and Linux Mint), Red Hat Enterprise Linux 6.0, 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). However, this can be easily bypassed with the forcepae option.

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 PAE 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 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 GB boundary.

See also

References

  1. Dual-Core Intel® Xeon® Processor 2.80 GHz Specification Update (PDF). Intel Corporation. October 2006. p. 18.
  2. "Appendix E". AMD Athlon™ Processor x86 Code Optimization Guide (PDF) (Revision K ed.). AMD, Inc. February 2002. p. 250. Retrieved 2017-04-13. A 2-bit index consisting of PCD and PWT bits of the page table entry is used to select one of four PAT register fields when PAE (page address extensions) is enabled, or when the PDE doesn't describe a large page.
  3. T. Shanley (1998). Pentium Pro and Pentium II System Architecture. Addison-Wesley Professional. p. 439. ISBN 978-0-201-30973-7.
  4. "Operating Systems and PAE Support". Hardware Developers Center. 1 June 2017. Retrieved 11 July 2023.
  5. ^ "PAE - Ubuntu Community Help Wiki".
  6. "Appendix E". AMD Athlon™ Processor x86 Code Optimization Guide (PDF) (Revision K ed.). AMD, Inc. February 2002. p. 250. Retrieved 2017-04-13. A 2-bit index consisting of PCD and PWT bits of the page table entry is used to select one of four PAT register fields when PAE (page address extensions) is enabled, or when the PDE doesn't describe a large page.
  7. "AMD Athlon 500 - AMD-K7500MTR51B C". Cpu-world.com. 26 March 2014. Retrieved 11 July 2023.
  8. "AMD-762 System Controller" (PDF). p. 2. Supports up to 4 Gbytes of memory
  9. ^ AMD Corporation (June 2023). "Volume 2: System Programming" (PDF). AMD64 Architecture Programmer's Manual. AMD Corporation. p. 139. Retrieved 2023-07-11. Long-mode page translation requires the use of physical-address extensions (PAE). Before activating long mode, PAE must be enabled by setting CR4.PAE to 1. Activating long mode before enabling PAE causes a general-protection exception (#GP) to occur.
  10. ^ AMD Corporation (June 2023). "Volume 2: System Programming" (PDF). AMD64 Architecture Programmer's Manual. AMD Corporation. Retrieved 2023-07-11.
  11. "Volume 3 (3A, 3B, 3C & 3D): System Programming Guide". Intel 64 and IA-32 Architectures Software Developer’s Manual. Intel. June 2023. p. 4-7. Retrieved 2023-07-11.
  12. Pentium® III Xeon™ Processor at 500 and 550 MHz Datasheet. Intel Corporation. February 2000. p. 86. 245094-002. A# (I/O): The A# (Address) signals define a 2-to-the-36-byte physical memory address space.
  13. "4.4 Paging". Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A. Intel. Retrieved 28 October 2023.
  14. "Coreinfo - Sysinternals". Windows Sysinternals. Microsoft. 7 June 2023. Retrieved 11 July 2023.
  15. "Detecting your Hardware". Gentoo. October 8, 2008. Archived from the original on 2013-05-03. Retrieved 2013-04-28.{{cite web}}: CS1 maint: unfit URL (link)
  16. ^ Mark Russinovich (2008-07-21). "Pushing the Limits of Windows: Physical Memory". Archived from the original on 2008-07-25. Retrieved 2010-07-11.
  17. "Memory Limits for Windows releases". MSDN. Microsoft. December 5, 2007. Archived from the original on December 17, 2007. Retrieved 2015-11-16.
  18. "Intel Physical Addressing Extensions (PAE) in Windows 2000". Support. Microsoft. October 26, 2007. Archived from the original on 2008-01-01. Retrieved 2007-12-29.
  19. "Overview of Windows Server 2003 R2 Datacenter Edition". TechNet. Microsoft. Archived from the original on 2011-11-28. Retrieved 2009-05-15.
  20. "The RAM reported by the System Properties dialog box and the System Information tool is less than you expect in Windows Vista or in Windows XP Service Pack 2 or later version (MSKB 888137)". Knowledge Base. Microsoft. Archived from the original on 2009-02-04. Retrieved 2009-01-30.
  21. Khurshid, Usman (2 November 2012). "How To Check If Your Processor Supports PAE, NX And SSE2 For Windows 8 Installation". technize.net. Technize. Retrieved 20 April 2014.
  22. "PAE/NX/SSE2 Support Requirement Guide for Windows 8". Microsoft Docs. 10 February 2014. Retrieved 11 July 2023.
  23. "Road to Mac OS X 10.6 Snow Leopard: 64-Bits". 2008-09-26. Retrieved 2008-09-26.
  24. Molnar, Ingo (20 October 1999). "2.3.23-pre4 x86 64 GB RAM changes [HIGHMEM patch] explained a bit". linux-kernel (Mailing list).
  25. Mauerer, Wolfgang (11 March 2010). Professional Linux Kernel Architecture. Figure 3.16 Code flow for paging_init. ISBN 978-1-118-07991-1. Execute Disable Protection is also enabled if supported by processor and if the kernel was compiled with PAE support; unfortunately, the feature is otherwise not available.
  26. "x86 Specifics for Fedora 11". Archived from the original on 2010-07-04.
  27. "Xubuntu 12.04 released". Xubuntu.org. April 26, 2012. Retrieved 24 October 2015. The non-PAE kernel will not be available in future Xubuntu releases.
  28. "PAE". Ubuntu Community Help Wiki. Retrieved 2023-07-11.
  29. "RHEL 6 Release Notes, 12.6. General Kernel Updates 12.6.1. Physical Address Extension (PAE)". RedHat. Retrieved 27 November 2013.
  30. "The kernel's command-line parameters". The Linux Kernel documentation.
  31. "Known problems in Linux Mint Debian". Archived from the original on 2015-10-16. Retrieved 2015-10-24. To guarantee compatibility with non-PAE processors, the 32-bit versions of Linux Mint Debian come with a 486 kernel by default.
  32. "Precise Puppy". puppylinux.org. PuppyLinux. Archived from the original on 2014-08-13. Retrieved 20 April 2014.
  33. "2.1. Supported Hardware". Debian GNU/Linux Installation Guide. SPI. Archived from the original on 2014-05-13. Retrieved 20 April 2014.
  34. "FreeBSD i386 5.5-RELEASE PAE(4) man page". 2003-04-08. Retrieved 2023-07-11.
  35. "PAE for OpenBSD/i386 by Michael Shalayeff, NYC". 2006. Retrieved 2018-02-03.
  36. pmap(9) – OpenBSD Kernel Developer's Manual
  37. "Added Support for Physical Address Extension (PAE) Mode". Solaris 7 5/99 Release Notes (Intel Platform Edition), Appendix B: Hardware Compatibility List and Device Configuration Guide (Intel Platform Edition) 5/99. 1999. Retrieved 2018-03-23.
  38. "ArcaOS 5.0 from Arca Noae is the new release of OS/2 for the 21st Century". 2017. Retrieved 2019-12-16.

Further reading

Categories: