Windows 10 диспетчер задач дескрипторы

В этой статье мы поговорим на такие темы, как процессы и потокидискрипторы процесса, поговорим о синзронизации потоков и затронем всеми любимый диспетчер задач windows.

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

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

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

В общем случае дескриптор содержит следующую информацию:

  1. Идентификатор процесса.
  2. Тип (или класс) процесса, который определяет для супервизора некоторые правила предоставления ресурсов.
  3. Приоритет процесса.
  4. Переменную состояния, которая определяет, в каком состоянии находится процесс (готов к работе, в состоянии выполнения, ожидание устройства ввода-вывода и т.д.)
  5. Защищенную область памяти (или адрес такой зоны), в которой хранятся текущие значения регистров процессора, если процесс прерывается, не закончив работы. Эта информация называется контекстом задачи.
  6. Информацию о ресурсах, которыми процесс владеет и/или имеет право пользоваться (указатели на открытые файлы, информация о незавершенных операциях ввода/вывода и т.п.).
  7. Место (или его адрес) для организации общения с другими процессами.
  8. Параметры времени запуска (момент времени, когда процесс должен активизироваться, и периодичность этой процедуры).
  9. В случае отсутствия системы управления файлами – адрес задачи на диске в ее исходном состоянии и адрес на диске, куда она выгружается из оперативной памяти, если ее вытесняет другая.

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

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

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

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

Процессы и потоки

Чтобы поддерживать мультипрограммирование, ОС должна определить и оформить для себя те внутренне единицы работы, между которыми будет разделяться процессор и другие ресурсы компьютера. В настоящее время в большинстве ОС определены два типа единиц работы:

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

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

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

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

Можно выделить следующие отличия потоков от процессов:

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

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

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

Диспетчер задач WINDOWS

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

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

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

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

На вкладке Быстродействие, отображаются сведения о счетчике дескрипторов и потоках, параметры памяти:

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

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

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

Пример. Задача ведения базы данных клиентов некоторого предприятия.

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

  • Поток А, который заносит в базу данных информацию о заказах, поступивших от клиентов.
  • Поток В, который фиксирует в базе данных сведения об оплате клиентами выставленных счетов.

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

  1. Считать из файла БД в буфер запись и клиенте с заданным идентификатором.
  2. Ввести новое значение в поле Заказ (для потока А) или оплата (для потока В).
  3. Вернуть модифицированную запись в файл БД.

Обозначим шаги 1-3 для потока А как А1-А3, а для потока В как В1-В3. Предположим, что в некоторый момент поток А обновляет поле Заказ записи о клиенте N. Для этого он считывает эту запись в свой буфер (шаг А1), модифицирует значение поля Заказ (шаг А2), но внести запись в базу данных не успевает, так как его выполнение прерывается, например, вследствие истечение кванта времени.

Предположим, что потоку В также потребовалось внести сведения об оплате относительно того же клиента N. Когда подходит очередь потока В, он успевает считать запись в свой буфер (шаг В1) и выполнить обновление поля Оплата (шаг В2), а затем прерывается. Заметим, что в буфере у потока В находится запись о клиенте N, в которой поле Заказ имеет прежнее, не измененное значение.

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

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

Другим способом является использование блокирующих переменных. С каждым разделяемым ресурсом связывается двоичная переменная, которая принимает значение 1, если ресурс свободен (то есть ни один процесс не находится в данный момент в критической секции, связанной с данным процессом), и значение 0, если ресурс занят. На рисунке ниже показан фрагмент алгоритма процесса, использующего для реализации взаимного исключения доступа к разделяемому ресурсу D блокирующую переменную F(D). Перед входом в критическую секцию процесс проверяет, свободен ли ресурс D. Если он занят, то проверка циклически повторяется, если свободен, то значение переменной F(D) устанавливается в 0, и процесс входит в критическую секцию. После того, как процесс выполнит все действия с разделяемым ресурсом D, значение переменной F(D) снова устанавливается равным 1.

Если все процессы написаны с использованием вышеописанных соглашений, то взаимное исключение гарантируется. Следует заметить, что операция проверки и установки блокирующей переменной должна быть неделимой. Поясняется это следующим образом. Пусть в результате проверки переменной процесс определил, что ресурс свободен, но сразу после этого, не успев установить переменную в 0, был прерван. За время его приостановки другой процесс занял ресурс, вошел в свою критическую секцию, но также был прерван, не завершив работы с разделяемым ресурсом. Когда управление было возвращено первому процессу, он, считая ресурс свободным, установил признак занятости и начал выполнять свою критическую секцию. Таким образом, был нарушен принцип взаимного исключения, что потенциально может привести к нежелаемым последствиям. Во избежание таких ситуаций в системе команд машины желательно иметь единую команду «проверка-установка», или же реализовывать системными средствами соответствующие программные примитивы, которые бы запрещали прерывания на протяжении всей операции проверки и установки.

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

Если ресурс занят, то процесс не выполняет циклический опрос, а вызывает системную функцию WAIT(D), здесь D обозначает событие, заключающееся в освобождении ресурса D. Функция WAIT(D) переводит активный процесс в состояние ОЖИДАНИЕ и делает отметку в его дескрипторе о том, что процесс ожидает события D. Процесс, который в это время использует ресурс D, после выхода из критической секции выполняет системную функцию POST(D), в результате чего операционная система просматривает очередь ожидающих процессов и переводит процесс, ожидающий события D, в состояние ГОТОВНОСТЬ.

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

V(S): переменная S увеличивается на 1 одним неделимым действием; выборка, инкремент и запоминание не могут быть прерваны, и к S нет доступа другим процессам во время выполнения этой операции.

P(S): уменьшение S на 1, если это возможно. Если S=0, то невозможно уменьшить S и остаться в области целых неотрицательных значений, в этом случае процесс, вызывающий P-операцию, ждет, пока это уменьшение станет возможным. Успешная проверка и уменьшение также является неделимой операцией.

В частном случае, когда семафор S может принимать только значения 0 и 1, он превращается в блокирующую переменную. Операция P заключает в себе потенциальную возможность перехода процесса, который ее выполняет, в состояние ожидания, в то время как V-операция может при некоторых обстоятельствах активизировать другой процесс, приостановленный операцией P.

Взаимоблокировка процессов

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

При параллельном исполнении процессов могут возникать ситуации, при которых два или более процесса все время находятся в заблокированном состоянии. Самый простой случай – когда каждый из двух процессов ожидает ресурс, занятый другим процессом. Из-за такого ожидания ни один из процессов не может продолжить исполнение и освободить в конечном итоге ресурс, необходимый другому процессу. Эта тупиковая ситуация называется дедлоком (dead lock), тупикомклинчем или взаимоблокировкой.

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

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

Проблема тупиков включает в себя следующие задачи:

  1. предотвращение тупиков.
  2. распознавание тупиков.
  3. восстановление системы после тупиков.

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

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

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

141 / 181 / 44

Регистрация: 25.04.2012

Сообщений: 2,623

Записей в блоге: 5

1

Что такое дескриптор в архитектуре ПК?

29.08.2018, 22:05. Показов 9445. Ответов 1


Студворк — интернет-сервис помощи студентам

Добрый вечер!
В Диспетчере задач отображается количество дескрипторов. Не напомните, что это такое?
Спасибо.



0



327 / 157 / 14

Регистрация: 30.12.2014

Сообщений: 804

Записей в блоге: 3

30.08.2018, 12:03

2

Windows одновременно выполняет много программ, в основном служебных самой Windows. Точнее, квазиодновременно, процессор поочередно, очень быстро для нас, переключается на решение каждой из них. Каждая программа в терминах операционной системы считается отдельным процессом. Отдельные части многих задач могут выполняться какое-то время независимо, поэтому процессы часто делятся на несколько потоков, именно между их выполнением переключается процессор, точнее, каждое процессорное ядро (современные процессоры многоядерные) . Операционная система создает каждому процессу и каждому потоку специальную структуру данных, в которой указывается область памяти, в которой лежат данные потока, его приоритет и так далее. Эта структура данных называется дескриптором потока или процесса, дескрипторы имеют числовые имена — идентификаторы.

Преодолевая ограничения Windows: дескрипторы https://blogs.technet.microsof… 0/windows/



1



В этой статье мы поговорим на такие темы, как процессы и потоки, дискрипторы процесса, поговорим о синзронизации потоков и затронем всеми любимый диспетчер задач windows.

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

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

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

В общем случае дескриптор содержит следующую информацию:

  1. Идентификатор процесса.
  2. Тип (или класс) процесса, который определяет для супервизора некоторые правила предоставления ресурсов.
  3. Приоритет процесса.
  4. Переменную состояния, которая определяет, в каком состоянии находится процесс (готов к работе, в состоянии выполнения, ожидание устройства ввода-вывода и т.д.)
  5. Защищенную область памяти (или адрес такой зоны), в которой хранятся текущие значения регистров процессора, если процесс прерывается, не закончив работы. Эта информация называется контекстом задачи.
  6. Информацию о ресурсах, которыми процесс владеет и/или имеет право пользоваться (указатели на открытые файлы, информация о незавершенных операциях ввода/вывода и т.п.).
  7. Место (или его адрес) для организации общения с другими процессами.
  8. Параметры времени запуска (момент времени, когда процесс должен активизироваться, и периодичность этой процедуры).
  9. В случае отсутствия системы управления файлами – адрес задачи на диске в ее исходном состоянии и адрес на диске, куда она выгружается из оперативной памяти, если ее вытесняет другая.

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

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

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

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

Процессы и потоки

Чтобы поддерживать мультипрограммирование, ОС должна определить и оформить для себя те внутренне единицы работы, между которыми будет разделяться процессор и другие ресурсы компьютера. В настоящее время в большинстве ОС определены два типа единиц работы:

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

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

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

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

Можно выделить следующие отличия потоков от процессов:

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

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

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

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

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

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

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

На вкладке Быстродействие, отображаются сведения о счетчике дескрипторов и потоках, параметры памяти:

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

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

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

Пример. Задача ведения базы данных клиентов некоторого предприятия.

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

  • Поток А, который заносит в базу данных информацию о заказах, поступивших от клиентов.
  • Поток В, который фиксирует в базе данных сведения об оплате клиентами выставленных счетов.

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

  1. Считать из файла БД в буфер запись и клиенте с заданным идентификатором.
  2. Ввести новое значение в поле Заказ (для потока А) или оплата (для потока В).
  3. Вернуть модифицированную запись в файл БД.

Обозначим шаги 1-3 для потока А как А1-А3, а для потока В как В1-В3. Предположим, что в некоторый момент поток А обновляет поле Заказ записи о клиенте N. Для этого он считывает эту запись в свой буфер (шаг А1), модифицирует значение поля Заказ (шаг А2), но внести запись в базу данных не успевает, так как его выполнение прерывается, например, вследствие истечение кванта времени.

Предположим, что потоку В также потребовалось внести сведения об оплате относительно того же клиента N. Когда подходит очередь потока В, он успевает считать запись в свой буфер (шаг В1) и выполнить обновление поля Оплата (шаг В2), а затем прерывается. Заметим, что в буфере у потока В находится запись о клиенте N, в которой поле Заказ имеет прежнее, не измененное значение.

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

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

Другим способом является использование блокирующих переменных. С каждым разделяемым ресурсом связывается двоичная переменная, которая принимает значение 1, если ресурс свободен (то есть ни один процесс не находится в данный момент в критической секции, связанной с данным процессом), и значение 0, если ресурс занят. На рисунке ниже показан фрагмент алгоритма процесса, использующего для реализации взаимного исключения доступа к разделяемому ресурсу D блокирующую переменную F(D). Перед входом в критическую секцию процесс проверяет, свободен ли ресурс D. Если он занят, то проверка циклически повторяется, если свободен, то значение переменной F(D) устанавливается в 0, и процесс входит в критическую секцию. После того, как процесс выполнит все действия с разделяемым ресурсом D, значение переменной F(D) снова устанавливается равным 1.

Если все процессы написаны с использованием вышеописанных соглашений, то взаимное исключение гарантируется. Следует заметить, что операция проверки и установки блокирующей переменной должна быть неделимой. Поясняется это следующим образом. Пусть в результате проверки переменной процесс определил, что ресурс свободен, но сразу после этого, не успев установить переменную в 0, был прерван. За время его приостановки другой процесс занял ресурс, вошел в свою критическую секцию, но также был прерван, не завершив работы с разделяемым ресурсом. Когда управление было возвращено первому процессу, он, считая ресурс свободным, установил признак занятости и начал выполнять свою критическую секцию. Таким образом, был нарушен принцип взаимного исключения, что потенциально может привести к нежелаемым последствиям. Во избежание таких ситуаций в системе команд машины желательно иметь единую команду «проверка-установка», или же реализовывать системными средствами соответствующие программные примитивы, которые бы запрещали прерывания на протяжении всей операции проверки и установки.

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

