Управление процессами в ос windows. Управление процессами ОС Windows с помощью диспетчера задач. Понятие объекта в Windows

  • 03.11.2019

Кафедра информатики

Реферат


    Средства управления процессами в ОС Windows

Task Manager (Диспетчер задач) - это один из самых мощных и удобных инструментов в WinNT/2000/XP/2003/Vista, предназначенных для управления процессами. Вызывается он либо Ctrl+Shift+Esc, либо Ctrl+Alt+Del, либо выбором в меню, появляющимся после нажатия правой кнопкой на панели задач. C помощью этой утилиты можно в режиме реального времени отслеживать выполняющиеся приложения и запущенные процессы, оценивать загруженность системных ресурсов компьютера и использование сети.

Открывшееся окно содержит четыре закладки, отвечающие четырем видам активности, которые отслеживает ^ Диспетчер: приложения, процессы, быстродействие (использование системных ресурсов) и Сеть .

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

Если на компьютере не запущены никакие пользовательские программы, то ^ Диспетчер задач должен содержать только служебные процессы операционной системы, установленной на компьютере.

Для каждого процесса выводятся его параметры: имя образа (как правило совпадает с именем запускаемого файла), имя пользователя (от ч
ьего имени был запущен процесс), центрального процессора (колонка ЦП ) и объем занимаемой им оперативной памяти .

В ряде случаев может потребоваться вручную завершить некий процесс. Это можно сделать с помощью кнопки ^ Завершить процесс . Кроме этого, с любым из этих процессов можно произвести вполне определённые действия. Для этого надо просто нажать на нём правой кнопкой мыши, появится контекстное меню, через которое можно закончить, «убить» процесс (Завершить процесс ), можно убить сам процесс, и все остальные, которые он «породил» (Завершить дерево процессов ). Можно выставить приоритет процессу, от высшего (Реального времени ) до самого низкого (Низкий ). Если на машине установлено два процессора и многопроцессорное ядро, то в этом меню появляется ещё один пункт - Задать соответствие , который позволяет перевести процесс на другой процессор - Cpu 0, Cpu1, и так далее до Cpu31.

Столбец Имя пользователя – показывает для каждого процесса данные о том, каким пользователем он запущен. Процессы с именами пользователя SYSTEM, LOCAL SERVICE, NETWORK SERVICE запускаются операционной системой и являются самыми важными (они заботятся о корректном распознавании устройств, отвечают за работу брандмауэра и управляют передачей данных через Интернет). Другие процессы отображаются под именем пользователя, зашедшего в систему. Это означает, что они относятся к программе, которая была запущена этим пользователем, например к текстовому процессору Word или ICQ-клиенту.

Столбец ЦП показывает, насколько процессор загружен конкретным процессом. Нормальной величиной для большинства процессов является загрузка менее 20%. Если же процессы загружают ЦП на 50–99%, то за ними скрываются или очень ресурсоемкие программы или программы-вредители.

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

Следующая закладка Диспетчера - Приложения , позволяет просмотреть список работающих приложений, и «убить» любое из них. Для этого нужно кликнуть по кнопке Снять задачу . Диспетчер позволяет не только «убивать» приложения, он может также запускать новые приложения: Файл -> Новая задача (Выполнить..).

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

Литература


  1. Андреев А.Г. и др. XP: Home Edition и Professional. Русские версии/ Под общ. ред. А.Н.Чекмарева. –СПб.: БХВ-Петербург,2003

  2. Таненбаум Э. Современные операционные системы. 2-е изд. – СПб.: Питер, 2002.

  3. Фигурнов В.Э. IBM PC для пользователя// - Уфа: НПО «Информатика и компьютеры», 1993.

В отличие от «полуторазадачной» MS-DOS, которая оставляет прикладному программисту всю работу (и весь риск) организации параллельного функционирования процессов, многозадачные ОС предоставляют программисту более или менее удобный и богатый набор системных функций, позволяющих запустить несколько параллельных процессов и организовать их взаимодействие (синхронизацию процессов, обмен данными, взаимное исключение и т.п.). При этом ОС обязана гарантировать корректную и эффективную организацию переключения процессов, разделения между ними процессорного времени, памяти и других ресурсов.

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

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

Все версии Windows от 1.0 до 3.11 представляли собой достаточно мощные многозадачные системы с невытесняющей диспетчеризацией. Версии, начиная с Windows NT и Windows 95, используют вытесняющую диспетчеризацию.

Понятие объекта в Windows

В ОС Windows широко используется понятие системного объекта . По сути, любой объект представляет собой некоторую структуру данных, расположенную в адресном пространстве системы. Поскольку приложения не могут иметь доступа к этой памяти, то для работы с объектом приложение должно получить хэндл объекта – некоторое условное число, которое будет представлять данный объект при обращении к API-функциям. Процесс получает хэндл, как правило, при вызове функции CreateXxx (здесь Xxx – название объекта), которая может либо создать новый объект, либо открыть существующий объект, созданный другим процессом. Функции вида OpenXxx позволяют только открыть существующий объект.

Объекты Windows делятся на объекты ядра (KERNEL), позволяющие управлять процессами, объекты USER, описывающие работу с окнами, и объекты GDI, задающие графические ресурсы Windows. В данном курсе рассматриваются только объекты ядра. Процессы, нити и открытые файлы являются примерами объектов ядра.

Одной из отличительных особенностей объектов ядра являются атрибуты защиты , которые можно указать при создании объекта. Эти атрибуты определяют права доступа к объекту для различных пользователей и групп. Кроме того, при создании объекта ядра можно задать его имя, которое используется для того, чтобы другие процессы могли открыть тот же объект, зная его имя.

Хэндл объекта может быть использован только тем процессом, который создал или открыл этот объект. Нельзя просто переслать значение хэндла другому процессу, оно не будет действовать в другом контексте. Имеется, однако, функция DuplicateHandle, которая создает корректную копию хэндла, требуя указать для этого, какой процесс создает копию, какого именно хэндла и для какого процесса предназначена копия.

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

Объект существует до тех пор, пока не будут закрыты все хэндлы, указывающие на него.

Процессы и нити

Общее понятие процесса, рассмотренное выше в п. 4.2.1, для ОС Windows как бы распадается на два понятия: собственно процесса и нити (thread; в некоторых книгах используется термин поток ). При этом нить является единицей работы, она участвует в конкуренции за процессорное время, изменяет свое состояние и приоритет, как было описано выше для процесса. Что же касается процесса в Windows, то он может состоять из нескольких нитей, использующих общую память, открытые файлы и другие ресурсы, принадлежащие процессу. В двух словах: процесс – владеет (памятью, файлами), нити – работают, при этом совместно используя ресурсы своего процесса. Правда, нить тоже кое-чем владеет: окнами, очередью сообщений, стеком.

Процесс создается при запуске программы (EXE-файла). Одновременно создается одна нить процесса (должен же кто-то работать!). Создание процесса выполняется с помощью API-функции CreateProcess. Основными параметрами при вызове этой функции являются следующие.

· Имя файла запускаемой программы.

· Командная строка, передаваемая процессу при запуске.

