Управление процессами в Windows. Управление процессами из командной строки Управление процессами windows

Для каждого приложения, запускаемого под управлением Microsoft Windows, операционная система создает собственную задачу, иными словами, отводит определенный объем оперативной памяти для выполнения этой программы и контролирует работу загруженного в память приложения с ресурсами компьютера. Помимо задач в Windows XP имеются также процессы - виртуальное адресное пространство памяти, отведенное для выполнения программой или самой операционной системой каких-либо процедур. Одна задача может активизировать в Windows несколько различных процессов: например, web-браузер может одновременно обращаться к порту модема для получения и отправки каких-либо данных и отображать на экране результат работы встроенного в web-страницу апплета Java. Каждому процессу автоматически назначается индивидуальный опознавательный номер, так называемый Process ID или PID, предназначенный для однозначной идентификации процесса в системе.
Если запущенная вами программа неожиданно вызвала «зависание» компьютера, в большинстве случаев нет необходимости прибегать к аварийной перезагрузке: вполне достаточно отыскать в памяти вызвавшую сбой задачу и снять ее, то есть принудительно прекратить ее дальнейшее выполнение. Возможна и другая ситуация: закрыв неожиданно «зависшую» программу путем снятия задачи, вы не сможете продолжить прерванную работу с каким-либо файлом или документом. Например, удалив из памяти компьютера Microsoft Word, вы не сможете снова загрузить в него текст, который только что редактировали, поскольку операционная система считает, что этот документ уже используется другой программой. Подобные явления происходят потому, что после снятия задачи в памяти все еще остался инициированный этой задачей процесс - в нашем случае это процесс обработки документа Word. Прекратив выполнение вызывающего сбои процесса, вы сможете продолжить работу с Windows XP в обычном режиме.

Для управления задачами и процессами в Microsoft Windows XP предусмотрена специальная системная утилита, называемая Диспетчер задач (Windows Task Manager), окно которой появляется на экране при нажатии сочетания клавиш Ctrl+Alt+Del

Окно утилиты Диспетчер задач Windows XP имеет пять функциональных вкладок.
Вкладка Приложения (Applications) содержит список всех запущенных в системе задач: в поле Задача (Task) отображается название задачи, в поле Состояние (Status) - ее текущее состояние. Нормальным статусом задачи является состояние Работает (Running). Если задача «зависла» и не отвечает на системные запросы, ее состояние будет определено как Не отвечает (Not responding).
Чтобы снять одну из задач, выделите ее щелчком мыши в меню Задача (Task) и нажмите на кнопку Снять задачу (End Task).
Чтобы переключиться к какой-либо задаче, то есть открыть на экране ее окно, выделите в списке нужную задачу и щелкните мышью на кнопке Переключиться (Switch To).
Вы можете инициировать новую задачу, нажав на кнопку Новая задача (New Task) и указав полное имя и путь к запускаемой программе в соответствующем поле открывшегося окна либо определив эту программу визуально при помощи кнопки Обзор (Browse).

Вкладка Процессы (Processes) дает возможность управлять запущенными в системе процессами.

В меню на данной вкладке отображаются названия процессов - Имя образа (Image Name), определители инициаторов процессов - Имя пользователя (User Name), характеристики аппаратной обработки процессов - ЦП (CPU) и занимаемый процессами объем оперативной памяти - Память (Memory Usage). Вы можете включить отображение других характеристик процессов (например, PID, диапазон ввода-вывода, объем используемого процессом кэша и т. д.), воспользовавшись функцией Выбрать столбцы (Select Columns) командного меню Вид (View). Чтобы прекратить выполнение процесса, выделите его заголовок щелчком мыши и нажмите на кнопку Завершить процесс (End Process).
Если вы хотите, чтобы в данном меню отображались процессы, инициированные всеми пользователями вашей системы, установите флажок рядом с пунктом Отображать процессы всех пользователей (Show processes from all users). Вы можете также установить приоритет процесса, если щелкните на его заголовке правой кнопкой мыши, выберите в появившемся меню пункт Приоритет (Set Priority) и укажете назначаемый для данного процесса режим выполнения:

Реального времени (Realtime)- режим реального времени (все инициируемые процессом запросы выполняются системой по мере поступления);
Высокий (High)- высочайший приоритет;
Выше среднего (AboveNormal)- высокий приоритет;
Средний (Normal)- стандартный приоритет;
Ниже среднего (BelowNormal)- низкий приоритет;
Низкий (Low)- наиболее низкий приоритет.

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

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

(CPU Usage) и Хронология загрузки ЦП (CPU Usage History) показывают нагрузку на процессор вашего компьютера, индикаторы Файл подкачки (PF Usage) и Хронология использования файла подкачки (PF Usage History) - использование файла подкачки при системном кэшировании данных, индикатор Физическая память (Physical Memory) - степень загрузки оперативной памяти в килобайтах.

Аналогичным образом вкладка Сеть (Networking) демонстрирует нагрузку на вашу локальную сеть.
И наконец, если вы хотите просмотреть список всех работающих в настоящее время с вашей системой пользователей, перейдите ко вкладке Пользователи (Users).


Если вы зарегистрированы в системе как администратор данного компьютера, то можете отключить одного из пользователей, выделив в меню название его сеанса работы с Windows щелчком мыши и нажав на кнопку Отключить (Disconnect). Помимо этого вы можете отправить ему сообщение нажатием на кнопку Отправить сообщение (Send Message). Чтобы завершить текущий сеанс работы с Windows, щелкните мышью на кнопке Выйти из системы (Logoff).

Лекция 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

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

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

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

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

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

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

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

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

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

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

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

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

Освоить управление процессами cпомощью командами tasklist и taskkill и через диспетчер задач.

