Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Получение информации о состояниии виртуальной памяти






 

Сведения о конкретной платформе предоставляет процедура:

void GetSystemInfo(LPSYSTEM_INFO lpSystemInfo)

Структура данных SYSTEM_INFO описана cледующим образом:

typedef struct _SYSTEM_INFO {

union {

DWORD dwOemId; struct {

WORD wProcessorArchitecture;

WORD wReserved;

};

};

DWORD dwPageSize;

LPVOID lpMinimumApplicationAddress;

LPVOID lpMaximumApplicationAddress;

DWORD_PTR dwActiveProcessorMask;

DWORD dwNumberOfProcessors;

DWORD dwProcessorType;

DWORD dwAllocationGranularity;

WORD wProcessorLevel;

WORD wProcessorRevision;

} SYSTEM_INFO

 

Более подробная информация приведена в MSDN.

Для динамического отслеживания текущего состояния памяти используется процедура

 

void GlobalMemoryStatus(LPMEMORYSTATUS lpBuffer); Структура данных _MEMORYSTATUS описана какtypedef struct _MEMORYSTATUS {
DWORD dwLength; DWORD dwMemoryLoad; SIZE_T dwTotalPhys; SIZE_T dwAvailPhys; SIZE_T dwTotalPageFile; SIZE_T dwAvailPageFile; SIZE_T dwTotalVirtual; SIZE_T dwAvailVirtual; } MEMORYSTATUS, *LPMEMORYSTATUS

Назначение полей данной структуры:

dwMemoryLoad - оценка занятости системы управления памятью(0-100)

dwTotalPhys - общий размер физической памяти RAM-памяти в байтах

dwAvailPhys - общий размер физической памяти RAM-памяти в байтах, доступной для выделения

dwTotalPageFile - максимальное количество байтов, которое может содержаться в страничном файде на жестком диске (или дисках)

dwAvailPageFile - максимальное количество байтов, которое может быть передано процессу из страничного файла

dwTotalVirtual: DWORD - количество байтов в адресном пространстве, принадлежащих лично данному процессу

dwAvailVirtual - суммарный объем всех свободных регионов в адресном пространстве процесса, вызывающего процедуру GlobalMemoryStatus

вычитая из dwTotalVirtual полученное значение, можно найти размер зарезервированной процессом области в виртуальном адресном пространстве

 

Перед вызовом процедуры необходимо занести в поле dwLength размер структуры в байтах с помощью функции sizeof().

 

Для запроса информации об участке памяти по заданному адресу (размер, тип памяти, атрибуты защиты) текущего процесса служит функция:

SIZE_T VirtualQuery(LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength);

 

При вызове функции первый параметр должен содержать адрес виртуальной памяти, о котором нужно получить информацию.

Второй параметр – переменная типа, описанного как

typedef struct _MEMORY_BASIC_INFORMATION {
PVOID BaseAddress;
PVOID AllocationBase;
DWORD AllocationProtect;
SIZE_T RegionSize;
DWORD State;
DWORD Protect;
DWORD Type; } MEMORY_BASIC_INFORMATION,
*PMEMORY_BASIC_INFORMATION;

 

Назначение полей данной структуры:

BaseAddress - значение параметра lpAddress, округленное до значения, кратного размеру страницы

AllocationBase - базовый адрес региона, включающего адрес запроса

AllocationProtect - атрибут защиты региона – некоторые из возможных значений PAGE_NOACCESS, PAGE_READONLY, PAGE_READWRITE

RegionSize - суммарный размер (в байтах) группы страниц, начинающихся с базового адреса и имеющих те же атрибуты защиты, состояние и тип, что и страница, обнаруженная по адресу lpAddress

State - указывает состояние (MEM_FREE, MEM_RESERVE, MEM_COMMIT) всех смежных страниц, имеющих те же атрибуты защиты, состояние и тип, что и страница, расположенная по адресу lpAddress

 

Для состояния MEM_FREE элементы Allocationbase, Alloocation, Protect и Type не определяются

Protect - содержит атрибут защиты (PAGE_*), общий для всех смежных страниц, имеющих те же атрибуты защиты, состояние и тип, что и страница, расположенная по адресу lpAddress

Type - определяет тип физической памяти (MEM_IMAGE, MEM_MAPPED или MEM_PRIVATE), связанной с группой смежных страниц, имеющих имеющих те же атрибуты защиты, состояние и тип, что и страница, расположенная по адресу lpAddress

 

Параметр dwLength задает размер структуры MEORY_BASIC_INFORMATION.

Функция VirtualQuery() возвращает число байт, скопированных в буфер. Если возвращено нулевое значение, информация о запрошенном участке НЕ ПОЛУЧЕНА.

Сканируя память в диапазоне от минимального до максимального адреса, можно построить карту виртуальной памяти процесса.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.