· Атрибуты защиты для создаваемых процесса и нити. И процесс, и нить являются объектами ядра Windows и в этом качестве могут быть защищены от несанкционированного доступа (например, от попыток других процессов вмешаться в работу данного процесса).

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

· Блок среды процесса.

· Текущий каталог процесса.

· Параметры первого окна, которое будет открыто при запуске процесса.

· Адрес блока информации, через который функция возвращает родительскому процессу четыре числа: идентификатор созданного процесса, идентификатор нити, хэндл процесса и хэндл нити.

Если процесс успешно создан, функция CreateProcess возвращает ненулевое значение.

Класс приоритета процесса используется при определении приоритетов его нитей. Подробнее об этом в п. 4.5.3.

Хэндл объекта ядра Windows (в данном случае процесса или нити) позволяет выполнять различные операции с этим объектом. Подробнее о хэндлах и идентификаторах см. п. 4.5.4.

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

· атрибуты защиты для создаваемой нити;

· размер стека нити;

· стартовый адрес нити (обычно нить связывается с выполнением одной из функций, описанных в программе процесса, при этом в качестве стартового адреса указывается имя функции);

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

· флаг создания нити в приостановленном состоянии;

· указатель на переменную, в которой функция должна возвратить идентификатор созданной нити.

Возвращаемым значением функции CreateThread является хэндл созданной нити либо NULL, если создать нить не удалось.

Прекрасным примером многонитевой программы является Microsoft Word. В то время как основная нить обрабатывает ввод с клавиатуры, отдельная нить может динамически рассчитывать разбиение текста на страницы, еще одна нить может в это же время выполнять печать документа или его сохранение.

Для завершения работы нити используется вызов функции ExitThread. Для завершения работы всего процесса любая из его нитей может вызвать функцию ExitProcess. Единственным параметром каждой из этих функций является код завершения нити или процесса.

Завершение процесса приводит к освобождению всех ресурсов, которыми владел процесс: памяти, открытых файлов и т.п.

При завершении процесса завершаются все его нити. И наоборот, при завершении последней нити процесса завершается и сам процесс.

Не слишком широко известно, что нить не является самой мелкой единицей организации вычислений. На самом деле Windows позволяет создать внутри нити несколько волокон (fiber), которые в обычной терминологии могут быть описаны как сопрограммы или как задачи с невытесняющей диспетчеризацией, работающие в рамках одной и той же задачи с вытесняющей диспетчеризацией. Переключение волокон выполняется только явно, с помощью функции SwitchToFiber. Об использовании сопрограмм см. /15/.

Планировщик Windows

Задачей планировщика является выбор очередной нити для выполнения. Планировщик вызывается в трех случаях:

· если истекает квант времени, выделенный текущей нити;

· если текущая нить вызвала блокирующую функцию (например, WaitForMultipleObjects или ReadFile) и перешла в состояние ожидания;

· если нить с более высоким приоритетом пробудилась от ожидания или была только что запущена.

Для выбора нити используется алгоритм приоритетной очереди. Для каждого уровня приоритета система ведет очередь активных нитей (т.е. нитей, находящихся в состоянии готовности). Для выполнения выбирается очередная нить из непустой очереди с самым высоким приоритетом.

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

Значение кванта времени для серверных установок Windows равно обычно 120 мс, для рабочих станций – 20 мс.

Как вы думаете, почему для серверов квант времени больше?

Теперь подробнее о приоритетах. Хотя общая схема их назначения одинакова для всех версий Windows, детали могут разниться. Дальнейшее изложение ориентировано на Windows NT 4.0.

Все уровни приоритета нитей пронумерованы от 0 (самый низкий приоритет) до 31 (самый высокий). Уровни от 16 до 31 называются приоритетами реального времени , они предназначены для выполнения критичных по времени системных операций. Только сама система или пользователь с правами администратора могут использовать приоритеты из этой группы. Уровни от 0 до 15 называются динамическими приоритетами .

В Windows используется двухступенчатая схема назначения приоритетов. При создании процесса ему назначается (а впоследствии может быть изменен самой программой или пользователем) один из четырех классов приоритета , с каждым из которых связано базовое значение приоритета:

· Realtime (базовый приоритет 24) – высший класс приоритета, допустимый только для системных процессов, занимающих процессор на очень короткое время;

· High (базовый приоритет 13) – класс высокоприоритетных процессов;

· Normal (базовый приоритет 8) – обычный класс приоритета, к которому относится большая часть запускаемых прикладных процессов;

· Idle (базовый приоритет 4) – низший (буквально – «холостой» или «простаивающий») класс приоритета, характерный для экранных заставок, мониторов производительности и других программ, которые не должны мешать жить более важным программам.

Собственно приоритет связывается не с процессом, а с каждой его нитью. Приоритет нити определяется базовым приоритетом процесса, к которому прибавляется относительный приоритет нити – величина от –2 до +2. Относительный приоритет назначается нити при ее создании и может при необходимости изменяться. Имеется также возможность назначить нити критический приоритет (31 для процессов реального времени, 15 для остальных) или холостой приоритет (16 для процессов реального времени, 0 для остальных).

Для нитей процессов реального времени приоритеты являются статическими в том смысле, что система не пытается их изменять по своему усмотрению. Предполагается, что для этой группы процессов соотношение приоритетов должно быть именно таким, как задумал программист.

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

· Когда заблокированная нить дождалась нужного ей события, к приоритету нити прибавляется величина, зависящая от причины ожидания. Эта прибавка может достигать 6 единиц (но приоритет не должен превысить 15), если нить разблокирована вследствие нажатия клавиши или кнопки мыши. Таким способом система стремится уменьшить время реакции на действия пользователя. Всякий раз, когда нить полностью использует свой квант времени, прибавка уменьшается на 1, пока приоритет нити не вернется к своему заданному значению.

· Если нить владеет окном переднего плана (т.е. тем, с которым работает пользователь), то ради уменьшения времени реакции планировщик может увеличить квант времени для этой нити с 20 мс до 40 или 60 мс, в зависимости от настроек системы.

· Если планировщик обнаруживает, что некоторая нить пребывает в очереди более 3 с, то он повышает ее приоритет аж до 15 и удваивает ее квант. Но эта благотворительность разовая: когда Золушка-нить израсходует увеличенный квант или заблокируется, ее приоритет и квант возвращаются к прежним значениям. Смысл акции понятен: система пытается обеспечить хоть какое-то продвижение даже для низкоприоритетных нитей.

Процесс и нить как объекты

Подсистема управления процессами в Windows позволяет рассматривать процессы и нити как объекты, над которыми нити различных процессов могут выполнить целый ряд действий. Для этого требуется иметь хэндл процесса или нити. Как нам известно, такие хэндлы возвращаются как побочные результаты работы функций CreateProcess и CreateThread. Это позволяет процессу, запустившему другой процесс или нить, выполнять с ними необходимые действия. Однако в некоторых случаях желательно дать возможность управлять процессом не процессу-«родителю», а другому, совершенно постороннему процессу (например, программе администрирования системы). Проблема при этом в том, что, как уже отмечалось, хэндл в Windows имеет смысл только в пределах того процесса, который вызвал функцию Create и не может быть просто передан другому процессу.

