Предыдущий раздел | Оглавление | Следующий раздел |
ЛАБОРАТОРНАЯ РАБОТА № 3
Архитектура памяти Windows
Цель работы: Получение практических навыков по использованию Win32 API для исследования памяти Windows
Методические указания к выполнению лабораторной работы
Типы памяти: физическая память, виртуальная память, память файла подкачки.
Совместно используемая физическая память
О физической памяти говорят, что она совместно используется, если она отображается на виртуальное адресное пространство нескольких процессов, хотя виртуальные адреса в каждом процессе могут отличаться.
Одно из преимуществ файлов, отображаемых в память, заключается в том, что их легко использовать совместно. Присвоение имени объекту "отображение файла" делает возможным совместное использование файла несколькими процессами. В этом случае его содержимое отображено на совместно используемую физическую память. Возможно также совместное пользование содержимого файла подкачки с помощью механизма отображения файла.
Адресное пространство процесса
Каждый процесс Win32 получает виртуальное адресное пространство, называемое также адресным пространством, или пространством процесса. Таким образом, код процесса может ссылаться на адреса с &Н00000000 по &HFFFFFFFF (или с 0 по 232 – 1 = 4 294 967 295 в десятичной системе счисления).
Распределение виртуальной памяти
Каждая страница виртуального адресного пространства может находиться в одном из трех состояний:
- Reserved (зарезервирована) – страница зарезервирована для использования;
- Committed (передана) – для данной виртуальной страницы выделена физическая память в файле подкачки или в файле, отображаемом в память;
- Free (свободна) – данная страница не зарезервирована и не передана, и поэтому в данный момент она недоступна для процесса.
Кучи памяти в 32-разрядной Windows
При создании процесса Windows назначает ему кучу по умолчанию, то есть изначально резервирует область виртуальной памяти объемом 1 Мб. Тем не менее, при необходимости система будет регулировать размер кучи, которая используется самой Windows для различных целей.
Задание для выполнения лабораторной работы
- выдает информацию, получаемую при использовании API GlobalMemoryStatus (при выводе информации использовать диаграммы);
- составляет карту виртуальной памяти для любого процесса.
Видео выполнения работы
Ход выполнения лабораторной работы
Программа выведет полную информацию о занятой и свободной физической и виртуальной памяти, составит карту процессов, создаст виртуальную память для каждого процесса.
- Создать форму с элементами для вывода информации о занятой памяти;
- Получить информацию о занятой и свободной памяти с помощью функции GlobalMemoryStatus, которая помещает информацию в структуру;
- После вызова функции GlobalMemoryStatus, взять необходимые данные из структуры и поместим их в соответствующие элементы на форме;
- Создать новую форму с таблицей, в которую будет выводиться информация обо всех процессах;
- Сделать снимок памяти с помощью функции CreateToolhelp32Snapshot, первый параметр TH32CS_SNAPPROCESS, который указывает, что нам нужен снимок именно процессов;
- С помощью функций Process32First и Process32Next заносится информация о процессе в структуру, а из структуры, соответственно, в таблицу;
- Получить дескриптор процесса с помощью функции OpenProcess по его ID;
- Используя функцию GetProcessMemoryInfo, получить информацию об используемой памяти выбранного процесса, которую также занести в таблицу;
- В конце работы закрыть все открытые дескрипторы.
Вывод информации о виртуальных адресах
- Функция GetSystemInfo определяет минимальный адрес памяти доступного адресного пространства;
- Функция VirtualQueryEx, используя дескриптор процесса и минимальный адрес памяти доступного адресного пространства, возвращает информацию о диапазоне страниц виртуального адресного пространства указанного процесса, полученную информацию занести в таблицу.
Предыдущий раздел | Оглавление | Следующий раздел |