Если ресурс занят, то процесс не выполняет циклический опрос, а вызывает системную функцию WAIT(D), здесь D обозначает событие, заключающееся в освобождении ресурса D. Функция WAIT(D) переводит активный процесс в состояние ОЖИДАНИЕ и делает отметку в его дескрипторе о том, что процесс ожидает события D. Процесс, который в это время использует ресурс D, после выхода из критической секции выполняет системную функцию POST(D), в результате чего операционная система просматривает очередь ожидающих процессов и переводит процесс, ожидающий события D, в состояние ГОТОВНОСТЬ.

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

V(S): переменная S увеличивается на 1 одним неделимым действием; выборка, инкремент и запоминание не могут быть прерваны, и к S нет доступа другим процессам во время выполнения этой операции.

P(S): уменьшение S на 1, если это возможно. Если S=0, то невозможно уменьшить S и остаться в области целых неотрицательных значений, в этом случае процесс, вызывающий P-операцию, ждет, пока это уменьшение станет возможным. Успешная проверка и уменьшение также является неделимой операцией.

В частном случае, когда семафор S может принимать только значения 0 и 1, он превращается в блокирующую переменную. Операция P заключает в себе потенциальную возможность перехода процесса, который ее выполняет, в состояние ожидания, в то время как V-операция может при некоторых обстоятельствах активизировать другой процесс, приостановленный операцией P.

Взаимоблокировка процессов

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

При параллельном исполнении процессов могут возникать ситуации, при которых два или более процесса все время находятся в заблокированном состоянии. Самый простой случай – когда каждый из двух процессов ожидает ресурс, занятый другим процессом. Из-за такого ожидания ни один из процессов не может продолжить исполнение и освободить в конечном итоге ресурс, необходимый другому процессу. Эта тупиковая ситуация называется дедлоком (dead lock), тупиком, клинчем или взаимоблокировкой.

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

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

Проблема тупиков включает в себя следующие задачи:

  1. предотвращение тупиков.
  2. распознавание тупиков.
  3. восстановление системы после тупиков.

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

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

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

3. Для чего каждая задача получает свой дескриптор. Какие поля, как правило, содержатся в дескрипторе процесса (задачи). Что такое контекст задачи.

1. Дескриптор ОС реального времени

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

Аппаратная поддержка дескрипторов задач. Для аппаратной поддержки работы ОС с дескрипторами задач в процессорах реального времени реализованы соответствующие механизмы. Начиная с Intel 80286 в котором реализован регистр наз: TR task Register, указывающий местонахождение сегмента состояния задачи, в котором при переключении с задачи на задачу автоматически сохраняется содержание регистров процессора. В современных ОС регистр задачи включает в себя сегмент состояния задачи TSS task state segment Дескриптор задачи больше по размерам чем TSS и включает в себя такие общие поля, как идентификатор задачи, имя, приоритет, тип, и т. д.

1. Активный и пассивный процессы.

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

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

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

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

1 Состояние выполнения: все затребованные процессом ресурсы выделены. В этом состоянии может находится только один процесс.

2 готовности к выполнению: ресурсы могут быть предоставлены этому процессу, тогда он перейдет в состояние выполнения.

3 Блокированное или ожидание: затребованные ресурсы не могут быть предоставлены или не завершена операция ввода/вывода.

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

2. Привилегированные и непривилегированные программные модули.

3. Объяснить понятие ресурса. Назвать виды и типы ресурсов.

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

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

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

Основные виды ресурсов.

1) Процессорное время

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

Когда говорят о внешней памяти (магнитные диски, винт), то собственно сама память и доступ к ней разными видами ресурсов. каждый из этих ресурсов может предоставляться независимо от другого. Но для работы с внешней памятью необходимо иметь оба этих ресурса. Внешняя память может разделяться одновременно, а доступ к ней разделяется попеременно (параллельно). Если говорить о внешних устройствах, то оне как правило могут разделяться параллельно, если используются механизмы прямого доступа. если устройство работает с последовательным доступом оно не может считаться разделяемым ресурсом (принтер, стример).

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

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

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

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

Это может быть реализовано двумя способами с помощью статических методов определения памяти и динамических методов. Основной, часто используемый метод – метод динамической памяти. (рисунок нарисуй) 1) Привилегированный модуль, который заказывает в системной области памяти блок ячеек для хранения текущих промежуточных данных. 2) Основное тело реентерабельного программного модуля, которое может быть прервано работает в непривилегированном режиме. 3) Привилегированный модуль освобождающий в системной области памяти блок памяти, используемой для хранения промежуточных данных. Системная область памяти используется динамическим образом для буферизованного ввода/вывода и реентерабельной обработки.

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

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

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

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

1. Интерфейсные оболочки.

2. Понятие многопоточности.

3. Сколько и каких типов дескрипторов задач может быть в системе? От чего должно зависеть это число?

1. Вычислительный ресурс.

2. Обслуживание прерываний.

3. Что такое привилегированный программный модуль. Почему нельзя создать мультипрограммную ОС, в которой бы не было привилегированных программных модулей?

1. Системы программирования. Кросс-системы.

2. Понятие ресурса. Виды унд типы оных.

3. Процесс. Задача.

1. Дескриптор процесса.

Для того чтобы ОС могла управлять процессами она должна располагать всей необходимой для этого информацией. С этой целью на каждый процесс заводится опр. информационная структура, наз. дескриптором процесса или описатель задач или блок управления задачами. В общем случае структура дескриптора процесса: 1) Индентификатор процесса PI process identification; 2) тип или класс процесса, который определяет для супервизора некоторые правила предоставления ресурсов; 3) приоритет процесса, в соответствии с которым супервизор предоставляет ресурсы; 4) опред. в каком состоянии находится процесс. ; 5) защищенная область памяти или адрес такой зоны, в которой хранятся текущие значения регистров процессора. Если процесс прерывается, не закончив работы, эта информация называется контекстом задачи; 6) информацию о ресурсах, которыми процесс владеет или имеет право пользоваться (указатели на открытые файлы, информация о незавершенных процессах ввода/вывода); 7) место или его адрес для организации общения с другими процессами; 8) параметры времени запуска.

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

2. Внешние и внутренние прерывания.

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

1. Мультипрограммный и однопрограммный режимы работы вычислительной системы.

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

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

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

ОС поддерживает мультипрограммирование и старается эффективно использовать ресурсы, путем организации к ним очередей запроса, которые составляются тем или иным способом. Это требование достигается содержанием в памяти более одного процесса ожидающего процессор и более одного процесса готового использовать другие ресурсы. Общая схема выделения ресурсов такова: при необходимости использовать какой либо ресурс, ОЗУ, устройство ввода/вывода процесс обращается к супервизору ОС. Супервизор ОС – центральный управляющий модуль ОС, который может состоять из нескольких модулей например супервизор ввода/вывода, супервизор прерываний, супервизор программ, диспетчер задач и т. п.

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

Не все ОС имеют 2 режима работы. Режимы работы бывают привилегированными (режим супервизора), пользовательскими, режим эмуляции.

Ресурс может быть выдан задаче по ее запросу если:

1 Ресурс свободен и в системе нет запросов от задач более высокого приоритета к этому ресурсу.

2 Текущий запрос и ранее полуученый запросы допускают совместное использование ресурса.

3 Ресурс используется задачей более низкого приоритета и может быть временно отобран.

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

2. Программные прерывания. Распределение прерываний по уровням приоритета.

3. Что такое привилегированный программный модуль. Почему нельзя создать мультипрограммную ОС, в которой бы не было привилегированных программных модулей?

1. Основные ф-ции ОС.

1. Операционные среды. Эмуляторы. Виртуальные машины.

2. Утилиты. Системные программные модули.

3. Для чего каждая задача имеет свой дескриптор.

1. Ресурсы вычислительной системы. Схема выделения ресурсов.

2. Обработка прерываний при участии супервизоров ОС.

1. Мультипрограммные ОС и ОС реального времени.

2. Работа реентерабельного программного модуля.

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

Процессы могут также получать дескрипторы объектов путем наследования дескрипторов во время создания процесса (когда создатель устанавливает флаг наследования дескрипторов при вызове функции CreateProcess, и дескриптор помечен как наследуемый либо в процессе своего создания, либо после создания путем использования Windows-функции SetHandleInformation) или путем получения продублированного дескриптора от другого процесса (см. Windows-функцию DuplicateHandle).

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

Например, библиотеки времени выполнения C и Pascal (более старого языка программирования, аналогичного Delphi) возвращают дескрипторы открытых файлов. Дескрипторы служат в качестве косвенных указателей на ресурсы системы; эта косвенность не дает прикладным программам напрямую манипулировать структурами системных данных.

ПРИМЕЧАНИЕ. Компоненты исполняющей системы и драйверы устройств могут обращаться к объектам непосредственно, поскольку они запущены в режиме ядра и поэтому имеют доступ к структурам объекта в системной памяти. Но они должны объявить о своем использовании объекта, увеличив значение счетчика ссылок, чтобы объект не мог быть удален из памяти, пока он все еще используется.

Однако для успешного использования объекта драйверы устройств должны знать определение внутренней структуры объекта, а для многих объектов она не предоставляется. Взамен драйверам устройств рекомендуется использовать соответствующие API-функции ядра для изменения или чтения информации из объекта. Например, хотя драйверы устройств могут получить указатель на объект типа «процесс» (EPROCESS), его структура им не известна, и должны быть использованы API-функции вида Ps*.

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

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

Просмотр открытых дескрипторов.

Запустите Process Explorer и убедитесь, что нижняя панель включена и настроена на показ открытых дескрипторов. (View (Вид) — Lower Pane View (Просмотр нижней панели) — Handles (Дескрипторы)). После этого откройте окно командной строки и просмотрите таблицу дескрипторов для нового процесса Cmd.exe. Вы должны увидеть дескриптор открытого файла для текущего каталога. Например, предположим, что текущим является каталог C:UsersAdministrator, тогда Process Explorer покажет следующее.

Теперь поставьте Process Explorer на паузу, нажав клавишу Пробел или щелкнув на пунктах View (Вид) — Update Speed (Изменить скорость) — Pause (Пауза).

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

Свойство выделения разным цветом, имеющееся в Process Explorer, делает заметнее изменения в таблице дескрипторов. Например, если процесс допускает утечку дескрипторов, просмотр таблицы дескрипторов с помощью Process Explorer может быстро показать, какой дескриптор или какие дескрипторы были открыты, но не были закрыты. (Обычно виден длинный список дескрипторов для одного и того же объекта.) Эта информация поможет программисту обнаружить утечку дескрипторов.

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

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

Посмотрите, к примеру, на следующий, частично показанный вывод, полученный с помощью средства Handle при изучении дескрипторов файловых объектов, находящихся в таблице дескрипторов для процесса Cmd.exe до и после изменения каталога. По умолчанию Handle отфильтровывает нефайловые дескрипторы, пока не будет использован ключ –a, который приводит к выводу всех дескрипторов в процессе, аналогично Process Explorer.

C:>handle -p cmd.exe

Copyright (C) 1997-2011 Mark Russinovich

cmd.exe pid: 5124 Alex-LaptopAlex Ionescu

3C: File (R-D) C:WindowsSystem32en-USKernelBase.dll.mui

C:Windows>handle -p cmd.exe

Copyright (C) 1997-2011 Mark Russinovich

cmd.exe pid: 5124 Alex-LaptopAlex Ionescu

3C: File (R-D) C:WindowsSystem32en-USKernelBase.dll.mui

40: File (RW-) C:Windows

Дескриптор объекта является индексом в таблице дескрипторов, относящейся к конкретному процессу. Этот индекс указывается исполнительным блоком процесса (EPROCESS). Первый индекс дескриптора имеет значение 4, второй — 8 и т. д. Таблица дескрипторов процесса содержит указатели на все объекты, которые процесс открыл для своей работы.

Таблицы дескрипторов реализованы по древовидной схеме, подобной той, которую реализует блок управления памятью x86 для перевода виртуальных адресов в физические, которая дает максимальное значение, превышающее 16 000 000 дескрипторов на процесс.

ПРИМЕЧАНИЕ. В древовидной схеме таблиц таблица верхнего уровня может содержать страницу, заполненную указателями на таблицы среднего уровня, что позволяет иметь более половины миллиарда дескрипторов. Но чтобы поддержать совместимость со схемой дескрипторов, имевшейся в Windows 2000, и унаследовать ограничение в 16 777 216 дескрипторов, таблица верхнего уровня содержит не более 32 указателей на таблицы среднего уровня, устанавливая для более новых версий Windows тот же предел.

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

