Cтраница 1
Дескриптор процесса содержит параметры процесса, которые нужны всегда, независимо от того, находится процесс в оперативной памяти или выгружен. Системные данные, используемые ядром при нахождении процесса в оперативной памяти, образуют контекст процесса. Область контекста занимает 1К байтов и не входит в адресное пространство процесса. [1]
![]() |
Состав планировщика и его связи с прикладными программами.| Примитивы планировщика. [2] |
В дескрипторе процесса отображается текущее состояние процесса и указателя стека и записаны приоритет процесса ( целое число из диапазона 1 - 255) и адрес регистра состояния ВУ, если процесс предназначен для ввода или вывода данных. Процесс может находиться в одном из следующих состояний: активен; готов к выполнению; ждет событие или сообщение; ждет событие или сообщение с заданным тайм-аутом; ждет прерывания. [3]
Заметим: дескриптор процесса остается корректным даже после окончания процесса. Когда программа завершится с использованием дескриптора, она может закрыть его, передавая дескриптор в функцию Win32 API: : CloseHandle. Если программа не закрыла дескриптор, то он закроется автоматически при завершении программы. Когда все дескрипторы данного процесса будут закрыты, Windows освобождает память от информации, которая поддерживала процесс. [4]
Программа может передавать дескриптор дочернего процесса другим функциям Win32 API, предназначенным для управления им, например, в функцию: : SetPriorityClass для изменения приоритета процесса или в функцию: : TerminateProcess для его немедленного прекращения. [5]
Если рр - указатель на дескриптор процесса, то это поле доступно как элемент структуры рр - - р - pri. [6]
Функция: : CreateProcess предоставляет дескриптор дочернего процесса. Родительский процесс передает его одной из нескольких функций Win32 API: функции: : GetExitCodeProcess для получения кода возврата процесса, функции: : WaitForSingleObject для ожидания завершения процесса, функции: : SetPriorityClass для изменения приоритета процесса или: : TerminateProcess для его остановки. [7]
Это относится не только к дескрипторам процессов, но и ко всем другим системным структурам данных в ядре. Их количество можно варьировать при генерации; во время работы системы превышение заданных при генерации предельных чисел недопустимо. [8]
![]() |
Взаимосвязь между заданиями, процессами и потоками. [9] |
Как только дескриптор объекта помещен в таблицу дескрипторов процесса, любой поток процесса может его использовать. [10]
Программа передает в функцию Win32 API: : WaitForSingleObject дескриптор дочернего процесса, чтобы подождать его завершения ( см. гл. [11]
Параметр binheritHandles определяет, сможет ли дочерний процесс наследовать дескрипторы родительского процесса ( еще одна мера безопасности), и в нашем случае должен иметь значение True. Параметр dwcreationFiags позволяет указать флажки, влияющие на создание процесса. Флажки DETACHED PROCESS и CREATE NEW CONSOLE связаны с наследованием. По умолчанию дочерний процесс наследует консоль родительского процесса. Если мы устанавливаем флаг DETACHED PROCESS, процесс не наследует консоль, и в этом случае он может выполняться, вообще не имея консоли, если таковая не будет создана, например, с помощью функции Aiiocconsole. Если мы устанавливаем флаг CREATE NEW CONSOLE, дочерний процесс автоматически получает новую консоль. Процессу с графическим интерфейсом консоль, естественно, не нужна. [12]
Системные данные, используемые ядром в течение всего вре менк жизни процесса, образуют дескриптор процесса. Множество дескрипторов составляет таблицу процессов, которая располагается в ядре системы и адресуется непосредственно в режиме система. Дескриптор резервируется при порождении процесса и освобождается при его завершении. [13]
Приоритет пользовательского процесса вычисляется более сложным образом. В вычислении участвуют значения двух полей дескриптора процесса: р - nice и р ери. Первое из них формируется пользователем и может быть названо пользовательской составляющей приоритета процесса, второе - формируется системой и называется системной составляющей. [14]
Для каждого процесса система ведет подсчет времени его непрерывного пребывания на данном уровне памяти. Подсчитанное время хранится в поле р time дескриптора процесса. [15]