Функция OpenProcess позволяет одному процессу получить хэндл любого другого процесса, указав для этого два параметра: идентификатор интересующего процесса и маску, задающую набор запрашиваемых прав по отношению к этому процессу. Если подсистема безопасности Windows, сверив маркер доступа запрашивающего процесса с дескриптором безопасности процесса-объекта (см. п. 3.8.4.1), сочтет запрос законным, то функция вернет требуемый хэндл.

А о каких, собственно, правах идет речь? Что именно один процесс может сделать с другим процессом? Основные права следующие:

· запускать новую нить процесса;

· запрашивать и изменять класс приоритета процесса;

· использовать процесс в качестве объекта синхронизации;

· принудительно прекращать выполнение процесса;

· запрашивать код завершения процесса.

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

Синхронизация нитей

Способы синхронизации

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

· Традиционной для Windows формой синхронизации является обмен сообщениями (messages). При этом, механизм сообщений предназначен не только для синхронизации, но и для обмена данными. Далее работа с сообщениями будет рассмотрена подробно.

· Разнообразные условия ожидания могут быть реализованы с помощью объектов синхронизации и функций ожидания , которые позволяют заблокировать нить до момента перехода указанного объекта в сигнальное состояние.

· Использование переменных типа CRITICAL_SECTION, в отличие от предыдущих способов, возможно только для синхронизации нитей одного и того же процесса, но зато реализуется более эффективно по времени и памяти.

Лекция 4. Управление процессами в ОС Windows NT Структура ОС Windows Подсистема Win 32 Объекты ядра Процессы и потоки в ОС Windows Планирование потоков 1 2/6/2018 1: 32: 29 PM

Структура ОС Windows 3 Первые версии системы имели микроядерный дизайн, основанный на микроядре Mach, которое было разработано в университете Карнеги. Меллона. Архитектура более поздних версий системы микроядерной уже не является. Большой объем системного кода (управление системными вызовами и экранная графика) был перемещен из адресного пространства пользователя в пространство ядра и работает в привилегированном режиме. 2/6/2018 1: 32: 30 PM

Структура ОС Windows 4 В результате в ядре ОС Windows переплетены элементы микроядерной архитектуры и элементы монолитного ядра (комбинированная система). Основные компоненты ядра Windows NT располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений (микроядерная архитектура) В тоже время все компоненты ядра работают в одном адресном пространстве и активно используют общие структуры данных, что свойственно 2/6/2018 1: 32: 30 PM операционным системам с монолитным ядром.

Подсистема Win 32 Приложение Text. Editor Монитор Основные компоненты Win 32: ntoskrnl. exe исполнительная система и ядро; ntdll. dll - внутренние функции поддержки и интерфейсы диспетчера системных сервисов с функциями исполнительной системы; hal. dll - уровень абстрагирования от оборудования; win 32 k. sys - часть подсистемы Win 32, работающая в режиме ядра; kernel 32. dll, advapi 32. dll, user 32. dll, gdi 32. dll - основные dll подсистемы Win 32 5 2/6/2018 1: 32: 30 PM

Системные вызовы в Win 32 При вызове приложением одной из Win 32 -функций может возникнуть одна из трех ситуаций: 1) Функция полностью выполняется внутри данной dll (шаг 1). 2) Для выполнения функции привлекается сервер csrss, для чего ему посылается сообщение (шаг 2 a, за которым обычно следуют шаги 2 b и 2 c). 3) Данный вызов транслируется в системный сервис (системный вызов), который обычно обрабатывается в модуле ntdll. dll (шаги 3 a и 3 b). Например, Win 32 -функция Read. File выполняется с помощью недокументированного сервиса Nt. Read. File 6 2/6/2018 1: 32: 31 PM

Объекты ядра Для работы с важными системными ресурсами ОС Windows создает объекты, управление которыми осуществляет менеджер объектов. Ядро поддерживает базовые объекты двух видов: объекты диспетчера (события, мьютексы, семафоры, потоки ядра, таймеры и др.) и управляющие (DPC, APC, прерывания, процессы, профили и др.) Над объектами ядра находятся объекты исполнительной системы, каждый из которых инкапсулирует один или более объектов ядра. Объекты исполнительной системы предназначены для управления памятью, процессами и межпроцессным обменом. К ним относятся такие объекты, как: процесс, поток, открытый файл, семафор, мьютекс, маркер доступа и ряд других (MSDN). Эти объекты и называются объектами ядра в руководствах по программированию. 7 2/6/2018 1: 32: 31 PM

Объекты ядра Внешнее отличие объектов ядра (объектов исполнительной системы) от объектов User и GDI состоит в наличии у первых атрибутов защиты, Далее эти объекты ядра (объекты исполнительной системы) будут называться просто объектами. Объект представляет собой блок памяти в виртуальном адресном пространстве ядра. Этот блок содержит информацию об объекте в виде структуры данных. Структура содержит как общие, так и специфичные для каждого объекта элементы. Объекты создаются в процессе загрузки и функционирования ОС и теряются при перезагрузке и выключении питания. Содержимое объектов доступно только ядру, приложение не может модифицировать его непосредственно. Доступ к объектам можно осуществить только через его функцииметоды (инкапсуляция данных), которые инициируются вызовами некоторых библиотечных Win 32 -функций. 8 2/6/2018 1: 32: 31 PM

Создание и мониторинг объектов ядра void __fastcall TForm 1: : Sm. Create. Click(TObject *Sender) { try { HANDLE r=Create. Semaphore(NULL, 1, 5, "My. Sem"); if (r) {Ansi. String msg="Semaphore was created"; LBConsole->Items->Add(msg); } else LBConsole->Items->Add("Error"); } catch (. . .) { } } void __fastcall TForm 1: : Sm. Open. Click(TObject *Sender) { try {HANDLE r=Open. Semaphore(SEMAPHORE_ALL_ACCESS, false, "My. Sem"); if (r) { Ansi. String msg="Semaphore was opened. "; LBConsole->Items->Add(msg); } else LBConsole->Items->Add("Error opended"); } catch (. . .) {} } Приложение Sem. Example 9 Приложение Winobj 2/6/2018 1: 32: 31 PM

Структура объекта. Методы объекта Каждый объект имеет заголовок с информацией, общей для всех объектов, а также данные, специфичные для объекта. Например, в поле заголовка имеется список процессов, открывших данный объект, и информация о защите, определяющая, кто и как может использовать объект. Счетчик ссылок на объект увеличивается на 1 при открытии объекта и уменьшается на 1 при его закрытии. 10 2/6/2018 1: 32 PM

Структура объекта. Методы объекта Квота устанавливает ограничения на объемы ресурсов. Например, по умолчанию лимит на открытые объекты для процесса - 230. Множество объектов делится на типы, а у каждого из объектов есть атрибуты, неизменные для объектов данного типа. Ссылка на тип объекта также входит в состав заголовка. В состав компонентов объекта типа входит атрибут методы указатели на внутренние процедуры для выполнения стандартных операций. Методы вызываются диспетчером объектов при создании и уничтожении объекта, открытии и закрытии описателя объекта, изменении параметров защиты. Система позволяет динамически создавать новые типы объектов. В этом случае предполагается регистрация его методов у диспетчера объектов. Например, метод open вызывается всякий раз, когда создается или открывается объект и создается его новый описатель. 11 2/6/2018 1: 32 PM