Например, для систем x86 страница составляет 4096 байт и поделена на записи таблицы дескрипторов размером 8 байт, которых получается 512 минус 1, то есть всего 511 записей в таблице дескрипторов самого низкого уровня. Таблица дескрипторов среднего уровня содержит полную страницу указателей на таблицы нижнего уровня, поэтому количество таблиц дескрипторов нижнего уровня зависит от размера страницы и размера указателя для платформы. Схема таблицы дескрипторов в системе Windows показана на следующем рисунке.

Создание максимального количества дескрипторов.

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

Чтобы увидеть, сколько дескрипторов можно создать на вашей системе, выполните следующие действия:

  1. Загрузите с адреса http://live.sysinternals.com/WindowsInternals исполняемый файл Testlimit, необходимой вам версии для 32- или 64-разрядной версии Windows.
  2. Запустите программу Process Explorer, щелкните на пункте View (Вид) — System Information (Информация о системе) — Memory (Память). Обратите внимание на текущий и максимальный размер выгружаемого пула.

Чтобы показать максимальный размер пула, Process Explorer должен быть правильно настроен на доступ к символам образа ядра, Ntoskrnl.exe. Оставьте это отображение системной информации работающим, чтобы можно было следить за использованием пула при запуске программы Testlimit.

  1. Откройте окно командной строки.
  2. Запустите программу Testlimit с ключом –h (путем ввода команды testlimit –h). Когда программа Testlimit не сможет открыть новый дескриптор, она покажет общее количество тех дескрипторов, которые ей удалось создать. Если количество будет меньше, чем примерно 16 миллионов, значит, вы, наверное, вышли за пределы выгружаемого пула памяти еще до достижения теоретического лимита дескрипторов на один процесс.
  3. Закройте окно командной строки, благодаря чему будет прекращено выполнение процесса Testlimit и будут закрыты все открытые им дескрипторы.

Как показано на следующем рисунке, на системах x86 каждая запись дескриптора состоит из структуры с двумя 32-разрядными элементами: указателем на объект (с флагами) и маской предоставленных прав доступа. На 64-разрядных системах запись таблицы дескрипторов имеет длину 12 байт: 64-разрядный указатель на заголовок объекта и 32-разрядная маска доступа.

Просмотр таблицы дескрипторов с помощью отладчика ядра.

В команде !handle отладчика ядра используются три аргумента: !handle

Индекс дескриптора идентифицирует запись дескриптора в таблице дескрипторов. (Нуль означает «показать все дескрипторы».) Индекс первого дексритора имеет значение 4, второго — 8 и так далее. Например, после ввода команды !handle 4 будет показан первый дескриптор для текущего процесса.

Флаги можно указать в виде поразрядной маски, где разряд 0 означает «показать только информацию в записи дескриптора», разряд 1 означает «показать свободные (то есть неиспользуемые) дескрипторы, а разряд 2 означает «показать информацию об объекте, на который ссылается дескриптор». Следующая команда приводит к показу всех подробностей о таблице дескрипторов для процесса с идентификатором 0x62C:

lkd> !handle 0 7 62c

processor number 0, process 000000000000062c

Searching for Process with C >

SessionId: 1 Cid: 062c Peb: 7fffffdb000 ParentCid: 0558

DirBase: 7e401000 ObjectTable: fffff8a00381fc80 HandleCount: 111.

Handle table at fffff8a0038fa000 with 113 Entries in use

0000: free handle, Entry address fffff8a0038fa000, Next Entry 00000000fffffffe

0004: Object: fffff8a005022b70 GrantedAccess: 00000003 Entry: fffff8a0038fa010

Object: fffff8a005022b70 Type: (fffffa8002778f30) Directory

ObjectHeader: fffff8a005022b40fffff8a005022b40 (new version)

HandleCount: 25 PointerCount: 63

Directory Object: fffff8a000004980 Name: KnownDlls

0008: Object: fffffa8005226070 GrantedAccess: 00100020 Entry: fffff8a0038fa020

Object: fffffa8005226070 Type: (fffffa80027b3080) File

ObjectHeader: fffffa8005226040fffffa8005226040 (new version)

HandleCount: 1 PointerCount: 1

Directory Object: 00000000 Name: Program FilesDebugging Tools for Windows (x64)

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

Третий флаг показывает, должно ли закрытие объекта генерировать контрольное сообщение (флаг не показывается в Windows, диспетчер объектов использует его для внутренних нужд). Бит защиты от закрытия хранится в неиспользованной части маски доступа и показывает, разрешено ли вызывающей программе закрыть этот дескриптор (флаг может быть установлен с помощью системного вызова NtSetInformationObject).

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

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

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

Поиск открытых файлов с помощью отладчика ядра.

Хотя для поиска дескрипторов открытых файлов можно воспользоваться такими средствами, как Process Explorer, Handle и OpenFiles.exe, они недоступны при просмотре аварийного дампа или удаленном анализе системы.

Вместо них для поиска дескрипторов, отрытых для файлов на том или ином томе, можно воспользоваться командой !devhandles.

  1. Сначала нужно выбрать букву диска, представляющего интерес, и получить указатель на его объект Device. Для этого, как показано ниже, можно воспользоваться командой !object:

1: kd> !object Global??C:

Object: fffff8a00016ea40 Type: (fffffa8000c38bb0) SymbolicLink

ObjectHeader: fffff8a00016ea10 (new version)

HandleCount: 0 PointerCount: 1

Directory Object: fffff8a000008060 Name: C:

Target String is ‘DeviceHarddiskVolume1’

Drive Letter Index is 3 (C:)

  1. Затем нужно воспользоваться командой !object, чтобы получить объект

Device для нужного имени тома:

1: kd> !object DeviceHarddiskVolume1

Object: fffffa8001bd3cd0 Type: (fffffa8000ca0750) Device

  1. Теперь можно воспользоваться указателем на объект Device, вставив его в команду !devhandles. Каждый показанный объект указывает на файл:

Checking handle table for process 0xfffffa8000c819e0

Kernel handle table at fffff8a000001830 with 434 entries in use

SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000

DirBase: 00187000 ObjectTable: fffff8a000001830 HandleCount: 434.

0048: Object: fffffa8001d4f2a0 GrantedAccess: 0013008b Entry: fffff8a000003120

Object: fffffa8001d4f2a0 Type: (fffffa8000ca0360) File

ObjectHeader: fffffa8001d4f270 (new version)

HandleCount: 1 PointerCount: 19

Directory Object: 00000000 Name: WindowsSystem32LogFilesWMI

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

Процессы могут также получать дескрипторы объектов путем наследования дескрипторов во время создания процесса (когда создатель устанавливает флаг наследования дескрипторов при вызове функции CreateProcess, и дескриптор помечен как наследуемый либо в процессе своего создания, либо после создания путем использования Windows-функции SetHandleInformation) или путем получения продублированного дескриптора от другого процесса (см. Windows-функцию DuplicateHandle).

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

Например, библиотеки времени выполнения C и Pascal (более старого языка программирования, аналогичного Delphi) возвращают дескрипторы открытых файлов. Дескрипторы служат в качестве косвенных указателей на ресурсы системы; эта косвенность не дает прикладным программам напрямую манипулировать структурами системных данных.

ПРИМЕЧАНИЕ. Компоненты исполняющей системы и драйверы устройств могут обращаться к объектам непосредственно, поскольку они запущены в режиме ядра и поэтому имеют доступ к структурам объекта в системной памяти. Но они должны объявить о своем использовании объекта, увеличив значение счетчика ссылок, чтобы объект не мог быть удален из памяти, пока он все еще используется.

Однако для успешного использования объекта драйверы устройств должны знать определение внутренней структуры объекта, а для многих объектов она не предоставляется. Взамен драйверам устройств рекомендуется использовать соответствующие API-функции ядра для изменения или чтения информации из объекта. Например, хотя драйверы устройств могут получить указатель на объект типа «процесс» (EPROCESS), его структура им не известна, и должны быть использованы API-функции вида Ps*.

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

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

Просмотр открытых дескрипторов.

Запустите Process Explorer и убедитесь, что нижняя панель включена и настроена на показ открытых дескрипторов. (View (Вид) — Lower Pane View (Просмотр нижней панели) — Handles (Дескрипторы)). После этого откройте окно командной строки и просмотрите таблицу дескрипторов для нового процесса Cmd.exe. Вы должны увидеть дескриптор открытого файла для текущего каталога. Например, предположим, что текущим является каталог C:UsersAdministrator, тогда Process Explorer покажет следующее.

Process-Explorer

Теперь поставьте Process Explorer на паузу, нажав клавишу Пробел или щелкнув на пунктах View (Вид) — Update Speed (Изменить скорость) — Pause (Пауза).

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

Свойство выделения разным цветом, имеющееся в Process Explorer, делает заметнее изменения в таблице дескрипторов. Например, если процесс допускает утечку дескрипторов, просмотр таблицы дескрипторов с помощью Process Explorer может быстро показать, какой дескриптор или какие дескрипторы были открыты, но не были закрыты. (Обычно виден длинный список дескрипторов для одного и того же объекта.) Эта информация поможет программисту обнаружить утечку дескрипторов.

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

открытые-дескрипторы

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

Посмотрите, к примеру, на следующий, частично показанный вывод, полученный с помощью средства Handle при изучении дескрипторов файловых объектов, находящихся в таблице дескрипторов для процесса Cmd.exe до и после изменения каталога. По умолчанию Handle отфильтровывает нефайловые дескрипторы, пока не будет использован ключ –a, который приводит к выводу всех дескрипторов в процессе, аналогично Process Explorer.

C:>handle -p cmd.exe

Handle v3.46

Copyright (C) 1997-2011 Mark Russinovich

Sysinternals — www.sysinternals.com

———————————————————————-

cmd.exe pid: 5124 Alex-LaptopAlex Ionescu

3C: File (R-D) C:WindowsSystem32en-USKernelBase.dll.mui

44: File (RW-) C:

C:>cd windows

C:Windows>handle -p cmd.exe

Handle v3.46

Copyright (C) 1997-2011 Mark Russinovich

Sysinternals — www.sysinternals.com

———————————————————————-

cmd.exe pid: 5124 Alex-LaptopAlex Ionescu

3C: File (R-D) C:WindowsSystem32en-USKernelBase.dll.mui

40: File (RW-) C:Windows

Дескриптор объекта является индексом в таблице дескрипторов, относящейся к конкретному процессу. Этот индекс указывается исполнительным блоком процесса (EPROCESS). Первый индекс дескриптора имеет значение 4, второй — 8 и т. д. Таблица дескрипторов процесса содержит указатели на все объекты, которые процесс открыл для своей работы.

Таблицы дескрипторов реализованы по древовидной схеме, подобной той, которую реализует блок управления памятью x86 для перевода виртуальных адресов в физические, которая дает максимальное значение, превышающее 16 000 000 дескрипторов на процесс.

ПРИМЕЧАНИЕ. В древовидной схеме таблиц таблица верхнего уровня может содержать страницу, заполненную указателями на таблицы среднего уровня, что позволяет иметь более половины миллиарда дескрипторов. Но чтобы поддержать совместимость со схемой дескрипторов, имевшейся в Windows 2000, и унаследовать ограничение в 16 777 216 дескрипторов, таблица верхнего уровня содержит не более 32 указателей на таблицы среднего уровня, устанавливая для более новых версий Windows тот же предел.

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

Например, для систем x86 страница составляет 4096 байт и поделена на записи таблицы дескрипторов размером 8 байт, которых получается 512 минус 1, то есть всего 511 записей в таблице дескрипторов самого низкого уровня. Таблица дескрипторов среднего уровня содержит полную страницу указателей на таблицы нижнего уровня, поэтому количество таблиц дескрипторов нижнего уровня зависит от размера страницы и размера указателя для платформы. Схема таблицы дескрипторов в системе Windows показана на следующем рисунке.

таблица-дескрипторов

Создание максимального количества дескрипторов.

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

Чтобы увидеть, сколько дескрипторов можно создать на вашей системе, выполните следующие действия:

  1. Загрузите с адреса http://live.sysinternals.com/WindowsInternals исполняемый файл Testlimit, необходимой вам версии для 32- или 64-разрядной версии Windows.
  2. Запустите программу Process Explorer, щелкните на пункте View (Вид) — System Information (Информация о системе) — Memory (Память). Обратите внимание на текущий и максимальный размер выгружаемого пула.

