Расширения адресного окна

Расширения адресного окна (AWE) — это набор расширений, которые позволяют приложению быстро управлять физической памятью, превышающей 4 ГБ. Некоторым приложениям с большим объемом данных, таким как системы управления базами данных и научно-техническое программное обеспечение, требуется доступ к очень большим кэшам данных. В случае с очень большими наборами данных ограничение кэша в пределах 2 ГБ адресного пространства пользователя приложения является серьезным ограничением. В таких ситуациях кэш слишком мал для правильной поддержки приложения.

AWE решает эту проблему, позволяя приложениям напрямую обрабатывать огромные объемы памяти, продолжая использовать 32-разрядные указатели. AWE позволяет приложениям иметь кэши данных размером более 4 ГБ (при наличии достаточного объема физической памяти). AWE использует физическую невыгружаемую память и представления окон различных частей этой физической памяти в 32-разрядном виртуальном адресном пространстве.

AWE накладывает ряд ограничений на использование этой памяти, в первую очередь потому, что они обеспечивают чрезвычайно быстрое сопоставление, переназначение и освобождение. Быстрое управление памятью важно для этих потенциально огромных адресных пространств.

  • Диапазоны виртуальных адресов, выделенные для AWE, не являются совместно используемыми с другими процессами (и, следовательно, не наследуются). Фактически, два разных виртуальных адреса AWE в одном процессе не могут сопоставлять одну и ту же физическую страницу. Эти ограничения обеспечивают быстрое переназначение и очистку при освобождении памяти.
  • Физические страницы, которые могут быть выделены для региона AWE, ограничены количеством физических страниц, присутствующих на компьютере, так как эта память никогда не выстраивается— она блокируется до тех пор, пока приложение явно не освободит ее или не завершит работу. Физические страницы, выделенные для данного процесса, можно сопоставить с любым виртуальным регионом AWE в рамках одного процесса. Приложения, использующие AWE, должны быть осторожными, чтобы не занимать так много физической памяти, чтобы они приводили к чрезмерной загрузке других приложений или препятствовали созданию новых процессов или потоков из-за нехватки ресурсов. Используйте функцию GlobalMemoryStatusEx для мониторинга использования физической памяти.
  • Виртуальные адреса AWE всегда доступны для чтения и записи и не могут быть защищены с помощью вызовов VirtualProtect (то есть нельзя указать память только для чтения, память noaccess, страницы защиты и т. д.).
  • Диапазоны адресов AWE нельзя использовать для буферизации данных для графических или видеозвонков.
  • Диапазон памяти AWE не может быть разделен, а его части нельзя удалить. Вместо этого весь диапазон виртуальных адресов должен быть удален как единое целое, если требуется удаление. Это означает, что при вызове VirtualFree необходимо указать MEM_RELEASE.
  • Приложения могут сопоставлять несколько регионов одновременно при условии, что они не перекрываются.
  • Приложения, использующие AWE, не поддерживаются в режиме эмуляции. Это значит, что приложение x86, использующее функции AWE, должно быть перекомпилировано для запуска на другом процессоре, тогда как большинство приложений могут выполняться без перекомпиляции в эмуляторе на других платформах.

Это решение решает проблемы с физической памятью очень общим и широко применимым способом. Ниже перечислены некоторые преимущества AWE.

  • Для управления памятью AWE определена небольшая группа новых функций.
  • AWE предоставляет очень быструю возможность переназначения. Переназначение выполняется путем управления таблицами виртуальной памяти, а не путем перемещения данных в физической памяти.
  • AWE обеспечивает степень детализации размера страницы, соответствующую процессору (например, 4 КБ на x86), которая более полезна для приложений, чем большие страницы (например, 2 МБ или 4 МБ на x86).

Для использования AWE приложение должно иметь привилегию Блокировать страницы в памяти. Чтобы получить эту привилегию, администратор должен добавить блокировку страниц в памяти к назначениям прав пользователя. Дополнительные сведения о том, как это сделать, см. в разделе "Права пользователя" в справке по операционной системе.

Следующие функции составляют API расширений адресного окна (AWE).

Функция Описание
VirtualAlloc и VirtualAllocEx Зарезервируйте часть виртуального адресного пространства для AWE, используя MEM_PHYSICAL.
AllocateUserPhysicalPages Выделение физической памяти для использования с AWE.
MapUserPhysicalPages Сопоставьте (или сделать недействительными) виртуальные адреса AWE с любым набором физических страниц, полученных с помощью AllocateUserPhysicalPages.
MapUserPhysicalPagesScatter Сопоставьте (или аннулируете) виртуальные адреса AWE с любым набором физических страниц, полученных с помощью AllocateUserPhysicalPages, но с более тонким контролем, чем у MapUserPhysicalPages.
FreeUserPhysicalPages Свободная физическая память, которая использовалась для AWE.