PAE

Physical Address Extension (PAE) — режим работы встроенного блока управления памятью x86-совместимых процессоров, в котором используются 64-битные элементы таблиц страниц (из которых для адресации используются только 36 бит), c помощью которых процессор может адресовать 64 ГБ физической памяти (вместо 4 ГБ, адресуемых при использовании 32-разрядных таблиц), хотя каждая задача (программа) всё равно может адресовать максимум до 4 ГБ виртуальной памяти[1]. Также в новых моделях процессоров в PAE-режиме старший бит элемента таблицы страниц отвечает за запрет исполнения кода в странице, что затрудняет атаку по методу переполнения буфера.

Впервые расширение появилось в процессоре Pentium Pro. Для использования 36-разрядной адресации памяти необходима поддержка расширения физических адресов на программном уровне (включение режима PAE в ОС) и аппаратном: необходима поддержка как со стороны процессора, так и материнской платы (можно определить по команде CPUID). Материнские платы с поддержкой PAE, как правило, были дорогими и предназначались для серверов.[2].

Применение править

  • PAE позволяет использовать более 4 ГБ оперативной памяти в 32-битной ОС.
  • PAE требуется для поддержки NX[3] в 32-битной системе.

Проблемы править

  • Из-за увеличения количества страничных уровней[4] система начинает тратить больше времени при обращении к памяти. Таким образом, если типичный объём используемой программой памяти незначительно больше 2 ГБ, то работа без PAE может быть эффективнее.
  • Некоторые драйверы[5] несовместимы с режимом PAE.
  • В 32-битной Windows режим включается автоматически, когда система поддерживает PAE (Physical Address Extension) и присутствует более 4 ГБ памяти, и, если не задать «noexecute=alwaysoff /nopae» в boot.ini, который запрещает загрузчику (NTLDR) использовать PAE-версию ядра.
  • Если пользователь включил запрет исполнения кода в страницах памяти (NX, технология DEP), то режим PAE в 32-битных версиях ОС Windows включается автоматически[6], независимо от наличия «/nopae».

Поддержка PAE в различных ОС править

Windows править

Начиная с Windows XP Service Pack 2, по умолчанию, на процессорах с поддержкой технологий no-execute (NX) или execute-disable (XD) система использует PAE для возможности использования DEP[7].

В 32-битных клиентах Microsoft Windows (начиная с Windows XP SP2) использование 36-битного PAE включается ключом /PAE в файле boot.ini, однако, максимальный физический адрес доступного операционной системе ОЗУ искусственно ограничен на уровне ядра по маркетинговым соображениям[8]. В Windows XP это ограничение составляет 4 ГБ, 32-разрядный Windows Server 2003 Enterprise Edition поддерживает до 64 ГБ. Существуют программы, позволяющие обойти ограничение на доступную память[9], но их использование является нарушением лицензионного соглашения Microsoft[10]. В случае 4 ГБ ОЗУ память можно использовать в Windows XP почти полностью, переместив системные области адресного пространства выше 4 ГБ, такую функцию поддерживают некоторые версии BIOS. Тем не менее, согласно заявлениям Microsoft, введение 4-ГБ ограничения адресного пространства связано с отсутствующей или плохой поддержкой 36-битного адресного пространства некоторыми драйверами устройств[11].

Одним из пунктов минимальных системных требований Windows 8 является обязательная поддержка процессором PAE.

Другой возможностью для использования более 4 гигабайт памяти является интерфейс Address Windowing Extensions.

Обычные 32-битные версии Windows поддерживают до 4—8 ГБ ОЗУ, Datacenter - до 32—64. В Starter версиях Windows XP и Vista — ограничение в 0,5—1 ГБ[12].

Также для 32-битных приложений в Windows можно использовать специальный патчер, который снимает лимит используемой ОЗУ в 2 ГБ без необходимости его перекомпилировать. Применим и для 32-битных приложений в 64-битной среде Windows с аналогичной целью. Это нужно в основном для увеличения адресного пространства 32-битных приложений, так как они ограничиваются вышеуказанным объемом в 2 ГБ на каждый процесс[13]. Стоит отметить, что этот способ не всегда работает и приложение может перестать запускаться. В некоторых случаях пропатченное приложение таким образом может увеличить свою производительность, например, скорость запуска уровня в некоторых играх.

Linux править

В ядре Linux полная поддержка PAE имеется, начиная с версии 2.3.23 (1999)[14]. Оно поддерживает 36-битную физическую адресацию — до 64 ГБ ОЗУ. Для запуска ядра, собранного с поддержкой PAE (опция CONFIG_X86_PAE=y), требуется процессор с данной функцией; загрузка на более ранних процессорах, таких как Pentium Pro или Pentium M, невозможна. Многие дистрибутивы поставляются либо с дополнительным пакетом PAE-ядра, либо используют такое ядро по умолчанию. Например, с 2009 Fedora перешла на PAE-ядро[15] В 2012 году некоторые дистрибутивы, например RHEL 6 и Ubuntu 12.10, прекратили поставку ядер без поддержки PAE[16][17]. Fedora и Debian продолжают распространение как PAE-, так и не PAE- версий ядра[18][19].