Описатели объектов Sem. Example Win. Obj Proc. Exp Создание новых объектов, или открытие по имени уже существующих, приложение может осуществить при помощи Win 32 -функций, таких, как Create. File, Create. Semaphore, Open. Semaphore и т. д. Это библиотечные процедуры, за которыми стоят сервисы Windows и методы объектов. В случае успешного выполнения создается 64 -битный описатель в таблице описателей процесса в памяти ядра. На эту таблицу есть ссылка из блока управления процессом EPROCESS 12 2/6/2018 1: 32 PM

Описатели объектов Из 64 -х разрядов описателя 29 разрядов используются для ссылки на блок памяти объекта ядра, 3 - для флагов, а оставшиеся 32 - в качестве маски прав доступа. Маска прав доступа формируется на этапе создания или открытия объекта, когда выполняется проверка разрешений. Таким образом, описатель объекта - принадлежность процесса, создавшего этот объект. По умолчанию он не может быть передан другому процессу. Тем не менее, система предоставляет возможность дублирования описателя и передачи его другому процессу специальным образом. Win 32 -функции, создающие объект, возвращают приложению не сам описатель, а индекс в таблице описателей, то есть малое число: типа 1, 2 а не 64 разрядное. Впоследствии это значение передается одной из функций, которая принимает описатель объекта в качестве аргумента. Одной из таких функций является функция Close. Handle, задача которой - закрыть объект. 13 2/6/2018 1: 32 PM

Создание объектов ядра Когда процесс инициализируется в первый paз, таблица описателей еще пуста. Но стоит одному из его потоков вызвать функцию, создающую объект ядра (например, Create. Ftle. Mapping), как ядро выделяет для этого объекта блок памяти и инициализирует его, далее ядро просматривает таблицу описателей, принадлежащую данному процессу, и отыскивает свободную запись. Вот некоторые функции, создающие объекты ядра: HANDLE Create. Thread(…), HANDEE Create. File(…), HANDLE Create. File. Mapping(…), HANDLE Create. Semaphore(…)… Все функции, создающие объекты ядра, возвращают описатели, которые привязаны к конкретному процессу и могут быть использованы в любом потоке данного процесса Значение описателя представляет собой индекс в таблице описателей, принадлежащей процессу, и таким образом идентифицирует место, где хранится информация, связанная с объектом ядра. Вот поэтому при отладке своего приложения и просмотре фактического значения описателя объекта ядра Вы и видите такие малые величины: 1, 2 и т. д. Но помните, что физическое содержимое описателей не задокументировано и может быть изменено. 14 2/6/2018 1: 32 PM

Защита объектов Объекты ядра можно защитить дескриптором защиты (security descriptor), который описывает, кто создал объект и кто имеет права на доступ к нему. Дескрипторы защиты обычно используют при написании серверных приложений; создавая клиентское приложение, Вы можете игнорировать это свойство объектов ядра. Почти все функции, создающие объекты ядра, принимают указатель на структуру SECURITY_ATTRIBUTES как аргумент, например: HANDLE Create. File. Mapping(HANDLE h. File. PSECURITY_ATTRIBUTES psa, DWORD fl. Protect, DWORD dw. Maximum. Size. High, DWORD dw. Maximuni. Size. Low, PCTSTR psz. Narne); Большинство приложений вместо этого аргумента передает NULL и создает объект с защитой по умолчанию. Такая защита подразумевает, что создатель объекта и любой член группы администраторов получают к нему полный доступ, а все прочие к объекту не допускаются 15 2/6/2018 1: 32 PM

Защита объектов Вы можете создать и инициализировать структуру SECURITY_ATTRIBUTES, а затем передать ее адрес. Она выглядит так: typedef struct _SECURITY_ATTRIBUTES { DWORD n. Length, LPVOID lp. Security. Descriptor; BOOL b. Inhertt. Handle; } SECURITY_ATTRIBUTES; Хотя структура называется SECURITY__ATTRIBUTES, лишь один ее элемент имеет отношение к защите - lp. Secunty. Descriptor. Если надо ограничить доступ к созданному Вами объекту ядра, создайте дескриптор защиты и инициализируйте структуру SECURITY_ATTRIBUTES следующим образом: SECURITY_ATTRIBUTES sa; sa. n. Length = sizeof(sa); // используется для выяснения версий sa. lp. Secunty. Descriptor = p. SD, // адрес инициализированной SD sa. b. Inherit. Handle = FALSE; // наследование объекта HANDLE h. File. Mapping = Create. File. Mapping(INVALID_HANDLE_VALUE, &sa, PAGE_REAOWRITE, 0, 1024, "My. File. Mapping"); 16 2/6/2018 1: 32 PM

Закрытие объекта ядра Независимо от того, как именно Вы создали объект ядра, по окончании работы с ним его нужно закрьпь вызовом Close. Handle: BOOL Close. Handle(HANDLE hobj); Эта функция сначала проверяет таблицу описателей, принадлежащую вызывающему процессу, чтобы убедиться, идентифицирует ли переданный ей индекс (описатель) объект, к которому этот процесс действительно имеет доступ. Если переданный индекс правилен, система получает адрес структуры данных объекта и уменьшает в этой структуре счетчик числа пользователей; как только счетчик обнулится, ядро удалит объект из памяти. Если же описатель невереи, происходит одно из двух. В нормальном режиме выполнения процесса Close. Handle возвращает FALSE, a Get. Last. Error - код ERROR_INVALID_HANDLE. Но при выполнении процесса в режиме отладки система просто уведомляет отладчик об ошибке. 17 2/6/2018 1: 32 PM

Именование объектов. Разделяемые ресурсы Многие объекты в системе имеют имена. Именование объектов удобно для учета объектов и поиска нужного объекта. Кроме того, знание имени объекта может быть использовано процессом для получения к нему доступа (совместное использование ресурсов). Пространство имен объектов организовано в виде древовидной иерархической системы. В качестве нетерминальной вершины дерева используется объект "каталог объектов". Каталог включает информацию, необходимую для трансляции имен объектов в указатели на сами объекты. Именование допускают многие (но не все) объекты ядра. Например, следующие функции создают именованные объекты ядра HANDLE Create. Mutex(… PCTSTR psz. Name); HANDLE Create. Event(… PCTSTR psz. Name); HANDLE Create. Semaphore(… PCTSTR psz. Name); HANDLE Create. Job. Object(…PCTSTR psz. Name); Последний параметр, psz. Name, у всех этих функций одинаков. Передавая в нем NULL, Вы создаете безымянный (анонимный) объект ядра. В этом случае Вы можете разделять объект между процессами либо через наследование, либо с помощью Duplicate. Handle. А чтобы разделять объект по имени, Вы должны присвоить ему какое-нибудь имя. Тогда вместо NULL в параметре psz. Name нужно передать адрес строки с именем, завершаемой нулевым символом. 18 2/6/2018 1: 32 PM