Скачать:


Предварительный просмотр:

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

Цель:

освоить управление процессами c помощью командами tasklist и taskkill

и через диспетчер задач.

Ход выполнения работы:

Для того чтобы просмотреть количество запущенных программ в операционной системе windows xp/seven можно использовать программу

“Диспетчер задач”.

Диспетчер задач можно запустить двумя способами.

1.Способ:

Нажав комбинацию кнопок Contr+Alt+Del.

В появившемся окне нажать вкладку процессы .

2.Способ:

Запустить интепритатор командной строки нажав горячие клавиши Win+R или запустить программу через меню пуск – выполнить.

В появившимся окне написать CMD и нажать Enter

После чего запустится командная строка.

В ней написать команду Tasklist и нажать Enter.

Запустится “Диспетчер задач”

В нём мы можем увидеть сколько запущено процессов а также на сколько загружен процессор и задействована ОЗУ нажав на вкладку быстродействие .

Удалить процесс можно набрав команду taskkill/?

Taskkill

Завершает одно или несколько заданий или процессов. Процессы могут быть уничтожены кодом процесса или именем образа. Синтаксис taskkill ]] | Параметры

/s компьютер

Указывает имя или IP-адрес удаленного компьютера (не используйте обратную косую черту). По умолчанию используется локальный компьютер.

/u домен\пользователь

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

/p пароль

Определяет пароль учетной записи пользователя, заданной параметром /u.

/fi имя_фильтра

Задает типы процессов, которые следует завершить и не следует.

/pid код_процесса

Указывает код процесса, который необходимо завершить.

/im имя_образа

Указывает имя образа процесса, который необходимо завершить. Используйте подстановочный знак (*) для указания всех имен образа.

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

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

Примечания

Подстановочный символ (*) принимается только при указании вместе с фильтрами.

Завершение удаленных процессов всегда выполняется принудительно независимо от указания параметра /f.

Указание имени компьютера в качестве фильтра HOSTNAME приведет к завершению работы и остановке всех процессов.

Используйте команду tasklist для определения кода завершаемого процесса.

Команда taskkill является заменой средству Kill.

taskkill /f /fi "USERNAME eq NT AUTHORITY\SYSTEM" /im notepad.exe

taskkill /s srvmain /f /im notepad.exe

taskkill /s srvmain /u maindom\hiropln /p p@ssW23 /fi "IMAGENAME eq note*" /im *

taskkill /s srvmain /u maindom\hiropln /fi "USERNAME ne NT*" /im *

taskkill /f /fi "PID ge 1000" /im *

Команда запуска быстродействия сразу taskmgr.exe

Завершения процесса

Tskill {код_процесса | имя_процесса} [{/id:код_сеанса | /a}]

Параметры:

код_процесса

Отображает код завершаемого сеанса.

имя_процесса

Отображает имя завершаемого сеанса. Для задания этого аргумента можно использовать подстановочные символы.

/server:имя_сервера

Определяет сервер терминалов, содержащий завершаемый процесс. В противном случае используется текущий сервер терминалов.

/id:код_сеанса

Завершает процесс, запущенный в выбранном сеансе.

Завершает процесс, запущенный во всех сеансах.

Отображает сведения о выполненных действиях.

Отображает справку в командной строке.

Примечания

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

При завершении всех запущенных процессов в сеансе он тоже завершается.

Список различных процессов

CSRSS.EXE

Процесс отвечает за окна консоли, за создание и удаление потоков, а также частично за работу 16-битной среды MS-DOS. Он относиться к подсистеме Win32 пользовательского режима (WIN32.SYS же относиться к ядру Kernel) и должен всегда выполняться.

EXPLORER.EXE

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

INTERNAT.EXE

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

LSASS.EXE

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

MSTASK.EXE

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

SMSS.EXE

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

SPOOLSV.EXE

Обеспечивает создание очереди на печать, временно сохраняя документы и факсы в памяти.

SVCHOST.EXE

Этот всеобъемлющий процесс служит хостингом для других процессов, запускаемых с помощью DLL. Поэтому иногда работают одновременно несколько Svhost. С помощью команды > можно вывести на экран все процессы, использующие Svchost.

SERVICES.EXE

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

SYSTEM

Выполняет все потоки ядра Kernel.

SYSTEM IDLE PROCESS

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

TASKMGR.EXE

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

WINLOGON.EXE

WINMGTM.EXE

Основной компонент клиентской службы Windows. Процесс запускается одновременно с первыми клиентскими приложениями и выполняется при любом запросе служб. В Windows XP процесс запускается как клиент процесса Svchost.

по материалам журнала NetWork

Их можно просмотреть следующим способ:

1.Нажмите на панели задач Windows кнопку Пуск и выберите пункт Выполнить.

2.В поле Открыть введите команду CMD и нажмите клавишу ВВОД.

3.Введите команду Tasklist /SVC и нажмите клавишу ВВОД.

Команда Tasklist выводит список активных процессов. Параметр /SVC используется для вывода списка активных служб в каждом процессе. Для получения дополнительных сведений о процессе введите следующую команду и нажмите клавишу ВВОД:

Tasklist /FI "PID eq идентификатор_процесса" (кавычки обязательны)

В приведенном ниже примере показан вывод команды Tasklist для двух экземпляров процесса Svchost.exe.

Задание:

  1. Запустить Калькулятор
  2. Посмотреть командой tasklist появился ли процесс calc.exe
  3. Запустить Regedit(пуск>выполнить>regedit)
  4. Посмотреть командой tasklist появился ли процесс regedit.exe
  5. “Убить” процесс regedit.exe(командой taskkill)
  6. Посмотреть реакцию системы