Включение PAE необходимо для поддержки функциональности NX (доступна с ядер 2.6.8)[20][21].

FreeBSD править

FreeBSD поддерживает PAE: в линейке 4.x версий — начиная с 4.9, в линейке 5.x версий — начиная с 5.1, все 6.x и более поздние. Не все драйверы поддерживают более 4 ГБ ОЗУ и поэтому могут работать некорректно.

Mac OS X править

В Mac OS X режим PAE включён по умолчанию при использовании 32-разрядного ядра.

Solaris править

Solaris поддерживает PAE, начиная с версии 7. Однако драйверы сторонних разработчиков могут работать некорректно.

См. также править

Примечания править

  1. часть адресного пространства, обычно от 0,9 до 2 ГБ резервируется под нужды ОС и недоступны приложению, см 3 GB barrier, [1] Архивная копия от 6 января 2014 на Wayback Machine
  2. Intel Corporation. Intel Chipset 4 GB System Memory Support (pdf). Pentium Pro Family Developer’s Manual 7 (февраль 2005). — «In uni-processor based systems for mobile, desktop, workstation, and entry level servers, chipsets may be limited to 4 GB of maximum memory. In today’s dual processor Intel server chipsets and workstations, maximum system memory size can be upwards of 16 GB.» Архивировано 28 октября 2014 года.
  3. Jamie Adams. Protecting Linux Against Overflow Exploits (англ.). infosec (23 сентября 2010). — «Most Linux distributions bundle NX support with a PAE-enabled kernel (kernel-PAE). However, some people don't install the Physical Address Extension (PAE) kernel because they think it is just to provide support for physical memory above 4GB.» Дата обращения: 27 ноября 2013. Архивировано из оригинала 3 декабря 2013 года.
  4. Physical Address Extension. Дата обращения: 1 ноября 2011. Архивировано 28 октября 2011 года.
  5. Например, драйвер Microsoft Device Emulator
  6. Physical Address Extension — PAE Memory and Windows. Дата обращения: 23 декабря 2013. Архивировано 24 декабря 2013 года.
  7. 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. Дата обращения: 2 декабря 2009. Архивировано 4 июня 2011 года.
  8. Licensed Memory in Windows Vista Архивная копия от 12 апреля 2022 на Wayback Machine // Geoff Chappell, 2012  (англ.)
  9. How to use full 4GB RAM in Windows 7 32 Bit (Gavotte RAMDisk in Windows 7) | Homepage of Jens Scheffler. Дата обращения: 26 декабря 2013. Архивировано 6 февраля 2014 года.
  10. Geoff Chappell - Software Analyst. Licensed Memory in 32-Bit Windows Vista (англ.). — «That 32-bit editions of Windows starting with Windows Vista are limited to 4GB ...The 32-bit editions of Windows Vista and Windows 7 all contain code for using physical memory above 4GB. Microsoft just doesn’t license you to use that code.» Дата обращения: 26 декабря 2013. Архивировано 10 декабря 2013 года.
  11. Еще раз про Windows и четыре гигабайта Архивная копия от 24 декабря 2013 на Wayback Machine // IXBT 8 августа 2012 г. Игорь Петрович Лейко
  12. Memory Limits for Windows Releases. Microsoft (25 марта 2010). Дата обращения: 5 апреля 2010. Архивировано 20 июня 2009 года.
  13. "Преодолевая ограничения Windows: виртуальная память". Mark Russinovich по-русски (англ.). Архивировано из оригинала 30 ноября 2018. Дата обращения: 29 ноября 2018.
  14. 2.3.23-pre4 x86 64 GB RAM changes [HIGHMEM patch] explained a bit. Дата обращения: 27 ноября 2013. Архивировано 10 января 2014 года.
  15. x86 Specifics for Fedora 11. Дата обращения: 27 ноября 2013. Архивировано 10 мая 2013 года.
  16. EnablingPAE. Дата обращения: 28 апреля 2013. Архивировано 13 марта 2011 года.
  17. RHEL 6 Release Notes, 12.6. General Kernel Updates 12.6.1. Physical Address Extension (PAE). RedHat. — «The default kernel shipped with the x86 architecture version of Red Hat Enterprise Linux 6 is PAE enabled. A PAE enabled processor is a minimum requirement for the x86 variant of Red Hat Enterprise Linux 6.» Дата обращения: 27 ноября 2013. Архивировано 3 декабря 2013 года.
  18. Features/ArchitectureSupport Архивная копия от 3 декабря 2013 на Wayback Machine // Fedora
  19. Chapter 29. Manually Upgrading the Kernel Архивная копия от 3 июня 2014 на Wayback Machine // Fedora 12 Documentation: «29.1. Overview of Kernel Packages»
  20. Professional Linux Kernel Architecture Архивная копия от 5 декабря 2013 на Wayback Machine, 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.»
  21. corbet (2004-06-02). "x86 NX support". LWN. Архивировано из оригинала 2 декабря 2013. Дата обращения: 27 ноября 2013.

Ссылки править