Совместное использование объектов Иногда у приложений возникает необходимость в разделении ресурсов. В ОС Windows обычно это имеет следствием совместное использование объектов, стоящих за этими ресурсами. Наиболее распространенный вариант - когда двум или более процессам известно имя разделяемого объекта. В этом случае один из процессов создает объект (например, с помощью функции Create. Semaphore), а остальные открывают его для себя (например, с помощью функции Open. Semaphore). 19 2/6/2018 1: 32 PM

Процессы и потоки в ОС Windows Процесс является динамическим объектом, описывающим выполнение программы. В Windows NT процесс – это объект, создаваемый и уничтожаемый менеджером объектов. Процесс содержит потоки, учетную информацию и ссылки на системные ресурсы: закрытое адресное пространство, семафоры, коммуникационные порты, файлы и т. д. Процесс характеризуется текущим состоянием (выполнение, ожидание, готовность и т. д.) , которые обобществляются всеми потоками процесса. Задача ОС состоит в том, чтобы организовать их поддержку, которая подразумевает, что каждый процесс получит все необходимые ему ресурсы; Независимые процессы не должны влиять друг на друга, а процессы, которым необходимо обмениваться информацией, должны иметь возможность сделать это путем межпроцессного взаимодействия. 21 2/6/2018 1: 32: 33 PM

Процессы и потоки в ОС Windows Для описания процесса ОС поддерживает набор структур, главную из которых принято называть блоком управления процессом (PCB, Process control block). Состав PCB: идентификатор процесса; токен доступа - исполняемый объект, содержащий информацию о безопасности; базовый приоритет - основа для исполнительного приоритета нитей процесса; процессорная совместимость - набор процессоров, на которых могут выполняться нити процесса; предельные значения квот - максимальное количество страничной и нестраничной системной памяти, дискового пространства, предназначенного для выгрузки страниц, процессорного времени - которые могут быть использованы процессами пользователя; время исполнения - общее количество времени, в течение которого выполняются все нити процесса. 22 2/6/2018 1: 32: 33 PM

Внутреннее устройство процессов в ОС Windows Proc. Exp Блок управления процессом (PCB) реализован в виде набора связанных структур, главная из которых называется блоком процесса EPROCESS. 23 2/6/2018 1: 32: 33 PM

Создание процесса Обычно процесс создается другим процессом вызовом Win 32 -функции Create. Process. Создание процесса осуществляется в несколько этапов: 1) на диске отыскивается нужный файл-образ, после чего создается объект "раздел" памяти для проецирования на адресное пространство нового процесса (kernel 32. dll); 2) выполняется обращение к системному сервису Nt. Create. Process для создания объекта "процесс". Формируются блоки EPROCESS, KPROCESS и блок переменных окружения PEB. Менеджер процессов инициализирует в блоке процесса маркер доступа (копируя аналогичный маркер родительского процесса), идентификатор и другие поля; 3) создание первичного потока (сервис Nt. Create. Thread, библиотека kernel 32. dll); 4) kernel 32. dll посылает подсистеме Win 32 сообщение, которое содержит информацию, необходимую для выполнения нового процесса. Данные о процессе и потоке помещаются, в список процессов и список потоков данного процесса, затем устанавливается приоритет процесса, создается структура, используемая частью Win 32, которая работает в режиме ядра, и т. д. ; 5) запускается первичный поток, для чего формируются его начальный контекст и стек, и выполняется запуск стартовой процедуры потока режима ядра Ki. Thread. Startup. После этого стартовый код из библиотеки C/C++ передает управление функции main() запускаемой программы. 24 2/6/2018 1: 32: 34 PM

