Главная / Cоветы ПК / Внутреннее устройство Windows.

Внутреннее устройство Windows.

Утилита Process Explorer  показывает информацию о процессах и потоках,запущенных на Вашем компьютере.Эта утилита показывает намного больше ,чем любой другой доступный инструмент такого рода,вот почему она используется  во многих экспериментах.

Ниже перечислены некоторые уникальные сведения,выводимые утилитой Process Explorer,и ее возможности:

*полное имя (вместе с путем) выполняемого образа;
*маркер защиты процесса (список групп и привилегий);
*выделение изменений в списке процессов и потоков;
*список сервисов внутри процессов — хостов сервисов с выводом отображаемого имени (display name) и описания;
*процессы,которые являются частью задания,и детальные сведения о заданиях;

*процессы,выполняющие.NET/WinFX-приложения,и сведения,специфичные для .NET (например,список доменов приложений и счетчики производительности,относящиеся к CLR);
*время запуска процессов и потоков;
*полный список файлов,проецыруемых в память (не только DLL-модулей);
*возможность приостановки процесса;*возможность принудительного завершения индивидуальных потоков;
*простота выявления процессов,использующих наибольшую долю процессорного времени за определенный период.(Оснастка Performance позволяет просматривать процент использования процессора для заданого набора процессов,но не показывает автоматически процессы,созданные после начала сеанса мониторинга.)

Process Explorer также упрощает доступ к информации,предоставляемой другими утилитами,создавая единую точку просмотра:
*Дерево процессов с возможностью свертывания отдельных частей этого дерева;
*открытые описатели в процессе без предварительной настройки (утилиты Microsoft для вывода открытых описателей требуют предварительной установки общесистемного флага и перезагрузки);
*список DLL (и файлов,проецируемых в память) в каком-либо процессе;
*активность потоков в каком-либо процессе;
*стеки потоков пользовательского режима (с сопоставлением адресов именам,используя механизм поддержки символов для инстументов отладки);
*стеки системных потоков режима ядра (с сопоставлением адресов именам,используя механизм поддержки символов для инстументов отладки);
*разница в переключении контекстов (context switch delta);
*лимиты памяти режима ядра (пулов пулов подкачиваемой и неподкачиваемой памяти)(остальные утилиты показывают только текущие размеры).

Скачайте Process Explorer по следующей ссылке Process Explorer и запустите его.При первом запуске вы увидите сообщение о том,что на данный момент символы не сконфигурированы,Process Explorer может обращаться к символьной информации для отображения символьного имени стартовой функции потока и функций в его стеке вызовов (для этого нужно щелкнуть процесс и выбрать вкладку Threads).Эта информация полезна для идентификации того,что именно делают потоки внутри процесса.Для доступа к символам вы должны установить Debugging Tools.Потом щелкнуть Options,выбрать Configure Symbols и набрать подходящий путь Symbols.
При запуске Process Explorer по умолчанию выводит список процессов в верхней половине окна,а список открытых описателей для выбраного на данный момент процесса — в нижней половине.Если вы задержите курсор мыши над именем процесса,Process Explorer также показывает описание образа,название компании и полный путь.
Вот как использовать некоторые базовые возможности Process Explorer:
1.Отключите нижнюю секцию,сбросив View,Show Lower Pane.(Нижняя секция может отображать открытые описатели или проецируемые DLL и файлы.)
2.Обратите внимание на то,что процессы,являющиеся хостами сервисов,по умолчанию выделяются розовым цветом.Ваши собственные процессы выделяются синим.
3.Задержите курсор мыши над именем образа и обратите внимание на то,что в подсказке отображается полный путь.
4.Щелкните View,Select Columns и добавьте путь образа.
5.Отсортируйте по колонке процессов и вы увидите,что представление в виде дерева исчезло.
6.Сбросьте View,Show Process From All Users для отображения только ваших процессов.
7.Перейдите в Options,Difference Highlight Duration и смените значение на 5 секунд.Потом запустите новый процесс (какой угодно) и обратите внимание на то,что этот процесс выделяется зелёным в течение 5 секунд.Закройте новый процесс и заметьте,что этот процесс выделяется красным в течение 5 секунд,прежде чем исчезнуть из древовидного списка.Эта функция может пригодиться для обнаружения создаваемых и завершаемых процессов в системе.
8.Наконец,дважды щелкните какой-нибудь процесс и изучите вкладки,доступные в окне свойств процесса.(Эти вкладки понадобятся нам в дальнейших экспериментах.)
Поток (Thread) — некая сущность внутри процесса,получающая процессорное время для выполнения.Без потока программа процесса не может выполнятся.Поток включает следующие наиболее важные элементы:
*содержимое набора регистров процессора,отражающих состояние процессора;
*два стека,один из которых используется потоком при выполнении в режиме ядра,а другой — в пользовательском режиме;
*закрытую область памяти,называемую локальной памятью потока (thread-local storage,TLS) и используемую подсистемами,библиотеками исполняющих систем (run-time libraries) и DLL;

