Введение
Функция управления памятью
В вычислительной технике расширение физического адреса (PAE), иногда называемое расширением адреса страницы, — это функция управления памятью для архитектуры x86. PAE впервые была представлена Intel в процессоре Pentium Pro, а затем AMD в процессоре Athlon. Она определяет трех уровневую иерархию таблиц страниц (вместо двух), с записями таблиц размером 64 бита вместо 32, что позволяет этим процессорам напрямую обращаться к физическому адресному пространству размером более 4 гигабайт (232 байта). Структура таблиц страниц, используемая процессорами x86-64 при работе в 64-битном режиме, дополнительно расширяет иерархию таблиц страниц до четырех или более уровней, расширяя виртуальное адресное пространство, и использует дополнительные биты физического адреса на всех уровнях таблиц страниц, расширяя физическое адресное пространство. Также используется старший бит 64-битной записи таблицы страниц в качестве бита запрета исполнения (NX), указывающего, что код не может быть выполнен с соответствующей страницы. Функция NX также доступна в защищенном режиме, когда эти процессоры работают с 32-битной операционной системой, при условии, что операционная система включила поддержку PAE.
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 (232 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.
История
PAE впервые был реализован в Intel Pentium Pro в 1995 году, хотя сопровождающие чипсеты обычно не поддерживали необходимые дополнительные биты адреса. PAE поддерживается процессорами Pentium Pro, Pentium II, Pentium III и Pentium 4. Первые процессоры семейства Pentium M ("Banias"), представленные в 2003 году, также поддерживают PAE, однако они не отображают флаг поддержки PAE в информации CPUID. Это было исправлено в более поздней ревизии ядра "Dothan" в 2005 году. PAE также был доступен на процессорах AMD, включая AMD Athlon (хотя чипсеты ограничены 32-битным адресированием) и более поздние модели процессоров AMD. Когда AMD определила свое 64-битное расширение промышленного стандарта архитектуры x86, AMD64 или x86-64, они также усовершенствовали систему страничной организации в "длинном режиме" на основе PAE. Она поддерживает 64-битные виртуальные адреса и 52-битные физические адреса. Более поздние семейства процессоров используют межсоединения, такие как Hypertransport или QuickPath Interconnect, которые не имеют выделенных сигналов адресов памяти, поэтому эта взаимосвязь менее очевидна. Размер виртуального адреса в 32 бита не изменяется, поэтому обычное прикладное программное обеспечение продолжает использовать инструкции с 32-битными адресами и (в модели плоской памяти) ограничено 4 гигабайтами виртуального адресного пространства. Операционные системы, поддерживающие этот режим, используют таблицы страниц для отображения стандартного виртуального адресного пространства размером 4 ГБ в физическую память, которая, в зависимости от операционной системы и остальной аппаратной платформы, может достигать 64 ГБ. Отображение обычно применяется отдельно для каждого процесса, поэтому дополнительная оперативная память полезна, даже если ни один процесс не может получить к ней доступ одновременно. Последующие разработки, связанные с разработкой AMD архитектуры x86-64, расширили теоретически возможный размер физических адресов до 52 бит.
32-битная паежировка, 2 MiB страницы, с PAE
Записи в каталоге страниц содержат дополнительный флаг в бите 7, называемый PS (для указания размера страницы). Если система установила этот бит в 1, то запись в каталоге страниц указывает не на таблицу страниц, а на одну большую страницу размером 2 МБ (Page Size Extension).
Резюме 32-битного пейджирования
Во всех форматах таблиц страниц, поддерживаемых IA 32 и x86 64, 12 младших значащих битов записи таблицы страниц интерпретируются блоком управления памятью или зарезервированы для использования операционной системой. В процессорах, реализующих функцию "no execute" или "execution disable", старший бит (бит 63) является битом NX. Следующие одиннадцать старших битов (биты 52–62) зарезервированы для использования операционной системой в соответствии со спецификациями архитектуры Intel и AMD. Таким образом, из 64 битов в записи таблицы страниц 12 младших и 12 старших битов используются для других целей, оставляя 40 битов (биты 12–51) для номера физической страницы. В сочетании с 12 битами "смещения внутри страницы" из линейного адреса, для адресации физической памяти доступно максимум 52 бита. Это позволяет использовать максимум 252 байта оперативной памяти, или 4 петабайта (около 4,5 × 10¹⁵ байт).
Пейджинг x86-64
На процессорах x86-64 в нативном длинном режиме схема трансляции адресов использует PAE, но добавляет четвертую таблицу – таблицу отображения страниц уровня 4, содержащую 512 записей, и расширяет таблицу указателей страниц до 512 записей вместо исходных 4 записей, используемых в защищенном режиме. Это означает, что транслируются 48 бит виртуального номера страницы, обеспечивая виртуальное адресное пространство объемом до 256 ТБ. Для некоторых процессоров можно включить режим с пятой таблицей – таблицей отображения страниц уровня 5, содержащей 512 записей; это означает, что транслируются 57 бит виртуального номера страницы, обеспечивая виртуальное адресное пространство объемом до 128 ПБ. В Linux команды, такие как cat /proc/cpuinfo, могут отображать флаг pae при его наличии, а также другие инструменты, например, утилита обнаружения оборудования SYSLINUX. Для работы процессора в режиме PAE требуется поддержка операционной системы. Для использования PAE для доступа к более чем 4 ГБ оперативной памяти требуется дополнительная поддержка в операционной системе, чипсете и на материнской плате. Некоторые чипсеты не поддерживают физические адреса памяти, превышающие 4 ГБ (FFFFFFFF в шестнадцатеричной системе), а на некоторых материнских платах просто недостаточно слотов для оперативной памяти, чтобы установить более 4 ГБ. Тем не менее, даже если доступно не более 4 ГБ оперативной памяти, процессор с поддержкой PAE может работать в режиме PAE, например, для использования функции защиты от исполнения (No execute).
macOS
Mac OS X Tiger и последующие версии вплоть до Mac OS X Snow Leopard поддерживают PAE и бит NX на 32-битных процессорах (IA 32); Snow Leopard была последней версией, поддерживающей 32-битные процессоры (IA 32). На 64-битных процессорах x86-64 все версии macOS используют 4-уровневую страничную организацию памяти (IA 32e, а не PAE) для адресации памяти объемом более 4 ГБ. Системы Mac Pro и Xserve могут использовать до 64 ГБ оперативной памяти.
Линукс
Ядро Linux включает полную поддержку режима PAE, начиная с версии 2.3.23, в 1999 году, обеспечивая доступ до 64 ГБ памяти на 32-битных машинах. Для работы с ядром Linux, поддерживающим PAE, требуется процессор, также поддерживающий PAE. Ядро Linux поддерживает PAE как опцию при сборке, а основные дистрибутивы предоставляют ядро PAE либо по умолчанию, либо в качестве опции. Для использования функции NX bit требуется ядро, собранное с поддержкой PAE. В настоящее время дистрибутивы Linux обычно используют ядро с поддержкой PAE по умолчанию, тенденция, которая началась в 2009 году. С 2012 года многие дистрибутивы, включая Ubuntu (и производные, такие как Xubuntu и Linux Mint), Red Hat Enterprise Linux 6.0 и CentOS, прекратили распространять ядра, не поддерживающие PAE, что сделало поддержку PAE обязательной для оборудования. Дистрибутивы Linux, требующие PAE, могут отказаться загружаться на процессорах семейства Pentium M, поскольку они не отображают флаг поддержки PAE в информации CPUID (хотя поддержка PAE присутствует внутри процессора). Дистрибутивы, которые по-прежнему предоставляют опцию без PAE, включая Debian (и производные, такие как LMDE 2 (Linux Mint Debian Edition)), Slackware и LXLE, обычно обозначают её как "i386", "i486" или "retro". В статье «Легковесный дистрибутив Linux» перечислены и другие дистрибутивы, позволяющие установить Linux на устаревшее оборудование.
Другие
FreeBSD и NetBSD также поддерживают PAE как опцию при сборке ядра. FreeBSD поддерживает PAE в серии 4.x, начиная с версии 4.9, в серии 5.x, начиная с версии 5.1, и во всех выпусках 6.x и более поздних. Для поддержки требуется опция конфигурации PAE ядра. Загружаемые модули ядра могут быть загружены в ядро с включенным PAE только в том случае, если они были скомпилированы с включенным PAE; бинарные модули в дистрибутивах FreeBSD не компилируются с поддержкой PAE и, следовательно, не могут быть загружены в ядра с включенным PAE. Не все драйверы поддерживают более 4 ГБ физической памяти; эти драйверы не будут работать корректно в системе с PAE. OpenBSD поддерживает PAE с 2006 года, начиная со стандартного ядра GENERIC i386. Первоначальную реализацию поддержала компания GeNUA mbH. Начиная с выпуска версии 5.0, в PAE было внесено несколько изменений, в частности, изменения в обработке MMU i386 для PMAP, см. pmap(9). Solaris поддерживает PAE, начиная с версии Solaris 7. Однако сторонние драйверы, используемые с версией 7, которые не содержат поддержки PAE, могут работать нестабильно или вообще не работать в системе с PAE. Haiku добавила первоначальную поддержку PAE вскоре после выпуска R1 Alpha 2. С выпуском R1 Alpha 3 PAE теперь официально поддерживается. ArcaOS имеет ограниченную поддержку PAE для создания RAM-дисков, превышающих 4-гигабайтный предел.