Создание процесса. Функция Create. Process BOOL Create. Process(PCTSTR psz. Application. Name, //имя программы; PTSTR psz. Command. Line, //параметры командной строки; SECURITY_ATTRIBUTES psa. Process, //атрибуты безопасности процесса; PSECURITY_ATTRIBUTES psa. Thread, //атрибуты безопасности главного потока; BOOL b. Inherit. Handles, //- если b. Inherit. Handles == TRUE, то созданный процесс (запущенная программа), наследует дескрипторы (handles) запускающей программы; DWORD fdw. Creation. Flags, //- параметры создания. Здесь можно указать класс приоритета создаваемого процесса и некоторые дополнительные параметры; PVOID pv. Environment, // - указатель на блок окружения или NULL, тогда используется блок окружения родителя; PCTSTR psz. Cur. Dir, // текущая директория или NULL, тогда используется текущая директория родителя; PSTARTUPINFO psi. Start. Info, //- указатель на структуру STARTUPINFO, которая определяет положение главного окна; PPROCESS_INFORMATION ppi. Proc. Info //информация о созданном процессе.); 25 2/6/2018 1: 32: 34 PM

Создание процесса (пример) #include #include void main(VOID) { STARTUPINFO Startup. Info; PROCESS_INFORMATION Proc. Info; TCHAR Command. Line = TEXT(“format c: "); Zero. Memory(&Startup. Info, sizeof(Startup. Info)); Startup. Info. cb = sizeof(Startup. Info); Zero. Memory(&Proc. Info, sizeof(Proc. Info)); if(!Create. Process(NULL, // Не используется имя модуля Command. Line, // Командная строка NULL, // Дескриптор процесса не наследуется. NULL, // Дескриптор потока не наследуется. FALSE, // Установка описателей наследования 0, // Нет флагов создания процесса NULL, // Блок переменных окружения родит. процесса NULL, // Использовать текущий каталог родит. процесса &Startup. Info, // Указатель на структуру STARTUPINFO. &Proc. Info) // Указатель на структуру информации о процессе.) } 26 printf("Create. Process failed. "); // Ждать окончания дочернего процесса Wait. For. Single. Object(Proc. Info. h. Process, INFINITE); // Закрыть описатели процесса и потока Close. Handle(Proc. Info. h. Process); Close. Handle(Proc. Info. h. Thread); Приложение createprocess 2/6/2018 1: 32: 34 PM

Завершение процесса Процесс завершается если: Входная функция первичного потока возвратила управление. Один из потоков процесса вызвал функцию Exit. Process. Поток другого процесса вызвал функцию Terminate. Process. Когда процесс завершается, все User- и GDI-объекты, созданные процессом, уничтожаются, объекты ядра закрываются (если их не использует другой процесс), адресное пространство процесса уничтожается. Рассмотрим, как это реализуется на практике. 27 2/6/2018 1: 32: 34 PM

Получение идентификатора процесса Для получения идентификатора процесса (pid) рассмотрим функцию, которая будет определять PID по имени файла. Для этого необходимо получить snapshot (снимок) системных процессов с помощью функции Create. Toolhelp 32 Snapshot(), а затем функциями Process 32 First() и Process 32 Next() перебираются все процессы для поиска нужного. Здесь существенную роль играет структура PROCESSENTRY 32, которая как раз содержит информацию как об имени файла (элемент sz. Exe. File), так и об идентификаторе процесса (элемент th 32 Process. ID). typedef struct tag. PROCESSENTRY 32 { DWORD dw. Size; //Рамер структуры DWORD cnt. Usage; //Число ссылк на процесс. Процесс уничтожается, //когда число ссылок становится 0 DWORD th 32 Process. ID; //Идентификатор процесса DWORD th 32 Default. Heap. ID; //Идентификатор основной кучи DWORD th 32 Module. ID; //идентификатор модуля DWORD cnt. Threads; //Число потоков DWORD th 32 Parent. Process. ID; //Идентификатор родителя LONG pc. Pri. Class. Base; //приоритет по умолчанию DWORD dw. Flags; //Зарезервировано CHAR sz. Exe. File; //Собственно имя процесса } PROCESSENTRY 32, *PPROCESSENTRY 32, *LPPROCESSENTRY 32; 28 2/6/2018 1: 32: 34 PM

Получение идентификатора процесса procedure TForm 1. Button 1 Click(Sender: TObject); var han: THandle; pi: TProc. Info; // from "tlhelp 32" in uses clause s. ID: string; begin LB. Items. Clear; // Get a snapshot of the system han: = Create. Toolhelp 32 Snapshot(TH 32 CS_SNAPALL, 0); if han = 0 then exit; pi: =TProc. Info. Create; pi. Proc. Struct. dw. Size: = sizeof(PROCESSENTRY 32); if Process 32 First(han, pi. Proc. Struct) then repeat s. ID: = Extract. File. Name(pi. Proc. Struct. sz. Exe. File); while length(s. ID)

Получение списка окон и классов procedure TForm 1. Button 2 Click(Sender: TObject); var Wnd: h. Wnd; buff: array of Char; classname: array of Char; s: string; pc: PAnsi. Char; nc: integer; begin LB. Clear; pc: =@classname; Wnd: = Get. Window(Handle, gw_HWnd. First); while Wnd 0 do begin {Не показываем: } if (Wnd Application. Handle) and {-Собственное окно} Is. Window. Visible(Wnd) and {-Невидимые окна} (Get. Window(Wnd, gw_Owner) = 0) and {-Дочерние окна} (Get. Window. Text(Wnd, buff, sizeof(buff)) 0) {Окна без заголовков} then begin Get. Window. Text(Wnd, buff, sizeof(buff)); nc: =Get. Class. Name(Wnd, pc, 1023); s: =Str. Pas(buff); while length(s)

Жизненный цикл потока 31 Каждый новый процесс содержит, по крайней мере, один поток Потоки составляют основу планирования Готовность. У нити есть все для выполнения, но не хватает только процессора. Первоочередная готовность (standby). Для каждого процессора системы выбирается одна нить, которая будет выполняться следующей. Выполнение. Как только происходит переключение контекстов, нить переходит в состояние выполнения и находится в нем до тех пор, пока либо ядро не вытеснит ее. 2/6/2018 1: 32: 35 PM

Жизненный цикл потока Ожидание. Нить по своей инициативе ожидает некоторый объект для того, 32 чтобы синхронизировать свое выполнение; операционная система (например, подсистема ввода-вывода) может ожидать в интересах нити; подсистема окружения может непосредственно заставить нить приостановить себя. Переходное состояние. Нить готова к выполнению, но ресурсы, которые ей нужны, заняты. Завершение. Когда выполнение нити закончилось, она входит в состояние завершения. Находясь в этом состоянии, нить может быть либо удалена, либо не удалена. Код ядра выполняется в контексте текущего потока. Это означает, что при прерывании, системном вызове и т д. , то есть когда процессор переходит в режим ядра и управление передается ОС, переключения на другой поток (например, системный) не происходит. Контекст потока при этом сохраняется, поскольку операционная система все же может принять решение о смене характера деятельности и переключении на другой поток. Вследствие этого состояние "Выполнение" разделяют на "Выполнение в режиме пользователя" и "Выполнение в режиме ядра. Поэтому у каждого потока два стека, один работает в режиме ядра, другой - в режиме пользователя. Один и тот же стек не может использоваться и в режиме пользователя, и в режиме ядра. Любой поток может делать все что угодно со своим собственным стеком (стеком режима пользователя), в том числе организовывать несколько стеков и переключаться между ними. Поток сам может определять размер своего стека. 2/6/2018 1: 32: 35 PM

Внутреннее устройство потоков Объект-нить имеет следующие атрибуты: Идентификатор клиента - уникальное значение, которое идентифицирует нить при ее обращении к серверу. Контекст нити - содержит текущее состояние регистров, стеков и индивидуальной области памяти, которая используется подсистемами и библиотеками. Динамический приоритет - значение приоритета нити в данный момент. Базовый приоритет - нижний предел динамического приоритета нити. Процессорная совместимость нитей - перечень типов процессоров, на которых может выполняться нить. Время выполнения нити - суммарное время выполнения нити в пользовательском режиме и в режиме ядра, накопленное за период существования нити. Состояние предупреждения - флаг, который показывает, что нить должна выполнять вызов асинхронной процедуры. Счетчик приостановок - текущее количество приостановок выполнения нити. 33 2/6/2018 1: 32: 35 PM

Планирование потоков Выбор текущего потока из нескольких активных потоков, пытающихся получить доступ к процессору называется планированием. Выбранный для выполнения поток работает в течение некоего периода, называемого квантом, по истечении которого поток вытесняется. Предполагается, что поток не знает, в какой момент он будет вытеснен. Поток также может быть вытеснен даже, если его квант еще не истек. Процедура планирования обычно связана с весьма затратной процедурой диспетчеризации - переключением процессора на новый поток, поэтому планировщик должен заботиться об эффективном использовании процессора. Принадлежность потоков к процессу при планировании не учитывается, то есть единицей планирования в ОС Windows является именно поток. В ОС Windows запуск процедуры планирования вызывается одним из следующих событий. События, связанные с освобождением процессора: (1) Завершение потока (2) Переход потока в состояние готовности в связи с тем, что его квант времени истек (3) Переход потока в состояние ожидания События, в результате которых пополняется или может пополниться очередь потоков в состоянии готовности. (4) Поток вышел из состояния ожидания (5) Поток только что создан (6) Деятельность текущего потока может иметь следствием вывод другого потока из состояния ожидания. 34 2/6/2018 1: 32: 35 PM

Алгоритмы планирования потоков В ОС Windows реализовано вытесняющее приоритетное планирование, когда каждому потоку присваивается определенное числовое значение - приоритет, в соответствии с которым ему выделяется процессор. Потоки с одинаковыми приоритетами планируются согласно алгоритму Round Robin (карусель). В системе предусмотрено 32 уровня приоритетов. Шестнадцать значений приоритетов (16 -31) соответствуют группе приоритетов реального времени, пятнадцать значений (1 -15) предназначены для обычных потоков, и значение 0 зарезервировано для системного потока обнуления страниц. 35 Класс приоритета для всех потоков конкретного процесса можно задать с помощью набора констант-параметров функции Set. Priority. Class, которые могут иметь следующие значения: реального времени (REALTIME_PRIORITY_CLASS), высокий (HIGH_PRIORITY_CLASS), выше нормы (ABOVE_NORMAL_PRIORITY_CLASS), нормальный (NORMAL_PRIORITY_CLASS), ниже нормы (BELOW_NORMAL_PRIORITY_CLASS) 2/6/2018 1: 32: 35 PM неработающий (IDLE_PRIORITY_CLASS).

Приоритеты потоков Пользовательские потоки работают с приоритетами от 1 до 15. Устанавливая 1) 2) 36 приоритеты процесса и потока, пользователь может отдавать преимущество тому или иному потоку. Нулевой поток работает в фоновом режиме и съедает все процессорное время, на которое больше никто не претендует. Его работа заключается в обнулении страниц для менеджера памяти. Если и у этого потока нет работы, работает пустой поток. Однако он не является полноценным потоком. Со временем для улучшения производительности системы в базовом алгоритме планирования было сделано несколько усовершенствований. При определенных условиях текущий приоритет пользовательского потока может быть поднят операционной системой выше базового приоритета, но никогда не может быть установлен выше приоритета 15. Для потоков с приоритетами 15 и выше никогда не делается никаких изменений приоритета. Приоритет потока увеличивается: Когда завершается операция ввода-вывода и освобождает ожидающий ее поток, приоритет потока увеличивается, чтобы дать шанс этому потоку быстрее запуститься и снова запустить операцию ввода-вывода. Суть в том, чтобы поддерживать занятость устройств ввода-вывода. Величина, на которую увеличивается приоритет, зависит от устройства ввода-вывода. Как правило, это 1 для диска, 2 для последовательной линии, 6 для клавиатуры и 8 для звуковой карты. Если поток ждал семафора, мьютекса или другого события, то когда он отпускается, к его приоритету прибавляется две единицы, если это поток переднего плана (то есть процесс, управляющий окном, которому в данный момент направляется ввод с клавиатуры), и одна единица в противном случае. 2/6/2018 1: 32: 36 PM