*уникальный идентификатор потока (во внутрисистемной терминологии также называемый идентификатором клиента:идентификаторы процессов и потоков генерируются из одного пространства имен и никогда не перекрываются);
*иногда потоки обладают своим контекстом защиты,который обычно используется многопоточными серверными приложениями,подменяющими контекст защиты обслуживаемых клиентов.
Переменные регистры,стеки и локальные области памяти называются контекстом потока.Поскольку эта информация различна на каждой аппаратной платформе,на которой может работать Windows,соответствующая структура данных специфична для конкретной платформы.Windows-функция GetThreadContext предоставляет доступ к этой аппаратно-зависимой информации (называемой блоком CONTEXT).
Волокна (fibers) позволяют приложениям планировать собственные потоки выполнения,не используя встроенный механизм планирования потоков на основе приоритетов.Волокна часто называют «облегченными» потоками.Они невидимы ядру,так как Kernel32.dll реализует их в пользовательском режиме.Для использования волокна нужно вызвать Windows-функцию ConvertThreadToFiber,которая преобразует поток в волокно.Полученое волокно может создавать дополнительные волокна через функцию CreateFiber (у каждого волокна может быть свой набор волокон).Выполнение волокна (в отличие от потока) не начинается до тех пор,пока оно не будет вручную выбрано вызовом SwitchToFiber.Волокно работает до завершения или до переключения процессора на другое волокно вызовом все той же SwitchToFiber.
Хотя у потоков свой контекст выполнения,каждый поток внутри одного процесса делит его виртуальное адресное пространство (а также остальные ресурсы,принадлежащие процессу).Это означает,что все потоки в процессе могут записывать и считывать содержимое памяти любого из потоков данного процесса.Однако потоки не могут случайно сослаться на адресное пространство другого процесса.Исключение возможно в ситуации,когда тот предоставляет часть своего адресного пространства как раздел общей памяти (shared memory section),в Windows API называемый объектом проекция файла (file mapping object),или когда один из процессов имеет право на открытие другого процесса и использует функции доступа к памяти между процессами,например ReadProcessMemory и WriteProcessMemory.
Кроме закрытого адрессного пространства и одного или нескольких потоков у каждого процесса имеются идентификация защиты и список открытых описателей таких объектов,как файлы и разделы общей памяти,или синхронизирующих объектов вроде мьютексов,событий и семафоров.
Каждый процесс обладает контекстом защиты,который хранится в объекте — маркере доступа.Маркер доступа содержит идентификацию защиты и определяет полномочия данного процесса.По умолчанию у потока нет собственного маркера доступа,но он может получить его,и это позволяет ему подменять контекст защиты другого процесса (в том числе выполняемого на удаленной системе Windows).
Дескрипторы виртуальных адресов (Virtual address descriptors,VAD) — это структуры данных,используемые диспетчером памяти для учета виртуальных адресов,задействованных процессом.
Windows предоставляет расширение для модели процессов — задания (jobs).Они предназначены в основном для того,чтобы группами процессов можно было оперировать и управлять как единым целым.Объект-задание позволяет устанавливать определенные атрибуты и накладывать ограничения на процесс или процессы,сопоставленные с заданием.В этом объекте также хранится информация обо всех процессах,которые были сопоставлены с заданием,но к настоящему времени уже завершены.В каких-то отношениях объект-задание компенсирует отсуствие иерархического дерева процессов в Windows,а в каких-то — даже превосходит по своим возможностям дерево процессов UNIX.

[note]P.P.S. Если у Вас есть вопросы, желание прокомментировать или поделиться опытом, напишите, пожалуйста, в комментариях ниже.[/note]

Оставить комментарий

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*