Чтобы показать максимальный размер пула, Process Explorer должен быть правильно настроен на доступ к символам образа ядра, Ntoskrnl.exe. Оставьте это отображение системной информации работающим, чтобы можно было следить за использованием пула при запуске программы Testlimit.

  1. Откройте окно командной строки.
  2. Запустите программу Testlimit с ключом –h (путем ввода команды testlimit –h). Когда программа Testlimit не сможет открыть новый дескриптор, она покажет общее количество тех дескрипторов, которые ей удалось создать. Если количество будет меньше, чем примерно 16 миллионов, значит, вы, наверное, вышли за пределы выгружаемого пула памяти еще до достижения теоретического лимита дескрипторов на один процесс.
  3. Закройте окно командной строки, благодаря чему будет прекращено выполнение процесса Testlimit и будут закрыты все открытые им дескрипторы.

Как показано на следующем рисунке, на системах x86 каждая запись дескриптора состоит из структуры с двумя 32-разрядными элементами: указателем на объект (с флагами) и маской предоставленных прав доступа. На 64-разрядных системах запись таблицы дескрипторов имеет длину 12 байт: 64-разрядный указатель на заголовок объекта и 32-разрядная маска доступа.

структура-записи

Просмотр таблицы дескрипторов с помощью отладчика ядра.

В команде !handle отладчика ядра используются три аргумента: !handle <индекс дескриптора> <флаги> <идентификатор процесса>

Индекс дескриптора идентифицирует запись дескриптора в таблице дескрипторов. (Нуль означает «показать все дескрипторы».) Индекс первого дексритора имеет значение 4, второго — 8 и так далее. Например, после ввода команды !handle 4 будет показан первый дескриптор для текущего процесса.

Флаги можно указать в виде поразрядной маски, где разряд 0 означает «показать только информацию в записи дескриптора», разряд 1 означает «показать свободные (то есть неиспользуемые) дескрипторы, а разряд 2 означает «показать информацию об объекте, на который ссылается дескриптор». Следующая команда приводит к показу всех подробностей о таблице дескрипторов для процесса с идентификатором 0x62C:

lkd> !handle 0 7 62c

processor number 0, process 000000000000062c

Searching for Process with Cid == 62c

PROCESS fffffa80052a7060

SessionId: 1 Cid: 062c Peb: 7fffffdb000 ParentCid: 0558

DirBase: 7e401000 ObjectTable: fffff8a00381fc80 HandleCount: 111.

Image: windbg.exe

Handle table at fffff8a0038fa000 with 113 Entries in use

0000: free handle, Entry address fffff8a0038fa000, Next Entry 00000000fffffffe

0004: Object: fffff8a005022b70 GrantedAccess: 00000003 Entry: fffff8a0038fa010

Object: fffff8a005022b70 Type: (fffffa8002778f30) Directory

ObjectHeader: fffff8a005022b40fffff8a005022b40 (new version)

HandleCount: 25 PointerCount: 63

Directory Object: fffff8a000004980 Name: KnownDlls

0008: Object: fffffa8005226070 GrantedAccess: 00100020 Entry: fffff8a0038fa020

Object: fffffa8005226070 Type: (fffffa80027b3080) File

ObjectHeader: fffffa8005226040fffffa8005226040 (new version)

HandleCount: 1 PointerCount: 1

Directory Object: 00000000 Name: Program FilesDebugging Tools for Windows (x64)

{HarddiskVolume2}

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

Третий флаг показывает, должно ли закрытие объекта генерировать контрольное сообщение (флаг не показывается в Windows, диспетчер объектов использует его для внутренних нужд). Бит защиты от закрытия хранится в неиспользованной части маски доступа и показывает, разрешено ли вызывающей программе закрыть этот дескриптор (флаг может быть установлен с помощью системного вызова NtSetInformationObject).

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

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

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

Поиск открытых файлов с помощью отладчика ядра.

Хотя для поиска дескрипторов открытых файлов можно воспользоваться такими средствами, как Process Explorer, Handle и OpenFiles.exe, они недоступны при просмотре аварийного дампа или удаленном анализе системы.

Вместо них для поиска дескрипторов, отрытых для файлов на том или ином томе, можно воспользоваться командой !devhandles.

  1. Сначала нужно выбрать букву диска, представляющего интерес, и получить указатель на его объект Device. Для этого, как показано ниже, можно воспользоваться командой !object:

1: kd> !object Global??C:

Object: fffff8a00016ea40 Type: (fffffa8000c38bb0) SymbolicLink

ObjectHeader: fffff8a00016ea10 (new version)

HandleCount: 0 PointerCount: 1

Directory Object: fffff8a000008060 Name: C:

Target String is ‘DeviceHarddiskVolume1’

Drive Letter Index is 3 (C:)

  1. Затем нужно воспользоваться командой !object, чтобы получить объект

Device для нужного имени тома:

1: kd> !object DeviceHarddiskVolume1

Object: fffffa8001bd3cd0 Type: (fffffa8000ca0750) Device

  1. Теперь можно воспользоваться указателем на объект Device, вставив его в команду !devhandles. Каждый показанный объект указывает на файл:

!devhandles fffffa8001bd3cd0

Checking handle table for process 0xfffffa8000c819e0

Kernel handle table at fffff8a000001830 with 434 entries in use

PROCESS fffffa8000c819e0

SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000

DirBase: 00187000 ObjectTable: fffff8a000001830 HandleCount: 434.

Image: System

0048: Object: fffffa8001d4f2a0 GrantedAccess: 0013008b Entry: fffff8a000003120

Object: fffffa8001d4f2a0 Type: (fffffa8000ca0360) File

ObjectHeader: fffffa8001d4f270 (new version)

HandleCount: 1 PointerCount: 19

Directory Object: 00000000 Name: WindowsSystem32LogFilesWMI

RtBackupEtwRTEventLog-Application.etl {HarddiskVolume1}.

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

Эта статья посвящена диспетчеру задач Windows 10, хотя большая часть этого относится и к Windows 7. Microsoft значительно улучшила диспетчер задач с момента выпуска Windows 7.

Как запустить диспетчер задач

Windows предлагает множество способов запуска диспетчера задач. Нажмите Ctrl + Shift + Esc, чтобы открыть диспетчер задач с помощью сочетания клавиш, или щелкните правой кнопкой мыши панель задач Windows и выберите «Диспетчер задач».

Вы также можете нажать Ctrl + Alt + Delete и затем нажать «Диспетчер задач» на появившемся экране или найти ярлык диспетчера задач в меню «Пуск».

Простой вид

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

Вы также можете щелкнуть правой кнопкой мыши приложение в этом окне, чтобы получить доступ к дополнительным параметрам:

  • Переключиться на: переключение в окно приложения, вывод его на переднюю часть рабочего стола и фокусировка на нем. Это полезно, если вы не уверены, какое окно связано с каким приложением.
  • Завершить задачу: завершить процесс. Это работает так же, как кнопка «Завершить задачу».
  • Запуск новой задачи: откройте окно «Создать новую задачу», где вы можете указать адрес программы, папки, документа или веб-сайта, и Windows откроет его.
  • Всегда сверху: сделайте само окно диспетчера задач «всегда сверху» других окон на рабочем столе, чтобы вы могли видеть его всегда.
  • Открыть местоположение файла: открыть окно проводника, показывающее расположение файла .exe программы.
  • Поиск в Интернете: выполните поиск Bing по имени приложения и имени файла программы. Это поможет вам точно понять, что это за программа и что она делает.
  • Свойства: откройте окно свойств для файла .exe программы. Здесь вы можете настроить параметры совместимости и посмотреть, например, номер версии программы.

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

Чтобы увидеть значок на панели задач без отображения диспетчера задач на панели задач, выберите «Параметры» → «Скрыть при сворачивании» в полном интерфейсе диспетчера задач и сверните окно диспетчера задач.

Объяснение вкладок диспетчера задач

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

Если выбрано «Подробнее», диспетчер задач содержит следующие вкладки:

  • Процессы: список запущенных приложений и фоновых процессов в вашей системе вместе с информацией о процессоре, памяти, диске, сети, графическом процессоре и других ресурсах.
  • Производительность: графики в реальном времени, показывающие общее использование ресурсов ЦП, памяти, диска, сети и графического процессора для вашей системы. Здесь вы также найдете много других подробностей, начиная с IP-адреса вашего компьютера и заканчивая названиями моделей процессора и графического процессора вашего компьютера.
  • История приложений: информация о том, сколько ресурсов ЦП и приложений сети использовалось для вашей текущей учетной записи пользователя. Это относится только к новым приложениям универсальной платформы Windows (UWP), другими словами, к приложениям Store, а не к традиционным приложениям Windows для настольных ПК (приложения Win32).
  • Автозагрузка: список ваших автозагрузочных программ, которые являются приложениями Windows, автоматически запускается при входе в учетную запись пользователя. Вы можете отключить автозагрузку программ отсюда, хотя вы также можете сделать это из Настройки> Приложения> Автозагрузка.
  • Пользователи: учетные записи пользователей, которые в данный момент зарегистрированы на вашем ПК, сколько ресурсов они используют и какие приложения они используют.
  • Подробно: Более подробная информация о процессах, запущенных в вашей системе. Это в основном традиционная вкладка «Процессы» из диспетчера задач в Windows 7.
  • Сервисы: Управление системными сервисами. Это та же информация, что и в services.msc, консоли управления службами.

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

На вкладке «Процессы» представлен полный список процессов, запущенных в вашей системе. Если вы отсортируете его по имени, список будет разбит на три категории. Группа «Приложения» показывает тот же список запущенных приложений, который вы видите в упрощенном представлении «Меньше деталей». Две другие категории — это фоновые процессы и процессы Windows, и они показывают процессы, которые не отображаются в стандартном упрощенном представлении диспетчера задач.

