Cтраница 2
Процесс также может получить дескриптор другого процесса ( даже если он не создает его), вызывая функцию Win32: : OpenProcess. В этом случае в функцию: rOpenProcess нужно передать идентификатор процесса, а не имя ( в отличие от объектов синхронизации процессам нельзя задавать имя), как в следующем примере. [16]
Следует обратить внимание на следующее обстоятельство. Процессы не имеют предопределенных заранее описанных имен или идентификаторов; идентификатор процесса никак не связан с именем программы, выполняемой процессом. На самом деле эти понятия должны быть развязаны. [17]
Отметим, что при изменении своих идентификаторов ( например, реальный и эффективный идентификаторы пользователя, связанные с процессом) процесс делает их одинаковыми. Поскольку права процесса определяются эффективными идентификаторами, становится понятным требование, чтобы устанавливаемое значение совпадало с реальным идентификатором процесса. [18]
Тот факт, что образы памяти, переменные, регистры и все остальное у родительского процесса и у дочернего идентично, приводит к небольшому затруднению: Как процессам узнать, который из них должен исполнять родительскую программу, а который дочернюю. Эта проблема решается просто: системный вызов fork возвращает дочернему процессу число 0, а родительскому - отличный от нуля PID ( Process IDentifier - идентификатор процесса) дочернего процесса. [19]
Посылка сигнала предполагает знание идентификатора тоге процесса, которому адресован сигнал. Отец знает идентификатор своих сыновей и может передать их другим сыновьям, поскольку сегмент данных наследуется при порождении. Таким образом, идентификаторы процессов могут быть переданы родственникам, и, следовательно, обмен сигналами возможен только между процессами, имеющими определенные родственные. [20]
Выполняется обращение к системному вызову NtCreateProcess, чтобы создать пустой объект процесса и поместить его в пространство менеджера объектов. Создаются объект ядра и объект исполняющей системы. Кроме того, менеджер процессов создает для объекта управляющий блок процесса и инициализирует его идентификатором процесса, квотами, маркером доступа и различными другими полями. Также создается объект секции, чтобы следить за адресным пространством процесса. [21]
Выполняется обращение к системному вызову NtCreateProcess, чтобы создать пустой объект процесса и поместить его в пространство менеджера объектов. Создаются объект ядра и объект исполняющей системы. Кроме того, менеджер процессов создает для объекта управляющий блок процесса и инициализирует его идентификатором процесса, квотами, маркером доступа и различными другими полями. Также создается объект секции, чтобы следить за адресным пространством процесса. [22]
Область управления процессом включает информацию, необходимую при управлении процессом. Ряд значений используется при планировании процесса, а остальные используются аппаратурой или программным обеспечением для управления памятью процесса и восстановлением от ошибок. Здесь находятся: текущий номер уровня, показания счетчика времени процесса, значения периода обслуживания и счетчика обслуживания, идентификатор процесса и состояние процесса. Планирование процесса для исполнения обсуждается в гл. [23]
![]() |
Схема возможного подключения нарушителя к вычислительной сети. [24] |
В случае пассивного перехвата нарушитель только следит за сообщениями, передаваемыми по соединению, без вмешательства в их поток. Наблюдение нарушителя за данными ( прикладного уровня) в сообщении позволяет раскрыть содержание сообщений. Нарушитель может также следить за заголовками сообщений, даже если данные не понятны ему, с целью определения места размещения и идентификаторов процессов, участвующих в передаче данных. [25]
Процессы являются более интересными, чем задания, а также более важными. Как и в системе UNIX, процессы представляют собой контейнеры для ресурсов. У каждого процесса есть 4-гигабайтное адресное пространство, в котором пользователь занимает нижние 2 Гбайт ( в версиях Windows 2000 Advanced Server и Datacenter Server этот размер может быть по желанию увеличен до 3 Гбайт), а операционная система занимает остальную его часть. Таким образом, операционная система присутствует в адресном пространстве каждого процесса, хотя она и защищена от изменений с помощью аппаратного блока управления памятью MM U. У процесса есть идентификатор процесса, один или несколько потоков, список дескрипторов ( управляемых в режиме ядра) и маркер доступа, хранящий информацию защиты. Процессы создаются с помощью вызова Win32, который принимает на входе имя исполняемого файла, определяющего начальное содержимое адресного пространства, и создает первый поток. [26]
Процессы являются более интересными, чем задания, а также более важными. Как и в системе UNIX, процессы представляют собой контейнеры для ресурсов. У каждого процесса есть 4-гигабайтное адресное пространство, в котором пользователь занимает нижние 2 Гбайт ( в версиях Windows 2000 Advanced Server и Datacenter Server этот размер может быть по желанию увеличен до 3 Гбайт), а операционная система занимает остальную его часть. Таким образом, операционная система присутствует в адресном пространстве каждого процесса, хотя она и защищена от изменений с помощью аппаратного блока управления памятью MMU. У процесса есть идентификатор процесса, один или несколько потоков, список дескрипторов ( управляемых в режиме ядра) и маркер доступа, хранящий информацию защиты. Процессы создаются с помощью вызова Win32, который принимает на входе имя исполняемого файла, определяющего начальное содержимое адресного пространства, и создает первый поток. [27]
![]() |
Некоторые системные вызовы, относящиеся к процессам Системный вызов Описание. [28] |
Она считывает команды с терминала, с помощью системного вызова fork выполняет введенную команду, затем ждет окончания работы дочернего процесса, после чего считывает следующую команду. Для ожидания завершения дочернего процесса родительский процесс обращается к системному вызову waitpid. В первом параметре указывается PID процесса, завершение которого ожидается. Если вместо идентификатора процесса указать число - 1, то в этом случае системный вызов ожидает завершения любого дочернего процесса. Третий параметр определяет, будет ли обращающийся к системному вызову waitpid процесс блокирован до завершения дочернего процесса или сразу получит управление после обращения к системному вызову. [29]
![]() |
Основные функции Win32 API для управления защитой Функция Описание. [30] |