Скачиваний:
20
Добавлен:
01.05.2014
Размер:
84.99 Кб
Скачать

Лабораторная работа 5. Операции над виртуальной памятью

Цель работы. Разработать консольное приложение для исследования виртуальной памяти

    1. Возможности программы:

  • определение характеристик системы (в т.ч. виртуальной памяти)

  • определение статуса виртуальной памяти

  • определение состояния конкретного участка памяти по заданному адресу

  • резервирование региона в адресном пространстве

  • передача физической памяти зарезервированному региону

  • использование выделенной памяти

  • возврат физической памяти и освобождение региона адресного пространства

  • определение принадлежащих процессу динамических областей памяти (ДОП)

  • определение размера ДОП

  • создание ДОП

  • использование выделенной ДОП

  • освобождение (изменение размера) блока ДОП

  • уничтожение ДОП

    1. Используемые функции 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]