Например, такие инструменты, как Dropbox, ваша антивирусная программа, процессы фонового обновления и аппаратные утилиты со значками области уведомлений (на панели задач) отображаются в списке фоновых процессов. Процессы Windows включают в себя различные процессы, которые являются частью операционной системы Windows, хотя некоторые из них по какой-то причине отображаются в разделе «Фоновые процессы».

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

  • Развернуть: Некоторые приложения, такие как Google Chrome, имеют несколько процессов, сгруппированных здесь. Другие приложения имеют несколько окон, которые являются частью одного процесса. Вы можете выбрать развернуть, дважды щелкнуть процесс или щелкнуть стрелку слева, чтобы просмотреть всю группу процессов по отдельности. Эта опция появляется только при щелчке правой кнопкой мыши по группе.
  • Свернуть: Свернуть расширенную группу.
  • Завершить задачу: завершить процесс. Вы также можете нажать кнопку «Завершить задачу» под списком.
  • Перезагрузка: этот параметр появляется только при щелчке правой кнопкой мыши в проводнике Windows. Это позволяет перезапустить explorer.exe вместо простого завершения задачи. В более старых версиях Windows необходимо было завершить задачу Explorer.exe, а затем запустить ее вручную, чтобы устранить проблемы с рабочим столом Windows, панелью задач или меню «Пуск». Теперь вы можете просто использовать эту опцию перезагрузки.
  • Значения ресурса: позволяет выбрать, хотите ли вы видеть процентные или точные значения для памяти, диска и сети. Другими словами, вы можете выбрать, хотите ли вы видеть точный объем памяти в мегабайтах или процент использования памяти вашей системой.
  • Создать файл дампа: это инструмент отладки для программистов. Он захватывает снимок памяти программы и сохраняет его на диск.
  • Перейти к деталям: перейдите к процессу на вкладке Подробности, чтобы увидеть более подробную техническую информацию.
  • Расположение файла: откройте проводник с выбранным файлом .exe.
  • Поиск в Интернете: поиск по названию процесса на Bing.
  • Свойства: откройте окно свойств файла .exe, связанного с процессом.

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

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

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

  • Тип: категория процесса, которая представляет собой приложение, фоновый процесс или процесс Windows.
  • Статус: если программа кажется замороженной, здесь отображается сообщение «Не отвечает». Программы иногда начинают отвечать через некоторое время, а иногда остаются замороженными. Если Windows приостановила программу для экономии энергии, в этом столбце появится зеленый лист. Современные приложения UWP могут приостанавливать энергосбережение, а Windows также может приостанавливать работу традиционных настольных приложений.
  • Издатель: имя издателя программы. Например, Chrome отображает «Google Inc.», а Microsoft Word отображает «Microsoft Corporation».
  • PID: номер идентификатора процесса, который Windows связал с процессом. Идентификатор процесса может использоваться некоторыми функциями или системными утилитами. Windows назначает уникальный идентификатор процесса при каждом запуске программы, а идентификатор процесса позволяет различать несколько запущенных процессов, если запущено несколько экземпляров одной и той же программы.
  • Имя процесса: имя файла процесса. Например, File Explorer — это файл explorer.exe, Microsoft Word — это WINWORD.EXE, а сам диспетчер задач — Taskmgr.exe.
  • Командная строка: полная командная строка, используемая для запуска процесса. Здесь показан полный путь к файлу .exe процесса (например, «C: WINDOWS Explorer.EXE»), а также все параметры командной строки, использованные для запуска программы.
  • ЦП: загрузка ЦП процесса, отображаемая в процентах от общего объема доступных ресурсов ЦП.
    Память. Объем физической рабочей памяти вашей системы, используемой процессом в данный момент, отображается в МБ или ГБ.
  • Диск: активность диска, создаваемая процессом, отображается как МБ/с. Если процесс не читает или не записывает на диск в данный момент, он будет отображать 0 МБ/с.
  • Сеть: использование сети процессом в текущей первичной сети, отображаемое в Мбит/с.
  • Графический процессор: ресурсы графического процессора (графического процессора), используемые процессом, отображаются в процентах от доступных ресурсов графического процессора.
  • Механизм графического процессора: устройство и процессор графического процессора, используемые процессом. Если в вашей системе несколько графических процессоров, это покажет вам, какой графический процессор используется процессом. См. Вкладку «Производительность», чтобы узнать, какой номер («GPU 0» или «GPU 1» связан с каким физическим GPU.
  • Энергопотребление. Предполагаемое энергопотребление процесса с учетом текущей активности процессора, диска и графического процессора. Например, он может сказать «Очень низкий», если процесс не использует много ресурсов, или «Очень высокий», если процесс использует много ресурсов. Если он высокий, это означает, что он потребляет больше электроэнергии и сокращает время автономной работы, если у вас есть ноутбук.
  • Тенденция энергопотребления: предполагаемое влияние на энергопотребление с течением времени. Столбец Power Usage просто показывает текущее энергопотребление, но этот столбец отслеживает энергопотребление с течением времени. Например, если программа время от времени потребляет много энергии, но не потребляет много энергии, в столбце энергопотребления может быть написано «Очень низко», а в столбце «Тенденция энергопотребления» — «Высокий» или «Умеренный».

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

Параметры меню диспетчера задач

В строке меню диспетчера задач также есть несколько полезных опций:

  • Файл → Запустить новую задачу. Запустите программу, папку, документ или сетевой ресурс, указав его адрес. Вы также можете установить флажок «Создать эту задачу с правами администратора», чтобы запустить программу от имени администратора.
  • Параметры → Всегда сверху. Окно диспетчера задач всегда будет поверх других окон, пока эта опция включена.
  • Параметры → Свернуть при использовании. Диспетчер задач будет свернут при каждом щелчке правой кнопкой мыши по процессу и выборе «Переключить на». Несмотря на нечетное имя, это все, что делает этот параметр.
  • Параметры → Скрыть при сворачивании : Диспетчер задач будет продолжать работать в области уведомлений (на панели задач), если вы нажмете кнопку сворачивания, если вы включите эту опцию.
  • Вид → Обновить сейчас. Немедленно обновите данные, отображаемые в диспетчере задач.
  • Вид → Скорость обновления. Выберите, как часто будут обновляться данные, отображаемые в диспетчере задач: высокая, средняя, ​​низкая или приостановленная. Если выбрано «Приостановлено», данные не будут обновляться, пока вы не выберете более высокую частоту или не нажмете «Обновить сейчас».
  • Вид → Группировать по типу: если этот параметр включен, процессы на вкладке «Процессы» группируются в три категории: «Приложения», «Фоновые процессы» и «Процессы Windows». Если эта опция отключена, они отображаются смешанными в списке.
  • Вид → Развернуть все: развернуть все группы процессов в списке. Например, Google Chrome использует несколько процессов, и они отображаются объединенными в группу «Google Chrome». Вы также можете развернуть отдельные группы процессов, нажав стрелку слева от их имени.
  • Вид → Свернуть все . Свернуть все группы процессов в списке. Например, все процессы Google Chrome будут отображаться в категории Google Chrome.

Просмотр информации о производительности

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

Вы увидите маленькие графики на левой панели, и вы можете выбрать опцию, чтобы увидеть большую диаграмму на правой панели. График показывает использование ресурсов за последние 60 секунд.

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

  • Процессор: название и номер модели вашего процессора, его скорость, количество ядер, а также включенные и доступные функции виртуализации оборудования. Он также показывает « время безотказной работы » вашей системы, то есть сколько времени ваша система работает с момента последней загрузки.
  • Память: сколько у вас оперативной памяти, ее скорость и сколько слотов оперативной памяти на вашей материнской плате. Вы также можете увидеть, сколько вашей памяти в настоящее время заполнено кэшированными данными. Windows называет это «резервом». Эти данные будут готовы и ждут, если это потребуется вашей системе, но Windows автоматически сбросит кэшированные данные и освободит место, если ей потребуется больше памяти для другой задачи.
  • Диск: название и номер модели вашего диска, его размер и текущая скорость чтения и записи.
    Wi-Fi или Ethernet : Windows отображает здесь имя сетевого адаптера и его IP-адреса (как IPv4, так и IPv6). Для подключений Wi-Fi вы также можете увидеть стандарт Wi-Fi, используемый в текущем подключении, например, 802.11ac .
  • Графический процессор: на панели графического процессора показаны отдельные графики для различных видов деятельности — например, 3D или видео кодирование или декодирование. Графический процессор имеет собственную встроенную память, поэтому он также показывает использование памяти графическим процессором. Здесь вы также можете увидеть название и номер модели вашего графического процессора и версию используемого графического драйвера. Вы можете контролировать использование графического процессора прямо из диспетчера задач без какого-либо стороннего программного обеспечения.

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

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

История приложения

Вкладка «Журнал приложений» применяется только к приложениям универсальной платформы Windows (UWP). Он не отображает информацию о традиционных настольных приложениях Windows, поэтому большинству людей она не покажется слишком полезной.

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

  • CPU Time: количество процессорного времени, которое программа использовала в течение этого периода времени.
  • Сеть: общий объем данных, переданных программой по сети за этот период времени.
  • Ограниченная сеть: объем данных, передаваемых по дозированным сетям. Вы можете настроить сеть как измеренную для сохранения данных на ней. Эта опция предназначена для сетей, в которых у вас ограниченные данные, например, для мобильной сети, к которой вы привязываетесь.
  • Обновления листов: объем данных, загруженных программой для отображения обновленных живых плиток в меню «Пуск» Windows 10.
  • Безмерная сеть: объем данных, передаваемых по немерциальным сетям.
  • Загрузки: количество данных, загруженных программой во всех сетях.
  • Uploads: количество данных, загруженных программой во всех сетях.

Контроль запуска приложений

Вкладка «Автозагрузка» — это встроенный в Windows 10 диспетчер запуска программ. В нем перечислены все приложения, которые Windows автоматически запускает для вашей текущей учетной записи пользователя. Например, здесь отображаются программы в папке «Автозагрузка» и программы, настроенные для запуска в реестре Windows.

Чтобы отключить программу запуска, щелкните ее правой кнопкой мыши и выберите «Отключить» или выберите ее и нажмите кнопку «Отключить». Чтобы снова включить его, нажмите «Включить», который появляется здесь вместо этого. Вы также можете использовать Настройки → Приложения → Интерфейс запуска для управления автозагрузкой программ.

В верхнем правом углу окна вы увидите «Время последнего BIOS» в некоторых системах. Это показывает, сколько времени понадобилось вашему BIOS (или прошивке UEFI) для инициализации вашего оборудования при последней загрузке вашего ПК. Это не появится во всех системах. Вы не увидите этого, если BIOS вашего компьютера не сообщит об этом Windows.

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

  • Название: название программы.
  • Издатель: имя издателя программы.
  • Статус: здесь отображается «Включено», если программа автоматически запускается при входе в систему. Здесь отображается «Отключено», если вы отключили задачу запуска.
  • Влияние при запуске: оценка объема ресурсов процессора и диска, которые программа использует при запуске. Windows измеряет и отслеживает это в фоновом режиме. Облегченная программа покажет «Низкий», а тяжелая программа — «Высокий». Отключенные программы — «Нет». Вы можете ускорить процесс загрузки, отключив программы с «высоким» эффектом запуска, чем отключив программы с «Низкое влияние.
  • Тип запуска: показывает, запускается ли программа из-за записи в реестре («Registry») или из-за того, что она находится в папке автозагрузки («Folder.»).
  • Дисковый ввод-вывод при запуске: Дисковая активность, которую программа выполняет при запуске, в МБ. Windows измеряет и записывает это каждую загрузку.
  • CPU при запуске: количество процессорного времени, которое программа использует при запуске, в мс. Windows измеряет и записывает это при загрузке.
  • Выполняется сейчас: здесь отображается слово «Выполняется», если в данный момент запущена программа запуска. Если в этом столбце отображается запись для программы, программа отключилась или вы закрыли ее самостоятельно.
  • Disabled Time: для запуска программ, которые вы отключили, здесь отображается дата и время, когда вы отключили программу
  • Командная строка: показывает полную командную строку, с которой запускается программа запуска, включая все параметры командной строки.

Проверка пользователей

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

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

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

Если щелкнуть правой кнопкой мыши заголовки, доступны следующие столбцы:

  • Идентификатор: У каждой зарегистрированной учетной записи пользователя есть свой номер идентификатора сеанса. Сеанс «0» зарезервирован для системных служб, в то время как другие приложения могут создавать свои собственные учетные записи пользователей. Обычно вам не нужно знать этот номер, поэтому он по умолчанию скрыт.
  • Сеанс: тип сеанса это. Например, он скажет «Консоль», если к нему обращаются в вашей локальной системе. Это в первую очередь полезно для серверных систем с удаленными рабочими столами.
  • Имя клиента: имя удаленной клиентской системы, обращающейся к сеансу, если к нему обращаются удаленно.
  • Состояние: состояние сеанса — например, если сеанс пользователя заблокирован, в статусе будет указано «Отключено».
  • CPU: общий процессор, используемый процессами пользователя.
  • Память: Общая память, используемая процессами пользователя.
  • Диск: Общая активность диска, связанная с процессами пользователя.
  • Сеть: Общая сетевая активность от процессов пользователя.

Управление подробными процессами

Это самая подробная панель диспетчера задач. Это похоже на вкладку «Процессы», но она предоставляет дополнительную информацию и показывает процессы из всех учетных записей пользователей в вашей системе. Если вы использовали диспетчер задач Windows 7, это будет вам знакомо; это та же информация, что отображается на вкладке «Процессы» в Windows 7.

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

  • Завершить задачу: завершить процесс. Это та же опция, что и на обычной вкладке Процессы.
  • Завершить дерево процессов: завершить процесс и все процессы, созданные процессом.
  • Установить приоритет: установить приоритет для процесса: низкий, ниже нормального, нормальный, выше нормального, высокий и в реальном времени. Процессы запускаются с нормальным приоритетом. Низкий приоритет идеален для фоновых процессов, а более высокий — для настольных процессов. Тем не менее, Microsoft рекомендует не возиться с приоритетом в реальном времени.
  • Установить сходство: установить сходство процессоров с процессами, другими словами, на каком процессоре выполняется процесс. По умолчанию процессы выполняются на всех процессорах в вашей системе. Вы можете использовать это, чтобы ограничить процесс определенным процессором. Например, это иногда полезно для старых игр и других программ, которые предполагают, что у вас только один процессор. Даже если у вас есть один процессор на вашем компьютере, каждое ядро ​​выглядит как отдельный процессор .
  • Анализ цепочки ожидания: посмотрите, какие потоки в процессах ожидают. Это показывает, какие процессы и потоки ожидают использования ресурса, используемого другим процессом, и является полезным инструментом отладки для диагностики зависаний.
  • Виртуализация контроля учетных записей: включение или отключение виртуализации контроля учетных записей для процесса. Эта функция исправляет приложения, которым требуется доступ администратора, путем виртуализации их доступа к системным файлам, перенаправления их доступа к файлам и реестру в другие папки. Он в основном используется старыми программами, например программами эпохи Windows XP, которые не были написаны для современных версий Windows. Это опция отладки для разработчиков, и вам не нужно ее менять.
  • Создать файл дампа: сделать снимок памяти программы и сохранить его на диск . Это полезный инструмент отладки для программистов.
  • Расположение файла: откройте окно проводника, показывающее исполняемый файл процесса.
  • Поиск в Интернете: выполните поиск Bing по названию процесса.
  • Свойства: просмотр окна свойств .exe-файла процесса.
  • Перейти к сервису(ам): Показать сервисы, связанные с процессом, на вкладке Сервисы. Это особенно полезно для процессов svchost.exe. Услуги будут выделены.

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

Вот что означает каждый возможный столбец:

  • Имя пакета: для приложений универсальной платформы Windows (UWP) отображается имя пакета приложения, из которого происходит процесс. Для других приложений этот столбец пуст. Приложения UWP обычно распространяются через Microsoft Store.
  • PID: уникальный идентификационный номер процесса, связанный с этим процессом. Это связано с процессом, а не с программой — например, если вы закроете и снова откроете программу, новый процесс программы получит новый идентификационный номер процесса.
  • Состояние: показывает, запущен ли процесс или приостановлен для экономии энергии. Windows 10 всегда «приостанавливает» приложения UWP, которые вы не используете для экономии системных ресурсов. Вы также можете контролировать, приостанавливает ли Windows 10 традиционные процессы на рабочем столе.
  • Имя пользователя: имя учетной записи пользователя, на котором запущен процесс. Здесь вы часто увидите имена учетных записей системных пользователей, такие как SYSTEM и LOCAL SERVICE.
  • Идентификатор сеанса: уникальный номер, связанный с сеансом пользователя, на котором выполняется процесс. Это тот же номер, который указан для пользователя на вкладке «Пользователи».
  • Идентификатор объекта задания: «объект задания, в котором выполняется процесс». Объекты задания — это способ группировки процессов, чтобы ими можно было управлять как группой.
  • ЦП: процент ресурсов ЦП, которые процесс использует в настоящее время для всех ЦП. Если ничто другое не использует процессорное время, Windows покажет Системный процесс простоя, используя его здесь.
    Другими словами, если процесс простоя системы использует 90% ресурсов вашего ЦП, это означает, что другие процессы в вашей системе используют в совокупности 10%, и он простаивал 90% времени.
  • Время ЦП: общее время процессора (в секундах), использованное процессом с момента его запуска. Если процесс закрывается и перезапускается, он будет сброшен. Это хороший способ обнаружить процессоры, загруженные процессором, которые в настоящий момент могут работать вхолостую.
  • Цикл: процент циклов ЦП, который процесс в настоящее время использует для всех ЦП. Непонятно, как именно это отличается от столбца CPU, поскольку документация Microsoft не объясняет этого. Тем не менее, цифры в этом столбце, как правило, очень похожи на столбец CPU, поэтому, скорее всего, подобный фрагмент информации измеряется по-разному.
  • Рабочий набор (память): объем физической памяти, используемый процессом в данный момент.
  • Пиковый рабочий набор (память): максимальный объем физической памяти, используемый процессом.
  • Дельта рабочего набора (память): изменение в памяти рабочего набора с момента последнего обновления данных здесь.
  • Память (активный частный рабочий набор): объем физической памяти, используемый процессом, который не может использоваться другими процессами. Процессы часто кэшируют некоторые данные, чтобы лучше использовать вашу оперативную память , но могут быстро освободить это пространство памяти, если это понадобится другому процессу. Этот столбец исключает данные из приостановленных процессов UWP.
  • Память (частный рабочий набор): объем физической памяти, используемый процессом, который не может использоваться другими процессами. Этот столбец не исключает данные из приостановленных процессов UWP.
  • Память (общий рабочий набор): объем физической памяти, используемой процессом, который может использоваться другими процессами при необходимости.
  • Размер фиксации. Объем виртуальной памяти, которую Windows резервирует для процесса.
  • Выгружаемый пул: объем памяти ядра с возможностью подкачки, которую ядро ​​Windows или драйверы выделяют для этого процесса. Операционная система может переместить эти данные в файл подкачки при необходимости.
  • NP pool: объем нестраничной памяти ядра, выделяемой ядром Windows или драйверами для этого процесса. Операционная система не может переместить эти данные в файл подкачки.
  • Ошибки страниц: количество ошибок страниц, сгенерированных процессом с момента его запуска. Это происходит, когда программа пытается получить доступ к памяти, которой она в данный момент не выделена, и это нормально.
  • PF Delta: изменение количества сбоев страниц с момента последнего обновления.
  • Базовый приоритет: приоритет процесса — например, это может быть Низкий, Нормальный или Высокий. Windows отдает приоритет процессам планирования с более высокими приоритетами. Системные фоновые задачи, которые не являются срочными, могут иметь низкий приоритет по сравнению, например, с процессами настольных программ.
  • Дескрипторы: текущее количество дескрипторов в таблице объектов процесса. Дескрипторы представляют системные ресурсы, такие как файлы, ключи реестра и потоки.
  • Threads: количество активных потоков в процессе. Каждый процесс запускает один или несколько потоков, и Windows выделяет им время процессора. Потоки в процессе разделяют память.
  • Пользовательские объекты: количество «оконных менеджеров », используемых процессом. Это включает в себя окна, меню и курсоры.
  • Объекты GDI: количество объектов интерфейса графического устройства, используемых процессом. Они используются для рисования пользовательского интерфейса.
  • Операции чтения ввода-вывода. Количество операций чтения, выполненных процессом с момента его запуска. Ввод / вывод расшифровывается как ввод / вывод. Это включает в себя файл, сеть и устройство ввода / вывода.
  • Операции ввода-вывода: количество операций записи, выполненных процессом с момента его запуска.
  • Другое ввода/вывода: число операций не чтения и записи, выполненных процессом с момента его запуска. Например, это включает в себя функции управления.
  • Число прочитанных байтов ввода/вывода: общее количество байтов, прочитанных процессом с момента его запуска.
  • Байт записи ввода/вывода : общее количество байтов, записанных процессом с момента его запуска.
  • Другие байты ввода/вывода: общее число байтов, использованных в операциях ввода/вывода без чтения и без записи с момента запуска процесса.
  • Путь к изображению: полный путь к исполняемому файлу процесса.
  • Командная строка: точная командная строка, с которой был запущен процесс, включая исполняемый файл и все аргументы командной строки.
  • Контекст операционной системы : минимальная операционная система, с которой совместима программа, если какая-либо информация включена в файл манифеста приложения. Например, некоторые приложения могут сказать «Windows Vista», некоторые «Windows 7», а другие «Windows 8.1». Большинство вообще ничего не отображает в этом столбце.
  • Платформа: 32-разрядный или 64-разрядный процесс.
  • Повышенные: независимо от того, запущен ли процесс в режиме повышенных прав (другими словами, с правами администратора) или нет. Вы увидите «Нет» или «Да» для каждого процесса.
  • Виртуализация контроля учетных записей: включена ли для процесса виртуализация контроля учетных записей. Это виртуализирует доступ программы к реестру и файловой системе, позволяя программам, разработанным для более старых версий Windows, работать без доступа администратора. Опции включают «Включено», «Отключено» и «Не разрешено» — для процессов, которым требуется доступ к системе.
  • Описание: удобочитаемое описание процесса из файла .exe. Например, chrome.exe имеет описание «Google Chrome», а explorer.exe — «Проводник Windows». Это то же имя, которое отображается в столбце «Имя» на обычной вкладке «Процессы».
  • Предотвращение выполнения данных: включено или нет предотвращение выполнения данных (DEP) для процесса. Это функция безопасности, которая помогает защитить приложения от атак .
  • Корпоративный контекст: в доменах это показывает, в каком корпоративном контексте выполняется приложение. Это может быть контекст корпоративного домена с доступом к корпоративным ресурсам, «личный» контекст без доступа к рабочим ресурсам или «исключение» для системных процессов Windows.
  • Регулирование мощности: включено или отключено регулирование мощности для процесса. Windows автоматически ограничивает определенные приложения, когда вы не используете их для экономии заряда батареи. Вы можете контролировать, какие приложения регулируются из приложения «Настройки» .
  • GPU: процент ресурсов GPU, используемых процессом, или, точнее, самое высокое использование среди всех ядер GPU.
  • Ядро графического процессора: ядро графического процессора, которое использует процесс, или, более конкретно, ядро ​​графического процессора, которое процесс использует чаще всего. См. Информацию о GPU на вкладке Performance для получения списка GPU и их движков. Например, даже если у вас только один графический процессор, он, вероятно, имеет разные механизмы для 3D-рендеринга, кодирования видео и декодирования видео.
  • Выделенная память графического процессора: общий объем памяти графического процессора, который процесс использует во всех графических процессорах. Графические процессоры имеют собственную выделенную видеопамять, встроенную в дискретные графические процессоры, и зарезервированную часть обычной системной памяти на встроенных графических процессорах.
  • Shared GPU memory: общий объем системной памяти, используемой совместно с графическим процессором, который используется процессом. Это относится к данным, хранящимся в обычной оперативной памяти вашей системы, которая используется совместно с графическим процессором, а не к данным, хранящимся в выделенной встроенной памяти вашего графического процессора.

Работа с сервисами

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

Многие сервисы являются частью самой Windows 10. Например, службы Windows Update загружают обновления, а служба Windows Audio отвечает за звук. Другие сервисы устанавливаются сторонними программами. Например, NVIDIA устанавливает несколько сервисов в составе своих графических драйверов.

Вы не должны связываться с этими услугами, если вы не знаете, что делаете. Но, если вы щелкнете по ним правой кнопкой мыши, вы увидите опции Пуск, Остановить или Перезапустить службу. Вы также можете выбрать Поиск в Интернете, чтобы выполнить поиск Bing для получения информации об услуге в Интернете, или «Перейти к подробностям», чтобы отобразить процесс, связанный с запущенной службой, на вкладке Сведения. Многие службы будут иметь связанный с ними процесс «svchost.exe».

Столбцы сервисной панели:

  • Имя: короткое имя, связанное с сервисом
  • PID: номер идентификатора процесса, связанного со службой.
  • Описание: более длинное имя, которое предоставляет больше информации о том, что делает служба.
  • Статус: независимо от того, была ли служба «Остановлена» или «Работает».
  • Группа: группа, в которой находится услуга, если применимо. Windows загружает одну сервисную группу за раз при запуске. Сервисная группа — это набор похожих сервисов, которые загружаются как группа.

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

Process Explorer: более мощный диспетчер задач

Если встроенный диспетчер задач Windows не достаточно мощный для вас, мы рекомендуем Process Explorer. Это бесплатная программа от Microsoft; это часть набора полезных системных инструментов SysInternals.

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

Работа операционной системы Windows основана на работе процессов. В этой статье разберём что такое Windows процессы, их свойства, состояния и другое.

Процессы

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

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

Windows процессы состоят из следующего:

  • Закрытое виртуальное адресное пространство, то есть выделенная для процесса часть оперативной памяти, которая называется виртуальной.
  • Исполняемая программа выполняя свой код, помещает его в виртуальную память.
  • Список открытых дескрипторов. Процесс может открывать или создавать объекты, например файлы или другие процессы. Эти объекты нумеруются, и их номера называют дескрипторами. Ссылаться на объект по дескриптору быстрее, чем по имени.
  • Контекст безопасности. Сюда входит пользователь процесса, группа, привилегии, сеанс и другое.
  • Идентификатор процесса, то есть его уникальный номер.
  • Программный поток (как минимум один или несколько). Чтобы процесс хоть что-то делал, в нем должен существовать программный поток. Если потока нет, значит что-то пошло не так, возможно процесс не смог корректно завершиться, или стартовать.

У процессов есть еще очень много свойств которые вы можете посмотреть в “Диспетчере задач” или “Process Explorer“.

Процесс может быть в различных состояниях:

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

В Windows существуют процессы трёх типов:

  • Приложения. Процессы запущенных приложений. У таких приложений есть окно на рабочем столе, которое вы можете свернуть, развернуть или закрыть.
  • Фоновые процессы. Такие процессы работают в фоне и не имеют окна. Некоторые процессы приложений становятся фоновыми, когда вы сворачиваете их в трей.
  • Процессы Windows. Процессы самой операционной системы, например “Диспетчер печати” или “Проводник”.

Дерево процессов

В Windows процессы знают только своих родителей, а более древних предков не знают.

Например у нас есть такое дерево процессов:

Процесс_1
|- Процесс_2
  |- Процесс_3

Если мы завершим дерево процессов “Процесс_1“, то завершатся все процессы. Потому что “Процесс_1” знает про “Процесс_2“, а “Процесс_2” знает про “Процесс_3“.

Если мы вначале завершим “Процесс_2“, а затем завершаем дерево процессов “Процесс_1“, то завершится только “Процесс_1“, так как между “Процесс_1” и “Процесс_3” не останется связи.

Например, запустите командную строку и выполните команду title parrent чтобы изменить заголовок окна и start cmd чтобы запустить второе окно командной строки:

>title parrent
>start cmd

Измените заголовок второго окна на child и из него запустите программу paint:

>title child
>mspaint

В окне командной строке child введите команду exit, окно закроется а paint продолжит работать:

>exit

После этого на рабочем столе останутся два приложения, командная строка parrent и paint. При этом parrent будет являться как бы дедом для paint.

Запустите “Диспетчер задач”, на вкладке “Процессы” найдите процесс “Обработчик команд Windows”, разверните список и найдите “parrent“. Затем нажмите на нём правой копкой мыши и выберите “Подробно”:

Подробности по процессу parrent

Вы переключитесь на вкладку “Подробно” с выделенным процессом “cmd.exe“. Нажмите правой кнопкой по этому процессу и выберите «Завершить дерево процессов»:

Завершаем дерево процессов в диспетчере задач

Окно командной строки Parrent завершится а Paint останется работать. Так мы убедились что связи между первым процессом и его внуком нет, если у внука нет непосредственного родителя.

Потоки

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

Поток содержит:

  • два стека: для режима ядра и для пользовательского режима;
  • локальную памятью потока (TLS, Thread-Local Storage);
  • уникальный идентификатор потока (TID, Thread ID).

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

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

  • svchost.exe — главный процесс для служб Windows.
  • dllhost.exe — отвечает за обработку приложений, использующих динамически подключаемые библиотеки. Также отвечает за COM и .NET. И ещё управляет процессами IIS.
  • lsass.exe — отвечает за авторизацию локальных пользователей, попросту говоря без него вход в систему для локальных пользователей будет невозможен.

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

Потоки выполняются на центральном процессоре, а за их переключение отвечает планировщик ядра. В связи с тем что такое переключение это затратная операция. В Windows придумали два механизма для сокращения таких затрат: волокна (fibers) и планирование пользовательского режима (UMS, User Mode Scheduling).

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

Потоки UMS (User Mode Scheduling), доступные только в 64-разрядных версиях Windows, предоставляют все основные преимущества волокон при минимуме их недостатков. Потоки UMS обладают собственным состоянием ядра, поэтому они «видимы» для ядра, что позволяет нескольким потокам UMS совместно использовать процессор и конкурировать за него. Работает это следующим образом:

  • Когда двум и более потокам UMS требуется выполнить работу в пользовательском режиме, они сами могут периодически уступать управление другому потоку в пользовательском режиме, не обращаясь к планировщику. Ядро при этом думает что продолжает работать один поток.
  • Когда потоку UMS все таки нужно обратиться к ядру, он переключается на специально выделенный поток режима ядра.

Задания

Задания Windows (Job) позволяют объединить несколько процессов в одну группу. Затем можно этой группой управлять:

  • устанавливать лимиты (на память или процессорное время) для группы процессов входящих в задание;
  • останавливать, приостанавливать, запускать такую группу процессов.

Посмотреть на задания можно с помощью Process Explorer.

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

Чаще всего для получения информации о процессе мы используем «Диспетчер задач». Запустить его можно разными способами:

  • комбинацией клавиш Ctrl+Shift+Esc;
  • щелчком правой кнопкой мыши на панели задач и выборе «Диспетчер задач»;
  • нажатием клавиш Ctrl+Alt+Del и выборе «Диспетчер задач»;
  • запуском исполняемого файла C:Windowssystem32Taskmgr.exe.

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

Краткий режим Диспетчера задач

В полном режиме на вкладке «Процессы» виден список процессов и информация по ним. Чтобы получить больше информации можно нажать правой кнопкой мышки на заголовке и добавить столбцы:

Диспетчер задач - Добавление столбцов с информацией

Чтобы получить еще больше информации можно нажать правой кнопкой мышки на процессе и выбрать «Подробно». При этом вы переключитесь на вкладку «Подробности» и этот процесс выделится.

На вкладке «Подробности» можно получить ещё больше информации о процессе. А также здесь также можно добавить колонки с дополнительной информацией, для этого нужно щелкнуть правой кнопкой мыши по заголовку и нажать «Выбрать столбцы»:

Выбор столбцов с информацией о процессах на вкладке «Подробности»

Process Explorer

Установка и подготовка к работе

Более подробную информацию о процессах и потоках можно получить с помощью программы Process Explorer из пакета Sysinternals. Его нужно скачать и запустить.

Некоторые возможности Process Explorer:

  • информация по правам процесса: кто владелец процесса, у кого есть доступ к нему;
  • выделение разными цветами процессов и потоков, для удобного восприятия информации:
    • процессы служб – розовый;
    • ваши собственные процессы – синий;
    • новые процессы – зелёный;
    • завершенные процессы – красный;
  • список файлов открытых процессом;
  • возможность приостановки процесса или потока;
  • возможность уничтожения отдельных потоков;
  • поиск процессов создающих наибольшую нагрузку на процессор;
  • отображение списка процессов в виде дерева, а также алфавитная сортировка и сортировка в обратном порядке;
  • возможность посмотреть:
    • число дескрипторов у процесса;
    • активность потоков в процессе;
    • подробную информация о распределении памяти.

Запустите Process Explorer:

Process Explorer

Далее нужно настроить сервер символических имен. Если это не сделать, при двойном щелчке на процессе, на вкладке Threads (потоки) вы получите сообщение о том, что символические имена не настроены:

Предупреждение о не настроенных символических именах

Для начала скачиваем установщик «Пакет SDK для Windows 10».

Устанавливать все не нужно, достаточно при установки выбрать “Debugging Tools for Windows“:

Установка SDK для Windows 10

Для настройки символических имен перейдите в меню Options / Configure / Symbols. Введите путь к библиотеке Dbghelp.dll, которая находится внутри установленного «Пакета SDK для Windows 10» по умолчанию:

  • C:Program Files (x86)Windows Kits10Debuggersx64Dbghelp.dll.

И путь к серверу символической информации:

  • srv*C:Symbols*http://msdl.microsoft.com/download/symbols

При этом:

  • C:Symbols — путь к кеширующей локальной папке;
  • http://msdl.microsoft.com/download/symbols — сервер microsoft.

Настройка символический имен в Process Explorer

Некоторые основные настройки Process Explorer:

  • Смена цветового выделения – Options / Configure Colors.
  • Выбор колонок с информацией о процессах – View / Select Columns.
  • Сортировка процессов – нужно щелкнуть на заголовке столбца Process, при первом щелчке сортировка будет в алфавитном порядке, при втором в обратном порядке, при третьем вернется в вид дерева.
  • Просмотр только своих процессов – View / снять галочку Show Processes from All Users.
  • Настройка времени выделения только что запущенных процессов и завершённых – Options / Difference Highlight Duration / введите количество секунд.
  • Чтобы исследователь процесс подробнее можно дважды щелкнуть на нем и посмотреть информацию на различных вкладках.
  • Открыть нижнюю панель для просмотра открытых дескрипторов или библиотек – Vies / Show Lower Panel.

Потоки в Process Explorer

Потоки отдельного процесса можно увидеть в программе Process Explorer. Для этого нужно дважды кликнуть по процессу и в открывшемся окне перейти на вкладку «Threads»:

Process Explorer (потоки процесса)

В колонках видна информация по каждому потоку:

  • TID — идентификатор потока.
  • CPU — загрузка процессора.
  • Cycles Delta — общее количество циклов процессора, которое этот процесс использовал с момента последнего обновления работы Process Explorer. Скорость обновления программы можно настроить, указав например 5 минут.
  • Suspend Count — количество приостановок потока.
  • Service — название службы.
  • Start Address — начальный адрес процедуры, который начинает выполнение нового потока. Выводится в формате:«модуль!функция».

При выделении потока, снизу показана следующую информация:

Изучение активности потока

  • Идентификатор потока.
  • Время начала работы потока.
  • Состояние потока.
  • Время выполнения в режиме ядра и в пользовательском режиме.
  • Счетчик переключения контекста для центрального процессора.
  • Количество циклов процессора.
  • Базовый приоритет.
  • Динамический приоритет (текущий).
  • Приоритет ввода / вывода.
  • Приоритет памяти.
  • Идеальный процессор (предпочтительный процессор).

Есть также кнопки:

Устройство Windows. Изучение активности потока, изображение №3

  • Stack — посмотреть стек процесса;
  • Module — посмотреть свойства запущенного исполняемого файла;
  • Permission — посмотреть права на поток;
  • Kill — завершить поток;
  • Suspend — приостановить поток.

Задания в Process Explorer

Process Explorer может выделить процессы, управляемые заданиями. Чтобы включить такое выделение откройте меню «Options» и выберите команду «Configure Colors», далее поставьте галочку «Jobs»:

Process Explorer — выделение заданий

Более того, страницы свойств таких процессов содержат дополнительную вкладку Job с информацией о самом объекте задания. Например приложение Skype работает со своими процессами как за заданием:

Process Explorer — вкладка Job

Запустите командную строку и введите команду:

>runas /user:<домен><пользователь> cmd

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

В новой командной строке запустите блокнот:

>notepad.exe

Далее запускаем Process Explorer и находим такое дерево процессов:

Устройство Windows. Задания, изображение №3

Как видим, процесс cmd и notepad это процессы связанные с каким-то заданием. Если дважды кликнуть по любому из этих процессов и перейти на вкладку Job, то мы увидим следующее:

Process Explorer — вкладка Job

Тут видно что эти два процесса работают в рамках одного задания.

Вернуться к оглавлению

Сводка

Процессы Windows

Имя статьи

Процессы Windows

Описание

Работа операционной системы Windows основана на работе процессов. В этой статье разберём что такое Windows процессы, их свойства, состояния и другое

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

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

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

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

Содержание

  1. Описание дескрипторов в диспетчере задач
  2. Основные понятия дескрипторов
  3. Функции дескрипторов в диспетчере задач
  4. Примеры использования дескрипторов
  5. Вопрос-ответ
  6. Для чего нужны дескрипторы в диспетчере задач?
  7. Какие основные понятия связаны с дескрипторами в диспетчере задач?
  8. Какие функции выполняют дескрипторы в диспетчере задач?
  9. Как можно получить доступ к дескрипторам в диспетчере задач?

Описание дескрипторов в диспетчере задач

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

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

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

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

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

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

Основные понятия дескрипторов

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

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

Дескрипторы имеют различные свойства и методы, которые позволяют управлять задачами. Некоторые из основных свойств и методов дескрипторов включают:

  • Идентификатор задачи (Task ID): уникальный идентификатор, присваиваемый задаче при ее создании;
  • Статус задачи (Task Status): текущий статус выполнения задачи, такой как «активная», «завершена», «приостановлена» и т.д.;
  • Приоритет задачи (Task Priority): значение, определяющее относительную важность задачи по сравнению с другими задачами;
  • Временные характеристики задачи (Task Time Characteristics): информация о времени начала, времени окончания и продолжительности задачи;
  • Методы управления выполнением задачи (Task Execution Control Methods): методы, позволяющие контролировать выполнение задачи, такие как запуск, остановка, приостановка и т.д.;
  • Методы взаимодействия с другими задачами (Task Interaction Methods): методы, позволяющие задаче обмениваться данными или взаимодействовать с другими задачами;

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

Функции дескрипторов в диспетчере задач

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

Функции дескрипторов в диспетчере задач включают следующие основные возможности:

  • Открытие и закрытие файлов: Дескрипторы позволяют открывать файлы для чтения или записи. После использования файлы могут быть закрыты, чтобы освободить ресурсы и предотвратить возможность несанкционированного доступа.
  • Управление сетевыми соединениями: Дескрипторы позволяют установить соединение с удаленным сервером и обмениваться данными по сети. Они позволяют контролировать состояние соединения, отправлять и получать данные, а также устанавливать параметры соединения.
  • Работа с устройствами ввода/вывода: Дескрипторы использовываются для управления устройствами ввода/вывода, такими как клавиатура, мышь, дисплей или принтер. Они позволяют читать данные с устройств, отправлять данные на устройства или управлять параметрами работы устройств.
  • Назначение прав доступа: Дескрипторы могут быть использованы для назначения прав доступа к файлам, сетевым соединениям и другим ресурсам. Права доступа могут определять, насколько пользователи или программы могут взаимодействовать с ресурсами.

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

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

Дескрипторы в диспетчере задач предоставляют широкие возможности для управления ресурсами и контроля над задачами. Ниже приведены несколько примеров использования дескрипторов:

  1. Ограничение приоритета: Использование дескрипторов позволяет установить ограничения на приоритет задачи. Например, вы можете установить приоритет задачи на низкий уровень, чтобы она не забирала слишком много ресурсов.

  2. Ограничение доступа к файлам: Дескрипторы могут также использоваться для ограничения доступа к определенным файлам в системе. Например, вы можете установить дескриптор на файл, чтобы разрешить только чтение или запретить запись в него.

  3. Управление использованием памяти: Дескрипторы позволяют устанавливать ограничения на использование памяти задачей. Например, можно установить максимальный объем памяти, который задача может использовать, чтобы предотвратить переполнение памяти и снизить вероятность ошибок.

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

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

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

Вопрос-ответ

Для чего нужны дескрипторы в диспетчере задач?

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

Какие основные понятия связаны с дескрипторами в диспетчере задач?

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

Какие функции выполняют дескрипторы в диспетчере задач?

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

Как можно получить доступ к дескрипторам в диспетчере задач?

Для получения доступа к дескрипторам в диспетчере задач можно использовать различные функции операционной системы. Например, в операционных системах семейства Windows можно использовать функции OpenProcess и OpenThread для получения доступа к дескрипторам процессов и потоков соответственно. Также можно использовать функции CreateFile и ReadProcessMemory для получения доступа к памяти процесса.

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

Процессы могут также получать дескрипторы объектов путем наследования дескрипторов во время создания процесса (когда создатель устанавливает флаг наследования дескрипторов при вызове функции CreateProcess, и дескриптор помечен как наследуемый либо в процессе своего создания, либо после создания путем использования Windows-функции SetHandleInformation) или путем получения продублированного дескриптора от другого процесса (см. Windows-функцию DuplicateHandle).

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

Например, библиотеки времени выполнения C и Pascal (более старого языка программирования, аналогичного Delphi) возвращают дескрипторы открытых файлов. Дескрипторы служат в качестве косвенных указателей на ресурсы системы; эта косвенность не дает прикладным программам напрямую манипулировать структурами системных данных.

ПРИМЕЧАНИЕ. Компоненты исполняющей системы и драйверы устройств могут обращаться к объектам непосредственно, поскольку они запущены в режиме ядра и поэтому имеют доступ к структурам объекта в системной памяти. Но они должны объявить о своем использовании объекта, увеличив значение счетчика ссылок, чтобы объект не мог быть удален из памяти, пока он все еще используется.

Однако для успешного использования объекта драйверы устройств должны знать определение внутренней структуры объекта, а для многих объектов она не предоставляется. Взамен драйверам устройств рекомендуется использовать соответствующие API-функции ядра для изменения или чтения информации из объекта. Например, хотя драйверы устройств могут получить указатель на объект типа «процесс» (EPROCESS), его структура им не известна, и должны быть использованы API-функции вида Ps*.

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

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

Просмотр открытых дескрипторов.

Запустите Process Explorer и убедитесь, что нижняя панель включена и настроена на показ открытых дескрипторов. (View (Вид) — Lower Pane View (Просмотр нижней панели) — Handles (Дескрипторы)). После этого откройте окно командной строки и просмотрите таблицу дескрипторов для нового процесса Cmd.exe. Вы должны увидеть дескриптор открытого файла для текущего каталога. Например, предположим, что текущим является каталог C:\Users\Administrator, тогда Process Explorer покажет следующее.

Process-Explorer

Теперь поставьте Process Explorer на паузу, нажав клавишу Пробел или щелкнув на пунктах View (Вид) — Update Speed (Изменить скорость) — Pause (Пауза).

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

Свойство выделения разным цветом, имеющееся в Process Explorer, делает заметнее изменения в таблице дескрипторов. Например, если процесс допускает утечку дескрипторов, просмотр таблицы дескрипторов с помощью Process Explorer может быстро показать, какой дескриптор или какие дескрипторы были открыты, но не были закрыты. (Обычно виден длинный список дескрипторов для одного и того же объекта.) Эта информация поможет программисту обнаружить утечку дескрипторов.

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

открытые-дескрипторы

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

Посмотрите, к примеру, на следующий, частично показанный вывод, полученный с помощью средства Handle при изучении дескрипторов файловых объектов, находящихся в таблице дескрипторов для процесса Cmd.exe до и после изменения каталога. По умолчанию Handle отфильтровывает нефайловые дескрипторы, пока не будет использован ключ –a, который приводит к выводу всех дескрипторов в процессе, аналогично Process Explorer.

C:\>handle -p cmd.exe

Handle v3.46

Copyright (C) 1997-2011 Mark Russinovich

Sysinternals — www.sysinternals.com

———————————————————————-

cmd.exe pid: 5124 Alex-Laptop\Alex Ionescu

3C: File (R-D) C:\Windows\System32\en-US\KernelBase.dll.mui

44: File (RW-) C:\

C:\>cd windows

C:\Windows>handle -p cmd.exe

Handle v3.46

Copyright (C) 1997-2011 Mark Russinovich

Sysinternals — www.sysinternals.com

———————————————————————-

cmd.exe pid: 5124 Alex-Laptop\Alex Ionescu

3C: File (R-D) C:\Windows\System32\en-US\KernelBase.dll.mui

40: File (RW-) C:\Windows

Дескриптор объекта является индексом в таблице дескрипторов, относящейся к конкретному процессу. Этот индекс указывается исполнительным блоком процесса (EPROCESS). Первый индекс дескриптора имеет значение 4, второй — 8 и т. д. Таблица дескрипторов процесса содержит указатели на все объекты, которые процесс открыл для своей работы.

Таблицы дескрипторов реализованы по древовидной схеме, подобной той, которую реализует блок управления памятью x86 для перевода виртуальных адресов в физические, которая дает максимальное значение, превышающее 16 000 000 дескрипторов на процесс.

ПРИМЕЧАНИЕ. В древовидной схеме таблиц таблица верхнего уровня может содержать страницу, заполненную указателями на таблицы среднего уровня, что позволяет иметь более половины миллиарда дескрипторов. Но чтобы поддержать совместимость со схемой дескрипторов, имевшейся в Windows 2000, и унаследовать ограничение в 16 777 216 дескрипторов, таблица верхнего уровня содержит не более 32 указателей на таблицы среднего уровня, устанавливая для более новых версий Windows тот же предел.

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

Например, для систем x86 страница составляет 4096 байт и поделена на записи таблицы дескрипторов размером 8 байт, которых получается 512 минус 1, то есть всего 511 записей в таблице дескрипторов самого низкого уровня. Таблица дескрипторов среднего уровня содержит полную страницу указателей на таблицы нижнего уровня, поэтому количество таблиц дескрипторов нижнего уровня зависит от размера страницы и размера указателя для платформы. Схема таблицы дескрипторов в системе Windows показана на следующем рисунке.

таблица-дескрипторов

Создание максимального количества дескрипторов.

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

Чтобы увидеть, сколько дескрипторов можно создать на вашей системе, выполните следующие действия:

  1. Загрузите с адреса http://live.sysinternals.com/WindowsInternals исполняемый файл Testlimit, необходимой вам версии для 32- или 64-разрядной версии Windows.
  2. Запустите программу Process Explorer, щелкните на пункте View (Вид) — System Information (Информация о системе) — Memory (Память). Обратите внимание на текущий и максимальный размер выгружаемого пула.

Чтобы показать максимальный размер пула, Process Explorer должен быть правильно настроен на доступ к символам образа ядра, Ntoskrnl.exe. Оставьте это отображение системной информации работающим, чтобы можно было следить за использованием пула при запуске программы Testlimit.

  1. Откройте окно командной строки.
  2. Запустите программу Testlimit с ключом –h (путем ввода команды testlimit –h). Когда программа Testlimit не сможет открыть новый дескриптор, она покажет общее количество тех дескрипторов, которые ей удалось создать. Если количество будет меньше, чем примерно 16 миллионов, значит, вы, наверное, вышли за пределы выгружаемого пула памяти еще до достижения теоретического лимита дескрипторов на один процесс.
  3. Закройте окно командной строки, благодаря чему будет прекращено выполнение процесса Testlimit и будут закрыты все открытые им дескрипторы.

Как показано на следующем рисунке, на системах x86 каждая запись дескриптора состоит из структуры с двумя 32-разрядными элементами: указателем на объект (с флагами) и маской предоставленных прав доступа. На 64-разрядных системах запись таблицы дескрипторов имеет длину 12 байт: 64-разрядный указатель на заголовок объекта и 32-разрядная маска доступа.

структура-записи

Просмотр таблицы дескрипторов с помощью отладчика ядра.

В команде !handle отладчика ядра используются три аргумента: !handle <индекс дескриптора> <флаги> <идентификатор процесса>

Индекс дескриптора идентифицирует запись дескриптора в таблице дескрипторов. (Нуль означает «показать все дескрипторы».) Индекс первого дексритора имеет значение 4, второго — 8 и так далее. Например, после ввода команды !handle 4 будет показан первый дескриптор для текущего процесса.

Флаги можно указать в виде поразрядной маски, где разряд 0 означает «показать только информацию в записи дескриптора», разряд 1 означает «показать свободные (то есть неиспользуемые) дескрипторы, а разряд 2 означает «показать информацию об объекте, на который ссылается дескриптор». Следующая команда приводит к показу всех подробностей о таблице дескрипторов для процесса с идентификатором 0x62C:

lkd> !handle 0 7 62c

processor number 0, process 000000000000062c

Searching for Process with Cid == 62c

PROCESS fffffa80052a7060

SessionId: 1 Cid: 062c Peb: 7fffffdb000 ParentCid: 0558

DirBase: 7e401000 ObjectTable: fffff8a00381fc80 HandleCount: 111.

Image: windbg.exe

Handle table at fffff8a0038fa000 with 113 Entries in use

0000: free handle, Entry address fffff8a0038fa000, Next Entry 00000000fffffffe

0004: Object: fffff8a005022b70 GrantedAccess: 00000003 Entry: fffff8a0038fa010

Object: fffff8a005022b70 Type: (fffffa8002778f30) Directory

ObjectHeader: fffff8a005022b40fffff8a005022b40 (new version)

HandleCount: 25 PointerCount: 63

Directory Object: fffff8a000004980 Name: KnownDlls

0008: Object: fffffa8005226070 GrantedAccess: 00100020 Entry: fffff8a0038fa020

Object: fffffa8005226070 Type: (fffffa80027b3080) File

ObjectHeader: fffffa8005226040fffffa8005226040 (new version)

HandleCount: 1 PointerCount: 1

Directory Object: 00000000 Name: \Program Files\Debugging Tools for Windows (x64)

{HarddiskVolume2}

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

Третий флаг показывает, должно ли закрытие объекта генерировать контрольное сообщение (флаг не показывается в Windows, диспетчер объектов использует его для внутренних нужд). Бит защиты от закрытия хранится в неиспользованной части маски доступа и показывает, разрешено ли вызывающей программе закрыть этот дескриптор (флаг может быть установлен с помощью системного вызова NtSetInformationObject).

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

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

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

Поиск открытых файлов с помощью отладчика ядра.

Хотя для поиска дескрипторов открытых файлов можно воспользоваться такими средствами, как Process Explorer, Handle и OpenFiles.exe, они недоступны при просмотре аварийного дампа или удаленном анализе системы.

Вместо них для поиска дескрипторов, отрытых для файлов на том или ином томе, можно воспользоваться командой !devhandles.

  1. Сначала нужно выбрать букву диска, представляющего интерес, и получить указатель на его объект Device. Для этого, как показано ниже, можно воспользоваться командой !object:

1: kd> !object \Global??\C:

Object: fffff8a00016ea40 Type: (fffffa8000c38bb0) SymbolicLink

ObjectHeader: fffff8a00016ea10 (new version)

HandleCount: 0 PointerCount: 1

Directory Object: fffff8a000008060 Name: C:

Target String is ‘\Device\HarddiskVolume1’

Drive Letter Index is 3 (C:)

  1. Затем нужно воспользоваться командой !object, чтобы получить объект

Device для нужного имени тома:

1: kd> !object \Device\HarddiskVolume1

Object: fffffa8001bd3cd0 Type: (fffffa8000ca0750) Device

  1. Теперь можно воспользоваться указателем на объект Device, вставив его в команду !devhandles. Каждый показанный объект указывает на файл:

!devhandles fffffa8001bd3cd0

Checking handle table for process 0xfffffa8000c819e0

Kernel handle table at fffff8a000001830 with 434 entries in use

PROCESS fffffa8000c819e0

SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000

DirBase: 00187000 ObjectTable: fffff8a000001830 HandleCount: 434.

Image: System

0048: Object: fffffa8001d4f2a0 GrantedAccess: 0013008b Entry: fffff8a000003120

Object: fffffa8001d4f2a0 Type: (fffffa8000ca0360) File

ObjectHeader: fffffa8001d4f270 (new version)

HandleCount: 1 PointerCount: 19

Directory Object: 00000000 Name: \Windows\System32\LogFiles\WMI\

RtBackup\EtwRTEventLog-Application.etl {HarddiskVolume1}.

  • Windows 10 для нетбука скачать образ
  • Windows 10 для восстановления системы скачать торрент
  • Windows 10 для планшета с сенсорным экраном и драйверами
  • Windows 10 грузится в безопасном режиме а в обычном нет
  • Windows 10 для ноутбука asus скачать торрент