Лабораторная работа Ревизия 3 2 История изменений
![]()
|
. ЭКСПЕРИМЕНТ 2: просмотр информации о процессах через диспетчер задач (Заметьте, что окно Paint остается). Переключитесь в диспетчер задач и откройте его вкладку «Приложения». Щелкните правой кнопкой мыши задачу «Командная строка» и выберите «Перейти к процессам». Щелкните процесс Cmd.exe правой кнопкой мыши и выберите команду «Завершить дерево процессов». B окне «Предупреждение диспетчера задач» щелкните «Да». Первое окно командной строки исчезнет, но вы по-прежнему сможете наблюдать окно Paint, так как оно является внуком первого из завершенных процессов Командной строки. A поскольку второй (родительский процесс Paint) тоже завершен, связь между родителем и внуком потеряна. Диспетчер задач Windows отображает список выполняемых в системе процессов. Его можно запустить тремя способами: нажав клавиши Ctrl+Shift+Esc; щелкнув панель задач правой кнопкой мыши и выбрав команду «Диспетчер задач»; нажав клавиши Ctrl+Alt+Del. После запуска диспетчера задач откройте вкладку «Процессы». Процессы идентифицируются по имени образа, экземплярами которого они являются. Для просмотра более подробных сведений выберите из меню «Вид» команду «Выбрать столбцы» и укажите, какая дополнительная информация вас интересует. 57 Рис. 1. Выбор столбцов На вкладке «Приложения» отображается список видимых окон запущенных приложений. Также она позволяет идентифицировать процесс, которому принадлежит поток, владеющий каким-либо окном задачи. Для этого щелкните правой кнопкой мыши имя задачи и выберите команду «Перейти к процессам». Колонка «Состояние» дает представление о том, находится ли поток — владелец окна в состоянии ожидания Windows-сообщения. «Работает» означает, что поток ожидает ввода в окно, a «He отвечает» — что не ожидает (т. е. занят либо ждет завершения операции ввода-вывода или освобождения какого-либо синхронизирующего объекта). Рис. 2. Диспетчер задач ЭКСПЕРИМЕНТ 3: просмотр детальных сведений о процессах с помощью Process Explorer При первом запуске вы увидите сообщение о том, что на данный момент символы не сконфигурированы. Когда они корректно сконфигурированы, Process Explorer может обращаться к символьной информации для отображения 58 символьного имени стартовой функции потока и функций в его стеке вызовов (для этого нужно дважды щелкнуть процесс и выбрать вкладку Threads). Эта информация полезна для идентификации того, что именно делают потоки внутри процесса. Для доступа к символам вы должны установить Debugging Tools. Потом щелкнуть Options, выбрать Configure Symbols и набрать подходящий путь Symbols. Например: Рис. 3. Выбор пути места нахождения символов При запуске Process Explorer по умолчанию выводит список процессов в верхней половине окна, а список открытых описателей для выбранного на данный момент процесса — в нижней половине. Если вы задержите курсор мыши над именем процесса, Process Explorer также показывает описание образа, название компании и полный путь. Рис. 4. Окно Process Explorer Вот как использовать некоторые базовые возможности Process Explorer: 59 1. Отключите нижнюю секцию, сбросив View, Show Lower Pane. (Нижняя секция может отображать открытые описатели или проецируемые DLL и файлы). 2. Процессы, являющиеся хостами сервисов, по умолчанию выделяются розовым цветом. Ваши собственные процессы выделяются синим. (Эти цвета можно настроить.) 3. Задержите курсор мыши над именем образа и в подсказке отображается полный путь. 4. Щелкните View, Select Columns и добавьте путь образа. 5. Отсортируйте по колонке процессов и вы увидите, что представление в виде дерева исчезло. (Вы можете либо вывести представление в виде дерева, либо сортировать по любой из отображаемых колонок.) Снова щелкните для сортировки по алфавиту в обратном порядке (от Z к А). После этого очередной щелчок вернет представление в виде дерева. 6. Сбросьте View, Show Processes From All Users для отображения только ваших процессов. 7. Перейдите в Options, Difference Highlight Duration и смените значение на 5 секунд. Потом запустите новый процесс (какой угодно) и обратите внимание на то, что этот процесс выделяется зеленым в течение 5 секунд. Закройте новый процесс и заметьте, что этот процесс выделяется красным в течение 5 секунд, прежде чем исчезнуть из древовидного списка. Эта функция может пригодиться для обнаружения создаваемых и завершаемых процессов в системе. 8. Дважды щелкните какой-нибудь процесс и изучите вкладки, доступные в окне свойств процесса. ЭКСПЕРИМЕНТ 4. Наблюдение за активностью потоков с помощью QuickSlice. QuickSlice позволяет в динамике наблюдать за соотношением времени, проведенного каждым процессом в режиме ядра и в пользовательском режиме. Ha диаграмме красная часть столбца отражает количество процессорного времени в режиме ядра, а синяя — в пользовательском режиме. Сумма всех показателей, отображаемых столбцами в окне QuickSlice, должна соответствовать 100 % процессорного времени. Для запуска QuickSlice щелкните кнопку Start (Пуск), выберите команду Run (Выполнить) и введите Qslice.exe (в переменной PATH должен быть указан путь к ресурсам Windows). Например, попробуйте запустить такое интенсивно использующее графику приложение, как Paint (Mspaint.exe). Откройте QuickSlice, расположив его окно рядом с окном Paint, и нарисуйте в Paint несколько кривых. B это время вы сможете наблюдать за выполнением Mspaint.exe в окне QuickSlice, как показано ниже. 60 Рис. 5. Окно программы QuickSlice Чтобы получить дополнительную информацию о потоках процесса, дважды щелкните имя нужного процесса или соответствующий цветной столбик на диаграмме. Вы увидите список потоков этого процесса и относительное процессорное время, используемое каждым потоком (в рамках процесса, а не всей системы). Рис. 6. Дополнительная информация о потоках приложения ЭКСПЕРИМЕНТ 5. Режим ядра и пользовательский режим. C помощью оснастки Performance вы можете выяснить, сколько времени ваша система работает в режиме ядра и в пользовательском режиме. Нужно запустить Системный монитор через Панель управления ->Администрирование- > Системный монитор. 61 Рис. 7. Запуск системного монитора 1. Далее щелкнуть на объект процессор и выбрать 2 счетчика: %работа в привилегированном режиме и %работа в пользовательском режиме. Нажать на кнопку Добавить. 2. Быстро подвигайте мышью. При этом вы должны заметить всплеск на линии % Privileged Time, который отражает время, затраченное на обслуживание прерываний от мыши, и время, понадобившееся подсистеме поддержки окон на отрисовку графики (эта подсистема работает преимущественно как драйвер устройства в режиме ядра). 3. Закончив, щелкните на панели инструментов кнопку New Counter Set (Новый набор счетчиков) (или просто закройте оснастку). За той же активностью можно понаблюдать через Task Manager (Диспетчер задач). Просто перейдите в нем на вкладку Performance (Быстродействие), а затем выберите из меню View (Вид) команду Show Kernel Times (Вывод времени ядра). Процент загруженности процессора отражается зеленым цветом, а процент времени работы в режиме ядра — красным. Чтобы увидеть, как сама оснастка Performance использует время в двух режимах, запустите ее снова, но добавьте те же счетчики для объекта Process (Процесс). 1. Если вы закрыли оснастку Performance, снова запустите ее. (Если она уже работает, откройте новый экран, щелкнув на панели инструментов кнопку New Counter Set.) 2. Щелкните кнопку Add на панели инструментов. 3. Выберите в списке объект Process. 4. Выберите счетчики % Privileged Time и % User Time. 5. B списке экземпляров объекта выберите все процессы (кроме процесса _Total). 6. Щелкните кнопку Add, а затем Close. 7. Быстро подвигайте мышью. 8. Нажмите комбинацию клавиш Ctrl+H для активизации режима выделения — текущий выбранный счетчик будет выделен белым цветом в Windows 2000 и черным в Windows XP или Windows Server 2003. 62 Рис. 8. Отображение на графике прерываний от мыши 9. Прокрутите список всех счетчиков в нижней части окна оснастки, чтобы определить процессы, потоки которых выполнялись при перемещении мыши, и обратите внимание на то, в каком режиме они выполнялись — пользовательском или ядра. ЭКСПЕРИМЕНТ 6: отображение информации о типах для структур ядра Чтобы вывести список структур ядра, чья информация о типах включена в символы ядра, нужно запустить через командную строку утилиту Livekd из пакета SysinternalsSuite (Debugging Tools for Windows (x86)). Далее введите команду dt nt!_*. Пример части вывода показан ниже: kd> dt nt!_* --------------------- ntoskrnl!_MMVIEW ntoskrnl!_MEMORY_CACHING_TYPE_ORIG ntoskrnl!_EXCEPTION_DISPOSITION ntoskrnl!_EXCEPTION_RECORD ntoskrnl!_CONTEXT ntoskrnl!_POOL_TRACKER_BIG_PAGES ntoskrnl!_VI_DEADLOCK_RESOURCE ntoskrnl!_VI_DEADLOCK_THREAD ntoskrnl!_FLOATING_SAVE_AREA ntoskrnl!_IMAGE_DATA_DIRECTORY ntoskrnl!_PCI_PDO_EXTENSION ntoskrnl!_PCI_MJ_DISPATCH_TABLE ntoskrnl!_PCI_SLOT_NUMBER ntoskrnl!_PCI_FDO_EXTENSION ntoskrnl!_PCI_LOCK ntoskrnl!_PCI_PMC Команда dt позволяет искать конкретные структуры по шаблонам. Например, если вы ищете имя структуры для объекта прерывания (interrupt object), введите dt nt!_*interrupt*: kd> dt nt!_*interrupt* ntoskrnl!_KINTERRUPT 63 ntoskrnl!_KINTERRUPT_MODE После этого с помощью команды dt можно отформатировать эту структуру: Рис. 9. Форматирование структуры с помощью команды dt По умолчанию dt не показывает подструктуры (структуры внутри структур). Для рекурсивного прохода по подструктурам, используйте ключ — r. Например, указав этот ключ для отображения объекта ядра «прерывание», вы увидите формат структуры _LIST_ENTRY, хранящейся в поле InterruptListEntry: Рис. 10. Использование параметра -r команды dt ЭКСПЕРИМЕНТ 7: определение типа подсистемы, для которой предназначен исполняемый файл Вы можете определить, для какой подсистемы предназначен исполняемый файл с помощью утилиты Exetype из набора ресурсов Windows или утилиты DependencyWalker (Depends.exe), входящей в состав Windows Support Tools и Platform SDK. (Чтоб использовать утилиту Exetype, нужно запустить ее через командную строку). Попробуем, например, выяснить тип подсистемы для двух принципиально разных Windows-образов: Notepad.exe (простого текстового редактора) и Cmd.exe (поддержки командной строки Windows). C:\Documents and Settings\Admin\exetype>Exetype C:\WINDOWS\system32\notepad.exe File "C:\WINDOWS\system32\notepad.exe" is of the following type: Windows NT 32 bit machine Built for the Intel 80386 processor Runs under the Windows GUI subsystem 64 C:\Documents and Settings\Admin\exetype>Exetype C:\WINDOWS\system32\cmd.exe File "C:\WINDOWS\system32\cmd.exe" is of the following type: Windows NT 32 bit machine Built for the Intel 80386 processor Runs under the Windows character-based subsystem Это показывает, что Notepad является GUI-программой, a Cmd — консольной, или программой текстового режима. ЭКСПЕРИМЕНТ 8: просмотр установленных драйверов устройств Чтобы вывести список установленных драйверов нужно выполнить команду «Пуск» → «Стандартные» → «Служебные» → «Сведения о системе» → «Программная среда» → «Системные драйверы» или «Пуск» → «Выполнить» далее в появившейся командной строке нужно набрать msinfo32. Выбираем «Программная среда» →«Системные драйверы». Рис. 11. Список системных драйверов B этом окне выводится список драйверов, определенных в реестре, а также их тип и состояние — работает или нет. Драйверы устройств и процессы Windows- сервисов определяются в разделе реестра HKLM\SYSTEM\CurrentControlSet\Services. Однако они отличаются по коду типа. Список загруженных в текущий момент драйверов можно просмотреть и с помощью утилиты Drivers (Drivers.exe в ресурсах Windows 2000) или Pstat (Pstat.exe в Windows XP Support Tools, Windows Server 2003 Support Tools, ресурсах Windows 2000 и Platform SDK). Ниже приведен листинг части выходной информации утилиты Pstat. 65 Рис. 12. Листинг части выходной информации Pstat Программа Pstat запускается из командной строки. Для перенаправления полученных сведений в файл используется следующая команда: pstat.exe > имя_файла. Утилита Drivers перечисляет все загруженные компоненты режима ядра (Ntoskrnl, HAL и драйверы устройств) и сообщает размеры разделов в каждом образе. Pstat выводит список загруженных драйверов, но только после списка процессов и потоков в каждом процессе. Она показывает один вид очень важной информации, не сообщаемой утилитой Drivers: адрес загрузки модуля в системном пространстве. Этот адрес нужен для увязки выполняемых системных потоков с драйвером, в котором они существуют. ЭКСПЕРИМЕНТ 9: увязка системного потока с драйвером устройства B этом эксперименте мы посмотрим, как увязать активность процессора в процессе System с системным потоком (и драйвером, к которому он относится), вызывающим эту активность. Это важно: чтобы по-настоящему понять, что происходит, нужно перейти на уровень потоков процесса System. B данном случае мы вызовем активность системного потока, создав нагрузку файлового сервера на компьютере. (Драйвер файл-сервера Srv.sys создает системные потоки для обработки входящих запросов на файловый ввод-вывод.) 1. Откройте окно командной строки. 2. Создайте список всех каталогов на диске С, используя сетевой путь для доступа к этому диску. Например, если имя вашего компьютера — COMPUTERl, введите dir \\computerl\c$ /s. (Ключ/s заставляет перечислять все подкаталоги.) 3. Запустите Process Explorer и дважды щелкните процесс System. 4. Откройте вкладку Threads. 66 5. Отсортируйте список по столбцу CSwitch Delta (разница по числу переключений контекста). Вы должны увидеть один или более потоков в Srv.sys, как показано на следующей иллюстрации. Рис. 13. Список потоков выбранного процесса Если вы видите работающий системный поток и не уверены, какой это драйвер, нажмите кнопку Module, которая открывает окно свойств для файла. Например, нажатие кнопки Module при выбранном, как на предыдущей иллюстрации, потоке в Srv.sys выводит результаты в следующем окне. 67 Рис. 14. Свойства выбранного файла ЭКСПЕРИМЕНТ 10: вывод списка установленных сервисов Чтобы вывести список установленных сервисов (служб), дважды щелкните значок Administrative Tools (Администрирование) в окне Control Panel (Панель управления) и выберите Services (Службы). Вы должны увидеть что-нибудь в таком роде: Рис. 15. Список служб Для просмотра детальных сведений о сервисе щелкните правой кнопкой мыши имя сервиса и выберите команду Properties (Свойства). Ниже показан пример окна свойств для службы Print Spooler (Диспетчер очереди печати). 68 Рис. 16. Свойства выбранной службы Обратите внимание, что поле Path To Executable (Исполняемый файл) указывает на программу, включающую данный сервис. Помните, что некоторые сервисы разделяют процессы с другими сервисами, поэтому число сервисов и используемых ими процессов не всегда находится в соотношении «один к одному» ЭКСПЕРИМЕНТ 11: исследование диспетчера объектов Инструменты для просмотра базы данных диспетчера объектов: • Winobj из sysinternals. Она показывает пространство имен диспетчера объектов, сообщает более детальную информацию об объектах (например, счетчик ссылок, число открытых описателей, дескрипторы защиты и т. д.). • Process Explorer и Handle. Отображают открытые описатели для процесса. • Oh.exe (имеется в ресурсах Windows) выводит открытые описатели для процесса, но требует предварительной установки специального глобального флага. • Команда Openfiles /query (в Windows XP и Windows Server 2003) отображает открытые описатели для процесса, но требует предварительной установки специального глобального флага. • Команда !handle отладчика ядра отображает открытые описатели для процесса. Средство просмотра объектов WinObj позволяет изучить пространство имен, поддерживаемое диспетчером объектов (имена есть не у всех объектов). 69 Рис. 17. Использование утилиты WinObj Утилита OH и команда Openfiles /query требуют установки глобального флага «поддержка списка объектов» (maintain objects list). OH установит этот флаг, если он еще не задан. Чтобы узнать, включен ли данный флаг, введите Openfiles /Local. Вы можете включить его командой Openfiles /Local ON. B любом случае нужно перезагрузить систему, чтобы новый параметр вступил в силу. Ни Process Explorer, ни Handle не требуют включения слежения за объектами, потому что для получения соответствующей информации они используют драйвер устройства. ЭКСПЕРИМЕНТ 12: просмотр именованных базовых объектов Список именованных базовых объектов можно просмотреть с помощью утилиты Winobj. Запустите Winobj.exe и щелкните каталог \BaseNamedObjects, как показано ниже. 70 Рис. 18. Список именованных базовых объектов Именованные объекты отображаются справа. Тип объектов обозначается следующими значками: • «stop» — мьютексы; • в виде микросхем памяти — разделы (объекты «проекция файла»); • в виде восклицательного знака — события; • похожие на светофоры — семафоры; • в виде изогнутой стрелки — символьные ссылки. |