Процесс сопоставления адаптера оперативной памяти в адресном пространстве процесса

Переводы статьи Переводы статьи
Код статьи: 189327 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

При сопоставлении большой объем памяти адаптера может появиться одно из следующих симптомов:
  • Недоступность системных PTE (NO_MORE_SYSTEM_PTES).
  • Недостаточно места на адрес непрерывного процесса.
В данной статье описывается:
  • Почему эти проблемы возникают
  • способы их устранения
  • два способа отображения памяти адаптера в адресное пространство процесса

Дополнительная информация

Введение элементов таблицы страниц (PTE)

Каждый процесс, который выполняется в системе Windows NT имеет 4 ГБ виртуального адресного от 0x00000000 до 0xFFFFFFFF для его использования. По этой причине верхние 2 ГБ адрес в диапазоне от 0x8000000 до 0xFFFFFFFF, общие для всех процессов выполняется в системе и называется адресное пространство ядра или системы. В Нижняя область от 0x00000000 до 0x7FFFFFFF называется адрес пользователя места.

С точки зрения процесса каждый элемент виртуального адреса концептуально Указывает на байт физической памяти. Она отвечает Виртуальная память Manager (VMM) совместно с диспетчером памяти процессора единицы (MMU) для перевода или сопоставление каждого виртуального адреса в соответствующий объект Физический адрес. VMM выполняет сопоставление, разделив объем оперативной памяти в фиксированного размера страницы рамок, создание страниц таблиц для хранения сведений о Эти страницы рамок и их сопоставления. Каждый PTE представляет кадр страницы и содержит сведения, необходимые для VMM для поиска на странице.

На x 86-системе, используется размер страницы размером 4 КБ, максимальное количество PTE необходимые для сопоставления 2 ГБ адресного пространства является 524,288 (2 ГБ/4 КБ). На Типовая система, это пространство используется следующим образом:
  • Более 50 000 PTE (приблизительно 195 МБ адресного пространства), зарезервированы для общего использования.
  • Остальные используется для сопоставления системного кэша, гиперпространства, выгружаемого пула, невыгружаемого пула, области аварийного дампа памяти и т. д.
Этот размер пула PTE определяется автоматически при запуске системы, в зависимости от объема физической памяти в системе. Этот пул сжато выгружаемого пула и невыгружаемого пула, который растет с объемом физической памяти в системе, так и между.

Система использует эти PTE создание ядра стеки потоков, загрузки устройства драйверы (и их DLL), сопоставление виртуального системы адресное пространство для ввода-вывода передача или вызывающих MmMapIoSpace/MmMapLockedPages / MmGetSystemAddressForMdl/MmAllocateNonCachedMemory, а также для других прочих целей. Этот пул PTE системы может стать сильно использован и сильно фрагментирована. Это означает, что драйвер может оказаться невозможным получение достаточно непрерывного виртуального адресного пространства в пул PTE в любой системе момент времени несмотря на то, что общее адресное пространство, по-прежнему осталось в его может быть достаточно большим.

Это также означает, драйвер использует пул PTE системы полностью, снизится других частей системы, даже в результате чего не создается, потоки системы ожиданий и бесповоротно ошибки проверки (так как некоторые драйверы вызов выделить системной памяти с установленным параметром MustSucceed).

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

ВАЖНЫЕ: Отменить памяти, сразу же после завершения в контексте правильного процесса. В противном случае система будет работать вне PTE, и он будет Проверка ошибок. Увеличить число по умолчанию PTE рассчитывается на основе общий объем системной памяти до максимального значения путем добавления номера (равно номер страницы, чтобы увеличить) в реестр на:
   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
   \Memory Management\SystemPages
				
Можно также просмотреть в настоящее время доступны «свободных записей системной таблицы страниц» с помощью системного монитора.

ПРИМЕЧАНИЕ: Память адаптер страницы для замены страницы не используются. Они остаются сопоставленные в адресное пространство процесса, даже в том случае, если процесс бездействия или полностью замененных out.

Ниже приведены две наиболее распространенные способы сопоставления памяти адаптера. Первый метод сопоставляет памяти непосредственно пользователю пространства процесса и Второй метод сопоставляет пространство системы процесса и при необходимости в пользователя- места. Оба этих метода требуют физической памяти, чтобы быть непрерывной. Из-за ограничений PTE не можно сопоставить с большим объемом в системном пространстве памяти. Однако можно сопоставить пользователя- место, если не фрагментированными и использовано.

