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

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

Читайте также:
  1. II. Корыстные источники информации
  2. PCI DSS v 2.0октябрь 2010 г.- стандарт защиты информации в индустрии платежных карт
  3. Адресация памяти в защищенном режиме работы процессора
  4. Аппаратура первичной обработки информации (АПОИ)
  5. Архивирование данных об источниках информации
  6. Архитектура памяти.
  7. Б). Принципы кодировки информации

 

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

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() возвращает число байт, скопированных в буфер. Если возвращено нулевое значение, информация о запрошенном участке НЕ ПОЛУЧЕНА.

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

 


Дата добавления: 2015-07-07; просмотров: 222 | Нарушение авторских прав


Читайте в этой же книге: Пример 2 | Поток_1 Поток_2 | Проблема тупиков и методы борьбы с тупиками | Условия возникновения тупика | Дескрипторные таблицы (ДТ). | Реализация многозадачного режима в защищенном режиме процессоров фирмы Intel | Обработка прерываний в защищенном режиме | Системный режим | Организация виртуальной памяти | Управление страничной памятью в ОС MS Windows |
<== предыдущая страница | следующая страница ==>
Стратегии подкачки и рабочие наборы страниц| На рисунке 1 -28 показаны перечисленные этапы и используемые для их выполнения системные обрабатывающие программы.

mybiblioteka.su - 2015-2024 год. (0.009 сек.)