Использование библиотеки Process Status Helper
Библиотека Process Status Helper, известная также под названием PSAPI, предоставляет набор функций, позволяющих получить информацию о процессах и драйверах устройств. Библиотека поставляется в составе Windows 2000/XP и доступна в качестве устанавливаемой компоненты для Windows NT 4.0. Для перечисления процессов библиотека предоставляет функцию EnumProcesses, которая возвращает массив идентификаторов запущенных процессов. Поскольку идентификаторы процессов не предоставляют никакой информации о параметрах загруженности компьютера, то необходимо проделать дополнительную работу. Для каждого процесса необходимо сначала получить его описатель (handle) c помощью функции OpenProcess и затем использовать функции, которые возвращают дополнительную информацию о процессах.
Использование ToolHelp32 api
Корпорация Microsoft добавила набор функций под названием ToolHelp API в Windows 3.1, позволяющих сторонним разработчикам получить доступ к системной информации, которая ранее была доступна только программистам Microsoft. При создании Windows 95 эти функции были добавлены в новую систему под названием ToolHelp32 API. В ранних версия ОС интерфейс для доступа к данным производительности был крайне запутанным и неудобным (начиная с Windows NT 4.0, Microsoft предоставляет библиотеку Performance Data Helper, значительно облегчающую получение данных производительности).
Используя ToolHelp32 API, сначала создается моментальный снимок (snapshot) списка процессов с помощью функции CreateToolhelp32Snapshot, а затем осуществляется проход по списку с помощью функций Process32First и Process32Next. Структура PROCESSENTRY32, заполняемая этими функциями, содержит всю информацию о текущем состоянии системы.
Использование функции ZwQuerySystemInformation
Несмотря на наличие документированного способа получения списка процессов в Windows NT/2000/XP с помощью данных производительности, в Windows Task Manager никогда не использовался этот интерфейс. Вместо этого применяется недокументированная функция ZwQuerySystemInformation, экспортируемая из соответствующей системной .DLL, которая позволяет получить доступ к системной информации.
Использование Windows Management Instrumentation
Windows Management Instrumentation (WMI) является реализацией Mircrosoft для так называемой технологии Web-Based Enterprise Management (WBEM). WBEM определяет унифицированную архитектуру, которая позволяет получать данные от различных источников, построенных с помощью различных технологий и платформ, и единообразно представлять эти данные. WBEM основана на схеме общей информационной модели (Common Information Model, CIM), которая является индустриальным стандартом, управляемым Distributed Management Task Force (DMTF). WMI поставляется в составе Windows 2000, но также может быть установлен на Windows 95/98/Me и Windows NT 4.0.
Использование счетчиков производительности
Операционная система Windows NT с начала её создания содержала интерфейс для получения разнообразной информации о системе в виде счетчиков производительности. Этот интерфейс является далеко не простым. Для получения той или иной информации нужно прочитать из ключа реестра HKEY_PERFORMANCE_DATA значение со специально сформированным именем. В результате возвращается набор глубоко вложенных структур, многие из которых переменного размера[3].
С появлением в Windows NT 4.0 библиотеки Performance Data Helper (PDH), предоставляется более удобный интерфейс для измеренияданных о производительности. Эта библиотека, однако, не входила в комплект поставки Windows NT 4.0, она распространялась в составе Microsoft Platform SDK. В Windows 2000 PDH.DLL присутствует по умолчанию.
Система измерения производительности в Windows NT осуществляется через понятие объекта, для которого осуществляется подсчет производительности. Примерами объектов являются процессор, жесткий диск и др. Каждый объект может иметь один или более экземпляров, и для каждого объекта существует свой набор счетчиков производительности. Задача состоит в получении значения счетчика.
Основная сложность в использовании счётчиков производительности состоит в том, что названия объектов и счетчиков производительности являются локализуемыми. Это значит, что, например, на русской версии Windows NT/2000/XP необходимо использовать “Процесс” и “Идентификатор процесса” вместо “Process” и “ID Process”. Для получения локализованных имен объектов и формирования полного пути к интересующему нас счетчику производительности необходимо писать вспомогательную функцию, которая бы осуществляла обратное преобразование.
“Счётчики производительности” (perfomance counters) – это расширяемый механизм сбора различной информации, заложенный в операционные системы линейки Windows NT, начиная с версии 3.1. Большая часть счётчиков доступна пользователю через оснастку (snap-in) Performance.
Это мощный и гибкий механизм. Но, он неочевиден, громоздок и неудобен. Однако есть несколько ситуаций, когда использование счётчиков производительности может быть необходимо, когда:
-
нужно следить за каким-то параметром системы, недоступным через другие интерфейсы (например, количество страниц передаваемых из ОП на жёсткий диск в секунду - свопинг).
-
необходимо написать какую-то сложную систему и предоставить администратору возможность использовать стандартные механизмы для доступа к информации о состоянии этой системы.
Таблица, в которой отражена применимость различных методов:
|
Windows 9x/Me |
Windows NT 4.0 |
Windows 2000/XP |
Способ 1 |
Нет |
Да* |
Да |
Способ 2 |
Да |
Нет |
Да |
Способ 3 |
Нет |
Да |
Да |
Способ 4 |
Нет |
Да* |
Да |
Способ 5 |
Да* |
Да* |
Да |
* - Требует установки дополнительных компонент
Табл. 1. Применимость различных методов
Ядро ОС Linux, которое управляет ресурсами компьютера, предоставляет пользователям набор команд, при помощи которых можно получить информацию о загруженности компьютера. Поэтому программа для сбора информации о загруженности компьютера может быть написана не только на любом языке программирования, имеющем компилятор для ОС Linux, но и напрямую на скриптовом языке Shell OC Linux.
Например, команда ps выводит информацию о запущенных процессах. Вывод оформлен в виде таблицы. В первой строке содержатся заголовки колонок таблицы, в последующих строках выводятся сведения о каждом процессе. В следующем примере приведен пример вызова программы и выводимая информация:
% ps u
USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND
komolkin 16302 0.0 1.0 256 628 pts/4 A 23:59:47 0:00 -tcsh
komolkin 14796 0.0 0.0 168 268 pts/4 A 00:00:16 0:00 ps u
Названия и значение колонок, выводимых при выполнении команды :
-
PID идентификатор процесса;
-
USER регистрационное имя пользователя-владельца процесса;
-
UID реальный идентификатор пользователя;
-
SIZE полный объем памяти, занимаемой процессом;
-
RES RSS размер резидентной части процесса;
-
STAT состояние процесса;
-
LIB объем библиотечных подпрограмм;
-
%CPU текущее значение загрузки процессора;
-
%MEM часть оперативной памяти, занятая резидентной частью процесса;
-
TIME процессорное время, затраченное на выполнение процесса;
-
COMMAND команда запуска процесса;
-
PPID идентификатор родительского процесса;
-
TSIZE объем машинного кода программы;
-
DSIZE объем данных (области данных и стека) программы;
-
SWAP объем части процесса, выгруженной в область свопинга.
Программа на языке ОС Shell для получения параметра - Загрузка процессора, может быть составлена следующим образом:
#!/bin/sh
set `iostat -c 2 -t proc |tail +4`
us="$3"
ni="$4"
if [ "x$ni" = "x0100" ]; then
ni=0
fi
echo $us
echo $ni
echo 0
echo User processes
Интенсивность замещения страниц можно получить при помощи следующей программы:
#!/bin/sh
set `vmstat -p proc -w 5 -c 2|tail +4`
echo $8
echo $9
echo 0
echo Paging
Объем занятой виртуальной памяти:
#!/bin/sh
set `vmstat -p proc |tail +3`
echo $4
echo $5
echo 0
echo Virtual Memory
Контрольные вопросы:
-
Какие параметры определяют уровень загруженности компьютера? Пояснить почему?
-
Перечислите основные способы измерения параметров загруженности компьютера?
-
Предложите свой метод достижения равномерной загрузки кластерной вычислительной системы на основе измерения параметров загруженности?
-
Как можно оценить вычислительную сложность определения одного из параметров загруженности компьютера стандартными средствами ОС?
-
Чем отличается определение параметров загруженности компьютера в ОС Windows от ОС Linux?
Форма отчета:
Отчет о выполненной лабораторной работе должен включать в себя следующее:
-
Постановку задачи и краткое описание метода решения;
-
Текст подпрограмм каждого модуля с комментариями;
-
Результаты тестирования разработанной программы на точность полученного результата и на количество вычислительных ресурсов необходимых для её выполнения.
Задания:
-
Разработать программу, определяющую основные параметры загруженности компьютера, работающего под управлением ОС Windows, с использованием PSAPI и ToolHelp API(программа должна быть реализована как сервис ОС Windows и иметь при этом форму для отображения статистики в реальном времени).
-
Разработать программу, определяющую основные параметры загруженности компьютера работающего под управлением ОС Windows с использованием PerfMon API(счётчики) и недокументированной функции ОС (программа должна быть реализована как сервис ОС Windows и иметь при этом форму для отображения статистики в реальном времени).
-
Определить метод для измерения основных параметров загруженности компьютера работающего под управлением ОС Linux и реализовать его в программе (программа должна быть реализована как сервис ОС Linux).
-
Определить метод для измерения основных параметров загруженности компьютера работающего под управлением ОС Linux и реализовать его в программе (в программе должен быть реализован графический интерфейс для отображения собранной статистики в реальном времени).
Примечание: в каждой программе в задании 1 и 2 необходимо реализовать возможность изменения настроек с целью задания интервала сбора статистики, выбора метода определения параметров загруженности и т.д.