Лабораторная работа 5. Операции над виртуальной памятью
Цель работы. Разработать консольное приложение для исследования виртуальной памяти
-
Возможности программы:
-
определение характеристик системы (в т.ч. виртуальной памяти)
-
определение статуса виртуальной памяти
-
определение состояния конкретного участка памяти по заданному адресу
-
резервирование региона в адресном пространстве
-
передача физической памяти зарезервированному региону
-
использование выделенной памяти
-
возврат физической памяти и освобождение региона адресного пространства
-
определение принадлежащих процессу динамических областей памяти (ДОП)
-
определение размера ДОП
-
создание ДОП
-
использование выделенной ДОП
-
освобождение (изменение размера) блока ДОП
-
уничтожение ДОП
-
Используемые функции Win32 API:
Таблица вариантов
|
Вар.01 |
Вар.02 |
Вар.03 |
Вар.04 |
Вар.05 |
Вар.06 |
Вар.07 |
Вар.08 |
Вар.09 |
Вар.10 |
GetSystemInfo |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
GlobalMemoryStatus |
|
|
* |
|
|
* |
|
|
* |
|
VirtualQuery |
|
|
|
* |
|
|
|
* |
|
|
VirtualAlloc |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
VirtualFree |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
GetProcessHeap |
* |
|
* |
|
* |
|
* |
|
* |
|
GetProcessHeaps |
|
* |
|
* |
|
* |
|
* |
|
* |
HeapSize |
* |
|
|
|
* |
|
|
|
|
* |
HeapCreate |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
HeapAlloc |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
HeapFree |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
HeapReAlloc |
* |
|
|
|
|
* |
|
|
|
|
HeapDestroy |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
|
Вар.11 |
Вар.12 |
Вар.13 |
Вар.14 |
Вар.15 |
Вар.16 |
Вар.17 |
Вар.18 |
Вар.19 |
Вар.20 |
GetSystemInfo |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
GlobalMemoryStatus |
|
* |
|
|
* |
|
|
* |
|
|
VirtualQuery |
|
* |
|
|
|
* |
|
|
|
* |
VirtualAlloc |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
VirtualFree |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
GetProcessHeap |
* |
|
* |
|
* |
|
* |
|
* |
|
GetProcessHeaps |
|
* |
|
* |
|
* |
|
* |
|
* |
HeapSize |
|
|
|
|
* |
|
|
|
|
* |
HeapCreate |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
HeapAlloc |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
HeapFree |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
HeapReAlloc |
|
* |
|
|
|
|
|
* |
|
|
HeapDestroy |
* |
* |
* |
* |
* |
* |
* |
* |
* |
* |
Приложение 5. Функции и структуры для операций над виртуальной памятью
Void GlobalMemoryStatus( // Определение состояния глобальной памяти
LPMEMORYSTATUS lpBuffer); // memory status structure - буфер состояния глобальной памяти [out]
BOOL GlobalMemoryStatusEx( // Определение состояния глобальной памяти
LPMEMORYSTATUSEX lpBuffer); // memory status structure- буфер состояния глобальной памяти [in/out]
LPVOID VirtualAlloc( // Выделение виртуальной памяти
LPVOID lpAddress, // region to reserve or commit – адрес региона [in]
SIZE_T dwSize, // size of region – размер региона [in]
DWORD flAllocationType, // type of allocation – тип выделения [in]
DWORD flProtect); // type of access protection – тип защиты доступа [in]
LPVOID VirtualAllocEx( // Выделение виртуальной памяти
HANDLE hProcess, // process to allocate memory – хэндл процесса [in]
LPVOID lpAddress, // desired starting address – желаемый стартовый адрес [in]
SIZE_T dwSize, // size of region to allocate – размер региона [in]
DWORD flAllocationType, // type of allocation – тип выделения [in]
DWORD flProtect); // type of access protection – тип защиты доступа [in]
BOOL VirtualFree( // Освобождение виртуальной памяти
LPVOID lpAddress, // address of region – адрес региона [in]
SIZE_T dwSize, // size of region – размер региона [in]
DWORD dwFreeType); // operation type – тип операции [in]
BOOL VirtualFreeEx( // Освобождение виртуальной памяти
HANDLE hProcess, // handle to process – хэндл процесса [in]
LPVOID lpAddress, // starting address of memory region – стартовый адрес региона [in]
SIZE_T dwSize, // size of memory region – размер региона [in]
DWORD dwFreeType); // operation type – тип операции [in]
DWORD VirtualQuery( // Запрос виртуальной памяти [out]
LPCVOID lpAddress, // address of region – адрес региона [in]
PMEMORY_BASIC_INFORMATION lpBuffer, // information buffer – буфер для информации [out]
SIZE_T dwLength); // size of buffer – размер буфера [in]
DWORD VirtualQueryEx( // Запрос виртуальной памяти [out]
HANDLE hProcess, // handle to process – хэндл процесса [in]
LPCVOID lpAddress, // address of region – адрес региона [in]
Pmemory_basic_information lpBuffer, // information buffer – буфер для информации [out]
SIZE_T dwLength); // size of buffer – размер буфера [in]
Примечание: Heap – Динамическая область памяти (ДОП)
HANDLE GetProcessHeap(VOID); // Получение хэндла ДОП процесса [out]
DWORD GetProcessHeaps( // Получение хэндлов ДОП процесса [out]
DWORD NumberOfHeaps, // maximum number of heap handles – максимальное число хэндлов [in]
PHANDLE ProcessHeaps); // buffer for heap handles – буфер для хэндлов ДОП процесса [out]
LPVOID HeapAlloc( // Выделение ДОП
HANDLE hHeap, // handle to private heap block – хэндл ДОП [in]
DWORD dwFlags, // heap allocation control – управление выделением ДОП [in]
SIZE_T dwBytes); // number of bytes to allocate – число запрашиваемых байтов [in]
HANDLE HeapCreate( // Создание ДОП [out]
DWORD flOptions, // heap allocation attributes – атрибуты ДОП [in]
SIZE_T dwInitialSize, // initial heap size – начальный размер ДОП [in]
SIZE_T dwMaximumSize); // maximum heap size – максимальный размер ДОП [in]
BOOL HeapDestroy( // Разрушение ДОП
HANDLE hHeap); // handle to heap – хэндл ДОП [in]
BOOL HeapFree( // Освобождение ДОП
HANDLE hHeap, // handle to heap – хэндл ДОП [in]
DWORD dwFlags, // heap free options – опции освобождение [in]
LPVOID lpMem); // pointer to memory – указатель на ДОП [in]
LPVOID HeapReAlloc( // Перераспределение ДОП
HANDLE hHeap, // handle to heap block – хэндл ДОП [in]
DWORD dwFlags, // heap reallocation options – опции перераспределения ДОП [in]
LPVOID lpMem, // pointer to memory to reallocate – указатель на перераспределяемую ДОП [in]
SIZE_T dwBytes); // number of bytes to reallocate – число перераспределяемых байтов ДОП [in]
DWORD HeapSize( // Определение размера ДОП [out]
HANDLE hHeap, // handle to heap – хэндл ДОП [in]
DWORD dwFlags, // heap size options – опции размера ДОП [in]
LPCVOID lpMem ); // pointer to memory – указатель на ДОП [in]