Файл: Руссинович М., Маргозис А. Утилиты Sysinternals. Справочник администратора 2012.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Операционные системы

Добавлен: 29.10.2018

Просмотров: 32983

Скачиваний: 742

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Утилиты для работы с процессами и диагностики 

Глава 7  217 

копированием при записи, процесс получает дополнительную закрытую 
память, которая помечается как доступная для чтения и записи. Эта за-
крытая память находится в ОЗУ или файле подкачки, а не в файле об-
раза. В столбце Details (Подробно) представления Details View показан 
путь к файлу или имя секции.

•  Cпроецированный файл (Mapped File) — может использоваться совмест-

но и представляет файл на диске. Проецируемые файлы часто являются 
библиотеками DLL с ресурсами и обычно содержат данные приложений. 
В столбце Details (Подробно) показан путь к файлу.

•  Разделяемая (Shareable) — такая память может сообща использоваться 

процессами и находится в ОЗУ или файле подкачки (если он имеется). 
Эта память обычно содержит данные, совместно используемые процесса-
ми посредством общих секций библиотек DLL или объекты, находящие-
ся в файле подкачки или проецируемом файле (такие файлы называют 
также секциями в файле подкачки).

•  Куча (Heap) — закрытая память, распределяемая и управляемая диспет-

чером кучи пользовательского режима; обычно содержит данные прило-
жений. Функции управления памяти приложений, использующие кучу, 
включают библиотечную функцию исполняющей среды C malloc, опера-
тор C++ new, API-функции Windows Heap и устаревшие API-функции 
GlobalAlloc и LocalAlloc.

•  Управляемая куча (Managed Heap) — представляет закрытую память, 

распределяемую и управляемую исполняющей средой .NET; обычно со-
держит данные приложений.

•  Стек (Stack) — память в стеке выделяется каждому потоку в процессе для 

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

•  Закрытая память (Private Data) — эта память выделяется API-функцией 

VirtualAlloc и не обрабатывается диспетчером кучи или исполняющей сре-
дой .NET и не относится к категории памяти стека. Такая память обычно 
содержит данные приложений, а также блоки Process и Thread Environ-
ment. Закрытые данные не могут совместно использоваться разными 
процессами.

 Примечание  Определение «закрытой памяти» в VMMap шире одноименного терми-

на, принятого в Process Explorer: в первом под «закрытой памятью» понимают всю 
закрытую память, переданную процессу.

•  Таблица страниц (Page Table) — закрытая память режима ядра, связанная 

с таблицами страниц процесса. Обратите внимание на то, что эта память 
никогда не отображается в представлении VMMap Details (Подробно)
в котором отображается только память пользовательского режима.

SIN_ch_07.indd   217

27.12.2011   14:30:23


background image

218  Часть 

II   

Работа с утилитами

•  Свободная (Free) — свободные области памяти (нераспределенные об-

ласти виртуального адресного пространства процесса). Чтобы включить 
свободные области памяти в представление Details (Подробно) при про-
смотре общей карты памяти процесса, выберите команду Options | Show 
Free Regions
 (Параметры | Показать свободные области).

Информация о памяти

В представлениях Details и Summary отображается следующая информа-
ция о типах памяти и операциях ее распределения. Чтобы уменьшить объем 
“мусора” в выходных данных, VMMap не отображает записи об операциях с 
нулевым объемом памяти.
•  Size (Размер) — общий размер распределенного типа или области. Сюда 

входят области, которые были зарезервированы, но не переданы процессам.

•  Committed (Переданная) — объем памяти, переданной процессам, т.е. 

расположенной в ОЗУ, файле подкачки или проецируемом файле.

•  Private (Закрытая) — объем памяти, принадлежащей единственному 

процессу.

•  Total WS (Рабочий набор, всего) — общий размер рабочего набора (фи-

зической памяти), связанного с этим типом памяти.

•  Private WS (Рабочий набор, закрытый) — размер неразделяемого рабо-

