Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО от Тихомирова / Лаб работы СПО ЗО 2014 / Управление виртуальной памятью 5 лр.doc
Скачиваний:
11
Добавлен:
08.06.2015
Размер:
134.14 Кб
Скачать

10

Лабораторная работа № 5 2010

Управление виртуальной памятью

Цель работы: знакомство с методами, функциями Win32 и структурами данных, используемыми для управления виртуальной памятью (ВП) в прикладных программах.

1. Краткие теоретические сведения

1.1. Методы управления виртуальной памятью

В Win32 используются четыре метода управления виртуальной памятью:

  • резервирование регионов в виртуальном адресном пространстве и передача им физической памяти - используется для операций с большими массивами объектов или структур, размер которых превышает размер страницы ВП – 4 кБ;

  • кучи (heaps), применяемые для операций с большим количеством малых объектов, размер объекта меньше размера страницы ВП;

  • файлы, проецируемые в память - средства для операций с интенсивными потоками данных (обычно из файлов) и для обеспечения совместного доступа приложений к данным;

  • AWE– средство для работы с оперативной памятью объемом свыше 4 ГБ (в данной работе не рассматривается).

1.2. Функции и структуры данных для получения информации о параметрах и состоянии виртуальной памяти

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

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.

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

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().