Приоритеты потоков Есть еще один случай, при котором система изменяет приоритеты потоков. Представьте, что два потока работают вместе в задаче типа "производитель -потребитель". Работа производителя труднее, поэтому он получает более высокий приоритет, например 12, а потребитель получает приоритет 4. В определенный момент производитель заполняет до отказа общий буфер и блокируется на семафоре Прежде чем потребитель снова получит шанс поработать, посторонний процесс с приоритетом 8 приходит в состояние готовности и получает управление. Этот поток сможет работать столько, сколько захочет, так как его приоритет выше приоритета потребителя, а производитель, хоть и с большим приоритетом, заблокирован. При таких условиях производитель никогда снова не получит управления, пока поток с приоритетом 8 не остановится. 37 2/6/2018 1: 32: 36 PM

Приоритеты потоков В операционной системе Windows 2000 эта проблема решается при помощи большой кувалды. Система следит, сколько времени прошло с тех пор, когда готовый к работе поток запускался в последний раз. Если какой-либо поток превысит определенный интервал времени, он получает на два кванта времени приоритет 15. Это может помочь разблокировать производителя. После двух квантов прибавка приоритета резко убирается. Вероятно, лучшим решением было бы наказывать потоки, которые полностью используют свои кванты снова и снова. В конце концов, проблему создает не поток, умирающий от голода, а жадный поток. Эта проблема хорошо известна под названием инверсии приоритетов. Классы приоритетов процессов Критичный Самый Нормаль Выше нормы Ниже нормы ко времени высокий ный Самый низкий Неработающий 15 6 5 4 3 2 1 Ниже нормы 15 8 7 6 5 4 1 Нормальный 15 10 9 8 7 6 1 Выше нормы 15 12 11 10 9 8 1 Высокий 15 15 14 13 12 11 1 Реального времени 31 26 25 24 23 22 16 38 2/6/2018 1: 32: 36 PM

Task Manager - это один из самых мощных и удобных инструментов в NT, предназначенных для управления процессами. Вызывается он либо Ctrl+Shift+Esc, либо выбором в меню, появляющимся после нажатия правой кнопкой на Taskbar-е. Task manager в Windows XP состоит из пяти закладок - Applications , Processes , Performance , Networking и Users. Начнём с Performance.

На этой закладке показывается информация о загрузке процессора(ов) в реальном времени (зелёным цветом процессы пользователя, красным системные процессы), показывается загрузка физической памяти, причём показано сколько занято/свободно оперативной памяти, и сколько занято системного Swap-а. Кроме этого даётся другая дополнительная информация, например Threads и Processes, - количество нитей и процессов, исполняемых сейчас на машине, Peak - пиковый размер Swap-а в течении сессии, Nonpaged - количество памяти, отведённое под ядро. Эта информация может использоваться, когда надо будет ответить на вопрос, какой фактор в системе является «бутылочным горлышком», замедляющим работу (хотя для этих целей лучше использовать Performance Monitor).

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

Для каждого процесса можно узнать некоторую дополнительную информацию, как то: PID (Process ID), количество используемой оперативной памяти, количество нитей, сгенерированных процессом и многое другое. Из полезных дополнений, которые появились в XP, следует отметить появившейся столбик User Name. В нём можно узнать, какой пользователь, или системная служба запустила тот или иной процесс. Добавить/удалить показываемые параметры можно через View -> Select Columns.

Кроме этого, с любым из этих процессов можно произвести определённые действия. Для этого надо просто нажать на нём правой кнопкой мыши, появится контекстное меню, через которое можно закончить («убить») процесс (End Process); также можно убить как сам процесс, так и все остальные, которые он «породил» (End Process Tree). Можно выставить приоритет процессу, от высшего Real-Time до самого низкого, Low. Если на машине установлено два процессора и многопроцессорное ядро, то в этом меню появляется ещё один пункт, Set Affinity, который позволяет перевести процесс на другой процессор, Cpu 0, Cpu1, и так далее до Cpu31.

Закладка - Applications позволяет просмотреть список работающих приложений и «убить» любое из них. Task Manager позволяет не только «убивать» приложения, он может также запускать новые приложения. File -> New task (Run..). Иногда это бывает очень полезно. Например, если по какой либо причине зависнет интерфейс пользователя, то его можно с лёгкостью «убить» (процесс explorer.exe), а после стартовать заново. Причём, это не обязательно должен быть explorer.exe. Можно, к примеру, запустить progman.exe, и получить интерфейс подобный интерфейсу W3.1, или же любой из внешних интерфейсов, которые в изобилии можно найти на просторах Интернета.

Закладка

Закладка Users . На ней можно посмотреть пользователей, которые в данный момент работают на машине. Если у вас имеется достаточно прав, то вы можете отключить этого пользователя, или просто послать ему сообщение. Подобные вещи давно и широко используются в самом различном программном обеспечении, предназначенном для управления многопользовательскими системами, но именно в Task Manager эта возможность появилась впервые.

Практическая работа №

Управление процессами в Windows .

Цель работы : изучение возможностей контроля и управления процессами в операционных системах Windows, научиться работать с Диспетчером задач, ознакомиться с управлением процессами в ОС Windows с помощью утилиты Process Explorer.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ .

Для правильного выполнения той или иной задачи в Windows необходимо, чтобы была запущена та или иная программа. В данной работе вы ознакомитесь с минимальным набором программ, которые должны быть запущены для корректной работы Windows . Для того чтобы увидеть полный список выполняемых задач в данный момент можно воспользоваться Диспетчером задач Windows или любой другой аналогичной программой (утилиты Process Explorer (procexp.exe.)). В этой работе мы ознакомимся только с Диспетчером задач, который можно запустить нажатием комбинации CTRL + ALT + DELETE .

В Диспетчере задач отображаются сведения о программах и процессах, выполняемых на компьютере.

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

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

  1. Графики загрузки ЦП и использования памяти.
  2. Общее число дескрипторов, процессов, выполняющихся на компьютере.
  3. Общий объем физической памяти, памяти ядра и выделения памяти в килобайтах.

Если имеется подключение к сети, можно просматривать состояние сети и параметры ее работы.

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

Для того чтобы увидеть все программы, загруженные в оперативную память нужно перейти с вкладки Приложения на вкладку Процессы.

Перечисленные здесь процессы - это программы, которые на данный момент загружены в оперативную память. Это могут быть специальные служебные программы, без которых Windows не будет работать, программы, отвечающие за предоставление каких либо услуг, например сверка системного времени с сервером времени в сети Internet , и т.д. В ниже приведённой таблице есть сведения о названии некоторых процессов и назначение данной программы.

Процесс Бездействие системы представляет собой отдельный поток, выполняющийся на каждом процессоре и имеющий единственную задачу - заполнение процессорного времени, когда система не обрабатывает другие потоки. В Диспетчере задач данный процесс занимает большую часть процессорного времени.

Имя процесса

Описание

Explorer.exe

Программа проводник, отвечает за отображение на экране рабочего стола, открытие главного меню (если открываете окно проводника, появляется ещё один процесс)

Spoolsv.exe

Программа отвечает за очередь печати (постановка документов в очередь, удаление очереди отслеживание количества напечатанных листов)

services.exe

Позволяет компьютеру распознавать изменения в установленном оборудовании и подстраиваться под них, либо не требуя вмешательства пользователя, либо сводя его к минимуму. Остановка или отключение этой службы может привести к нестабильной работе системы.(Plug and Play ). А так же обеспечивает поддержку сообщений журналов событий, выдаваемых Windows-программами и компонентами системы, и просмотр этих сообщений.

svchost.exe

Позволяет настраивать расписание автоматического выполнения задач на этом компьютере.

svchost.exe

Управляет объектами папки ""Сеть и удаленный доступ к сети"", отображающей свойства локальной сети и подключений удаленного доступа.

svchost.exe

Управляет синхронизацией даты и времени на всех клиентах и серверах в сети. Если эта служба остановлена, синхронизация даты и времени не будет доступна.

svchost.exe

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

svchost.exe

Позволяет удаленным пользователям изменять параметры реестра на этом компьютере.

mdm.exe

Управляет местной и удаленной отладкой для отладчиков Visual Studio

lsass.exe

Хранит информацию о безопасности для учетной записи локального пользователя.

Winlogon.exe

Программа входа в систему Windows NT

Изменение вида окна Диспетчера задач, выбор для отображения тех или иных параметров производится с помощью пунктов меню. Всю информацию о работе с Диспетчером задач можно найти в пункте меню «Справка».

Управление процессами и потоками в ОС Windows с помощью утилиты Process Explorer фирмы SysInternals .

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

Помимо этого, с помощью программы можно изменить приоритет процесса, просмотреть информацию о DLL-файле и принудительно завершить безнадежно зависшую программу.

Утилита содержит 2 окна. В верхнем отображается список активных процессов (в т.ч. идентификатор процесса - PID, процент загрузки процессора - CPU, описание - Description, наименование аккаунта владельца - Owner, приоритет процесса - Priority, Handles, Windows Title). Информация, показываемая в нижнем окне, зависит от режима Process Explorer - если он находится в режиме handle mode, Вы можете видеть handles (файлы для Windows 9x/Ме), которые открыл процесс, выбранный в верхнем окне; если это режим DLL (DLL mode) - Вы можете видеть DLL, которые загрузил данный процесс.

Переключение между режимами осуществляется "горячими клавишами" или с помощью соответствующих пунктов меню:

Вы можете сортировать процессы по любому критерию, щелкая мышкой на соответствующей колонке; либо представить процессы в виде дерева процессов (process tree) путем выбора пункта меню View - Show Process Tree.

Щелкнув правой кнопкой мыши по выбранному процессу, с помощью появившегося контекстного меню Вы можете изменить базовый приоритет процесса (Set Priority), принудительно завершить процесс (Kill Process) и просмотреть дополнительные параметры процесса (Properties):

С помощью пункта меню Options - Highlight Services можно выделить процессы, которые обслуживают хост. Для выделения процессов текущего пользователя выберите пункт меню Options - Highlight Own Processes.

Запустив утилиту, запустите несколько приложений (например, Far, Word, Paint, Notepad и т.д.), обратите внимание на изменения в окне процессов. Прокомментируйте их. Приведите копию экрана и опишите процесс, порожденный запущенным приложением.

Задания для выполнения :

1. На вкладке Процессы Диспетчера задач измените количество столбцов, запишите выполненные для этого операции. Какие из процессов запущены Пользователем?

2. Сколько процессов активно на момент выполнения практической работы, на сколько загружен центральный процессор, какой объем памяти выделен на текущие процессы?

3. Просмотреть справочную систему Диспетчера задач. Найти информацию о запуске новых программ, завершении текущих программ с использованием Диспетчера и выписать в тетрадь.

4. Выполните следующие действия с помощью утилиты Process Explorer . Отсортируйте процессы по заданному критерию. Опишите один из системных процессов. Запустите указанное приложение. Опишите возникший процесс по заданным характеристикам. Принудительно завершите указанный процесс. Выполняемые действия иллюстрируйте копиями экранов.

No задания

Критерий

Приложение

Характеристики

Показать дерево системных процессов

Far Manager

Опрелелить используемые DLL

Отсортировать по PID

Блокнот

Wordpad

Отсортировать по приоритету

Калькулятор

Просмотреть доп. свойства процесса

Отсортировать по владельцу

Paint

Проводник

Просмотреть доп. свойства процесса

Отсортировать по наименованию

Редактор реестра

Опрелелить используемые DLL

Отсортировать по приоритету

Web-браузер

Изменить приоритет пользовательского процесса

Отсортировать по загрузке процессора

Сетевое окружение

Опрелелить используемые handles

Показать дерево пользовательских процессов

Дефрагментация диска

Опрелелить используемые DLL

Копии экрана с выполненным заданием и описание выполненных действий привести в отчете.

Контрольные вопросы:

  1. Что такое процесс?
  2. Опишите общие сведения про Диспетчер задач?
  3. Что означает параметр «бездействие системы»?
  4. Можно ли изменить внешний вид вкладки процессы в диспетчере задач?
  5. Как завершить процесс?
  6. Опишите возможности работы с помощью утилиты Process Explorer .
  7. Записать процессы и их описание из таблицы в тетрадь и выучить их наизусть.