- •1. Краткие теоретические сведения
- •1.1. Методы управления виртуальной памятью
- •1.2. Функции и структуры данных для получения информации о параметрах и состоянии виртуальной памяти
- •1.3. Функции получения информации о структуре виртуальной памяти
- •1.4. Резервирование регионов виртуального адраесного пространства
- •1.5. Использование куч
- •1.6. Файлы, проецируемые в память
- •2. Методика выполнения
- •3. Отчет о работе
- •Контрольные вопросы
Лабораторная работа № 5 2010
Управление виртуальной памятью
Цель работы: знакомство с методами, функциями Win32 и структурами данных, используемыми для управления виртуальной памятью (ВП) в прикладных программах.
1. Краткие теоретические сведения
1.1. Методы управления виртуальной памятью
В Win32 используются четыре метода управления виртуальной памятью:
резервирование регионов в виртуальном адресном пространстве и передача им физической памяти - используется для операций с большими массивами объектов или структур, размер которых превышает размер страницы ВП – 4 кБ;
кучи (heaps), применяемые для операций с большим количеством малых объектов, размер объекта меньше размера страницы ВП;
файлы, проецируемые в память - средства для операций с интенсивными потоками данных (обычно из файлов) и для обеспечения совместного доступа приложений к данным;
AWE– средство для работы с оперативной памятью объемом свыше 4 ГБ (в данной работе не рассматривается).
1.2. Функции и структуры данных для получения информации о параметрах и состоянии виртуальной памяти
Сведения о конкретной платформе предоставляет процедура:
GetSystemInfo (SYSTEM_INFO: TSystemInfo).
Структура данных TSystemInfo описана в файле Windows.pas cледующим образом:
TSystemInfo = record
case Integer of
0: ( dwOemId: DWORD);
1: ( wProcessorArchitecture: Word;
wReserved: Word;
dwPageSize: DWORD; // размер страницы
lpMinimumApplicationAddress: Pointer; //мин адрес доступного адресного пространства
lpMaximumApplicationAddress: Pointer; //макс адрес доступного адресного пространства
dwActiveProcessorMask: DWORD;
dwNumberOfProcessors: DWORD; // число процессоров
dwProcessorType: DWORD;
dwAllocationGranularity: DWORD; // гранулярность выделения регионов адресного
// пространства
wProcessorLevel: Word;
wProcessorRevision: Word);
end;
Более подробная информация приведена в файле Win32.hlp.
Для динамического отслеживания текущего состояния памяти используется процедура
GlobalMemoryStatus(var lpBuffer: TMemoryStatus);
Структура данных TMemoryStatus описана в файле Windows.pas cледующим образом:
TMemoryStatus = record
dwLength: DWORD;
dwMemoryLoad: DWORD; //оценка занятости системы управления памятью(0-100)
dwTotalPhys: DWORD;// общий размер физической памяти RAM-памяти в байтах
dwAvailPhys: DWORD;// общий размер физической памяти RAM-памяти в
// байтах, доступной для выделения
dwTotalPageFile: DWORD;// максимальное количество байтов, которое может
// содержаться в страничном файде на жестком диске (или дисках)
dwAvailPageFile: DWORD; // максимальное количество байтов, которое может быть
// передано процессу из страничного файла
dwTotalVirtual: DWORD; // количество байтов в адресном пространстве, принадлежащих
// лично данному процессу
dwAvailVirtual: DWORD; // суммарный объем всех свободных регионов в адресном
// пространстве процесса, вызывающего процедуру GlobalMemoryStatus
// вычитая из dwTotalVirtual полученное значение, можно найти размер
// зарезервированной процессом области в виртуальном адресном пространстве
end;
Перед вызовом процедуры необходимо занести в поле dwLength размер структуры в байтах с помощью функции sizeof().