чего набора.

•  Shareable WS (Рабочий набор, общий) — размер разделяемого рабочего 

набора.

•  Shared WS (Рабочий набор, совместно используемый) — размер рабо-

чего набора, разделяемого с другими процессами в текущий момент.

•  Locked WS (Рабочий набор, заблокированный) — объем памяти, гаран-

тированно остающейся в физической памяти и не вызывающей странич-
ных ошибок при обращении.

•  Blocks (Блоки) — число областей памяти, выделенных по отдельности.
•  Largest (Наибольший) — размер наибольшего непрерывного блока па-

мяти для данного типа (в представлении Summary).

•  Address (Адрес) — базовый адрес области памяти в виртуальном адрес-

ном пространстве процесса (в представлении Details).

•  Protection (Защита) — в представлении Details показывает типы опе-

раций, которые можно выполнять с памятью. В случае групп операций, 
включающих выделение блоков памяти, в столбце Protection отобража-
ется сводная информация о типах защиты выделенных блоков. При по-
пытке выполнения кода из области, не помеченной флагом Execute (если 
включен механизм DEP), либо записи в область, не имеющей флага Write 
или Copy-on-Write, либо при обращении к памяти, помеченной как no-
access или зарезервированной, но еще не выделенной, возникает ошибка 
нарушения доступа.

SIN_ch_07.indd   218

27.12.2011   14:30:23


background image

Утилиты для работы с процессами и диагностики 

Глава 7  219 

•  Details (Подробно) — в представлении Details содержит дополнитель-

ную информацию для области памяти, такие как путь к файлу, в котором 
хранятся страницы, идентификатор кучи (для памяти из кучи), иденти-
фикатор потока (для памяти стека) или поколение .NET AppDomain и 
Garbage Collection.

 Примечание API 

VirtualProtect может изменять типы защиты любой страницы, уста-

новленный при ее выделении. Это означает, что в разделяемой области памяти могут 
появиться страницы закрытой памяти (например, если эта область выделена в файле 
подкачки, после чего приложение сменило тип защиты на copy-on-write, а затем моди-
фицировала эти страницы).

Хронология моментальных снимков

VMMap сохраняет моментальные снимки состояния выделения памяти для 
целевого процесса. Можно загрузить любой из моментальных снимков в 
главное окно VMMap и сравнить с другим снимком для поиска изменений.

При отслеживании оснащенного процесса VMMap делает моменталь-

ные снимки автоматически. В меню Options | Trace Snapshot Interval 
(Параметры | Интервал получения моментального снимка)
 можно выбрать 
интервал в 1, 2, 5 или 10 секунд. Можно приостанавливать и возобновлять 
автоматическое получение моментальных снимков, нажимая Ctrl+Space, и 
вручную получать моментальные снимки в любое время нажатием F5.

При анализе процессов, не содержащих библиотеки VMMap, моменталь-

ные снимки не создаются автоматически, их приходится делать вручную, 
нажимая F5.

Рис. 7-4.  Окно Timeline в VMMap

Щелкните кнопку Timeline (Хронология) в основном окне VMMap, 

чтобы открыть одноименное окно (рис. 7-4) с графическим представле-
нием истории выделения памяти в рабочем наборе процесса. Инструмент 
Timeline позволяет загружать ранее полученные моментальные снимки в 
основное окно VMMap и попарно сравнивать их. Горизонтальная ось графи-
ка представляет число секунд с момента получения первоначального момен-
тального снимка, а вертикальная ось — обращения к рабочему набору про-
цесса. Цвета на графике соответствуют цветам, обозначающим типы памяти 
в основном окне VMMap.

SIN_ch_07.indd   219

27.12.2011   14:30:23


background image

220  Часть 

II   

Работа с утилитами

Когда включено автоматическое получение моментальных снимков для 