Метод объекта раздела

Существует образца (MAPMEM) в DDK Windows NT 4.0 (доступна через Членство в профессиональных MSDN), показано, как выполнить такое сопоставление. Здесь приводится общая схема приема:

  1. Получить Переведенный физический адрес памяти адаптера (HalTranslateBusAddress).
  2. Открыть дескриптор раздела (ZwOpenSection) физической памяти устройства \Device\PhysicalMemory.
  3. Ссылки на дескриптор объекта (ObReferenceObjectByHandle), чтобы предотвратить его от удаления.
  4. Сопоставление памяти (ZwMapViewOfSection).
Виртуальный адрес, можно получить из ZwMapViewOfSection является допустимым только в контекст процесса сопоставления. Если требуется доступ к памяти в ваш драйвер отложенных процедур вызова (DPC) или прервать процедуру службы (ISR), в которой работает в произвольный обработки контекста, следует также сопоставить память в адресном пространстве системы (используйте следующий метод). Отменить Памяти в один и тот же контекст процесса (ZwUnMapViewOfSection), которые сопоставить до завершения.

ПРИМЕЧАНИЕ: В общем случае может быть опасно для использования ZwMapViewOfSection Если вы уже владеете физических страниц с помощью \Device\PhysicalMemory. Драйвер, который сопоставляет страниц, что он не владеет почти всегда причины повреждения памяти, так как владелец может изменять атрибуты страницы свободных страниц и вносить другие изменения. Диски следует сопоставить только память, которыми они владеют. Кроме того, строго недопустимо сопоставить физический адрес одновременно с двумя разными атрибутами (то есть в кэше writecombined некэшированного vs vs). Это вызывает повреждение TLB процессоров и непредсказуемым результатам.

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

Метод MmMapIoSpace

Этот метод показывает, как отобразить память в адресном пространстве процесса системы и в адресное пространство процесса пользователя.
  1. Получите Переведенный физический адрес памяти адаптера (HalTranslateBusAddress).
  2. Сопоставление памяти в адресном пространстве невыгружаемой системной:
          SystemVirtualAddress = MmMapIoSpace(PhysicalAddress, SizeofMemory,
             CacheEnable);
    					
  3. Распределение Mdl:
          Mdl = IoAllocateMdl(SystemVirtualAddress, SizeOfMemory, FALSE, FALSE,
             NULL);
  4. Построение MDL для описания страниц памяти:
          MmBuildMdlForNonPagedPool(Mdl);
  5. Сопоставление памяти в процессе его пространство пользователя с помощью MmMapLockedPages. Поскольку несогласованность в возвращаемое значение этой функции между Professional до SP4 и после этого пакета выпуски Windows NT, выполните следующую инструкцию, чтобы сделать этот код совместим со всеми версиями Windows NT:
          UserVirtualAddress = (PVOID)(((ULONG)PAGE_ALIGN(MmMapLockedPages(Mdl,
             Mode))) + MmGetMdlByteOffset(Mdl));
    					
Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
199311 ИНФОРМАЦИЯ: MmMapLockedPages возвращает фактическое виртуальный адрес в SP4
Преимуществом данного метода является получение SystemVirtualAddress, который может использоваться в контексте любого процесса (DPC и ISR) и UserVirtualAddress, который может использоваться приложением пользовательского режима, в которой контекст, он сопоставлен.

Если сопоставляются в адресное пространство, следует отменить следующим образом:
MmUnmapIoSpace(SystemVirtualAddress, SizeofMemory);
				
Если сопоставляются в адресное пространство пользователя только во время выполнения в контексте процесса, в котором сопоставлены памяти следует отменить следующим образом:
MmUnmapLockedPages(UserVirtualAddress, Mdl); 

Finally, free the MDL by calling:

IoFreeMdl(Mdl);
				

Ссылки

Для получения дополнительных сведений обратитесь к документации Windows NT 4.0 DDK, или «Windows NT», Кастер (Microsoft Press 1993).

Свойства

Код статьи: 189327 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Win32 Device Driver Kit for Windows NT 4.0
Ключевые слова: 
kbhowto kbkmode kbmt KB189327 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:189327
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com