RTX – расширение реального времени для Windows NT

Проецирование непрерыного участка памяти


Некоторые устройства, особенно работающие с DMA, требуют, чтобы их буферы находились в физически непрерывном участке памяти в адресном пространстве CPU. Кроме того, эти устройства должны получать доступ к буферам памяти используя настоящий физический адрес, а не виртуальный адрес, используемый Win32 или RTSS процессом.

Для выделения физически непрерывного участка памяти и перевода виртуального адреса в физический используются функции RtAllocateContiguousMemory и RtGetPhysicalAddress соответственно.

API

Следующие функции служат для работы с физически непрерывным участком памяти:

RtAllocateContiguousMemory - выделяет физически непрерывный участок памяти и проецирует эту память в виртуальное адресное пространство процесса

RtFreeContiguousMemory - высвобождает ранее выделенный физически непрерывный участок памяти

RtGetPhysicalAddress - возвращает физический адрес по виртуальному адресу ранее выделенного физически непрерывного участка памяти

Замечания по программированию

  • Непрерывный участок памяти всегда выделяется из non-paged пула памяти Windows NT. Этот пул памяти сравнительно мал и вскоре после загрузки системы становится фрагментированным в результате выделения памяти драйверам и другим подсистемам Windows NT. Чтобы избежать неудач при попытках выделить большой участок памяти, надо делать это сразу после загрузки и/или вообще минимизировать такие выделения
  • В Win32 подсистеме функция RtGetPhysicalAddress работает только с адресами, полученными в результате вызова RtAllocateContiguousMemory.
  • Данный

    демонстрирует выделение непрерывного участка памяти.



    Содержание раздела