отслеживания процесса, содержимое диалогового окна Timeline автомати-
чески обновляется. Можно щелкнуть кнопку Pause (Пауза), чтобы прио-
становить автоматическое получение моментальных снимков; и щелкнуть 
еще раз, чтобы возобновить его. Чтобы обновить окно Timeline при просмо-
тре процесса, не содержащего DLL VMMap, нужно закрыть это окно и снова 
открыть его.

Щелкните в любой точке хронологии, чтобы загрузить в основное окно 

VMMap соответствующий моментальный снимок. Чтобы сравнить любые два 
моментальных снимка, щелкните точку под одним из снимков и перетащите 
указатель мыши ко второй точке. Пока кнопка мыши нажата, на временной 
шкале отображаются вертикальные линии, показывающие, моменты полу-
чения моментальных снимков, а область между двумя выбранными точками 
затеняется (рис. 7-5). Чтобы изменить детализацию временной шкалы для об-
легчения выбора моментальных снимков, щелкните кнопки со значками (+) и 
(–), затем перетащите горизонтальный ползунок прокрутки.

Рис. 7-5.  Окно VMMap Timeline во время выбора двух моментальных снимков

При сравнении моментальных снимков диаграммы в основном окне 

VMMap отображают различия между этими снимками в виде прироста или 
убыли значений с момента получения предыдущего моментального сним-
ка. Диапазоны адресов в представлении Details, имеющиеся в новом момен-
тальном снимке, но отсутствующие в предыдущем, выделяются зеленым, а 
диапазоны, имеющиеся только в предыдущем снимке, — красным. Чтобы 
увидеть эти диапазоны, раскройте соответствующие узлы дерева операций 
выделения памяти. Строки представления Details, не изменившие цвет, по-
казывают изменения размера рабочего набора. Для просмотра изменений 
определенного типа памяти выберите этот тип в представлении Summary.

Если выбрать в меню View (Вид) команду Empty Working Set (Очистить 

рабочий набор), VMMap освободит всю физическую память, назначенную 
процессу, и получит новый моментальный снимок. Эта функция полезна 
для измерения памяти, потребляемой отдельными функциями, которые вы-
зывают приложения: опустошите рабочий набор, вызовите функцию и обно-
вите экран, чтобы узнать, сколько физической памяти ушло у приложения 
на этот вызов.

SIN_ch_07.indd   220

27.12.2011   14:30:23


background image

Утилиты для работы с процессами и диагностики 

Глава 7  221 

Чтобы переключиться со сравнения на просмотр одного моментального 

снимка, откройте окно Timeline (Временная линейка) и выберите любой 
моментальный снимок.

Просмотр текста из областей памяти

В некоторых случаях предназначение области памяти можно понять по 
хранящимся в ней строкам. Для просмотра строк длиной от трех символов 
ASCII или Unicode, выберите область в представлении Details, а затем вы-
берите команду меню View | Strings (Вид | Строки). VMMap откроет окно, 
показывающее диапазон виртуальных адресов и найденные в нем строки 
(рис. 7-6). Если внутри выбранной области есть блоки, будет выполнен по-
иск по всем блокам в области.

Строки данных не входят в моментальные снимки. Эта функция работа-

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

 Примечание  В программировании термин «строка» обозначает структуру данных, 

состоящую из последовательности символов, обычно представляющую понятный че-
ловеку текст.

Рис. 7-6.  Окно VMMap Strings

Поиск и копирование текста

Чтобы найти определенный текст в представлении Details, нажмите Ctrl+F. 
Функция поиска подсветит следующую видимую строку представления 
Details, содержащую указанный текст в любом столбце. Заметьте, что поиск 
текста внутри свернутых областей с блоками не выполняется. Чтобы повто-
рить предыдущий поиск, нажмите F3.

VMMap предоставляет два способа копирования текста в буфер обмена:

•  нажатие Ctrl+A копирует весь текст из окна VMMap, включая имя и 

идентификатор процесса, и весь текст из представлений Summary и De-

SIN_ch_07.indd   221

27.12.2011   14:30:24