Фил Булл (Phil Bull)
philbull@gmail.com 2011
Майкл Хилл (Michael Hill)
mdhillca@gmail.com 2011, 2014
Карта памяти процесса может помочь диагностировать определенные проблемы с памятью.
Алексей Кабанов
ak099@mail.ru 2016

# Что такое карта памяти?

Виртуальная память - это представление объединенной физической памяти и пространства подкачки в системе. Она позволяет запущенным процессам получить доступ к большему объ ему физической памяти, чем существующий, путем сопоставления мест в физической памяти с файлами на диске.

Когда программа запускается, система присваивает ей уникальный идентификатор процесса (PID), а ее инструкции и данные загружаются в память в виде страниц. Таблица страниц каждого процесса отображает соответствие между его страницами в виртуальной памяти и их расположением в физической памяти. Карта памяти отображает общее использование виртуальной памяти процессом и может быть использована для определения затрат памяти при выполнении одного или нескольких экземпляров программы, для обеспечения использования правильных общих библиотек, для просмотра результатов настройки различных параметров настройки производительности программы или для диагностики таких проблем, как утечки памяти.

Если запущено несколько копий программы, инструкции (или текст) программы нужно загрузить в физическую память только один раз. Каждый раз, когда запускается новый экземпляр программы (как уникальный процесс со своими собственными страницами виртуальной памяти), его таблица страниц сопоставляет расположение текста в виртуальной памяти с инструкциями в исходном месте реальной памяти. Кроме того, любые динамические разделяемые библиотеки, используемые процессом, отображаются как отдельные в виртуальной памяти, но являются разделяемыми ссылками на единственную копию текстового сегмента библиотеки в реальной памяти. При учете общего использования памяти процессом важно отметить, что стоимость загруженных в память общих библиотек может быть распределена между всеми процессами, использующими их в данный момент.

Когда системе требуется больше страниц памяти, чем доступно, некоторые из существующих страниц будут выгружены или записаны в пространство подкачки. Текстовые страницы в памяти имеют флаг чтения-исполнения, и их не нужно записывать в своп, поскольку они могут быть повторно загружены из исходного места на диске. Страницы данных имеют права на чтение-запись, и если они изменяются в памяти, то помечаются как грязные, а если они предназначены для свопинга, то должны быть выведены на страницу. Когда страница в пространстве подкачки требуется запущенному процессу, ее нужно вернуть обратно в своппинг перед использованием, что может привести к выводу другой страницы в своппинг.