Создание процесса

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

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

1. Инициализация системы.

2. Выполнение работающим процессом системного вызова, предназначенного для создания процесса.

3. Запрос пользователя на создание нового процесса.

4. Инициация пакетного задания.

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

десятки демонов. В UNIX[11] для отображения списка запущенных процессов может быть использована программа ps. В Windows для этой цели может использоваться диспетчер задач.

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

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

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

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

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

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

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

В Windows все происходит иначе: одним вызовом функции Win32 CreateProcess создается процесс, и в него загружается нужная программа. У этого вызова имеется 10 параметров, включая выполняемую программу, параметры командной строки для этой программы, различные параметры безопасности, биты, управляющие наследованием открытых файлов, информацию о приоритетах, спецификацию окна, создаваемого для процесса (если оно используется), и указатель на структуру, в которой вызывающей программе будет возвращена информация о только что созданном процессе. В дополнение к функции CreateProcess в Win32 имеется около 100 других функций для управления процессами и их синхронизации, а также выполнения всего, что с этим связано.

В обеих системах, UNIX и Windows, после создания процесса родительский и дочерний процессы обладают своими собственными, отдельными адресными пространствами. Если какой-нибудь процесс изменяет слово в своем адресном пространстве, другим процессам эти изменения не видны. В UNIX первоначальное состояние адресного пространства дочернего процесса является копией адресного пространства родительского процесса, но это абсолютно разные адресные пространства — у них нет общей памяти, доступной для записи данных. Некоторые реализации UNIX делят между процессами текст программы без возможности его модификации. Кроме того, дочерний процесс может совместно использовать всю память родительского процесса, но если память совместно используется в режиме копирования при записи (copy on write), это означает, что при каждой попытке любого из процессов модифицировать часть памяти эта часть сначала явным образом копируется, чтобы гарантировать модификацию только в закрытой области памяти. Следует также заметить, что память, используемая в режиме записи, совместному использованию не подлежит.

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

2.1.3.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Создание процесса:

  1. Процесс создания коллектива
  2. Очерк 2: Берт «Процесс — вот мое достояние. Именно процесс создает успех»
  3. 14.8.2. Традиция создания инструментов
  4. Задания, мешающие когнитивному процессу (ЗМКП), и задания, помогающие когнитивному процессу (ЗПКП)
  5. 2. Создание и управление учреждением
  6. 14.8.1. Принцип создания инструментов
  7. §10. СОЗДАНИЕ ЮРИДИЧЕСКОГО ЛИЦА
  8. Статья 87. Создание юридического лица
  9. Глава 36 ФОКУСИРОВАТЬ ВНИМАНИЕ НА ОБЛАДАНИИ ИЛИ НА СОЗДАНИИ?
  10. Статья 153. Создание акционерного общества
  11. 2. Создание и управление фондом
  12. Создание концепции
  13. Статья 255. Создание преступной организации
  14. 5.10.1. Создание пространства для ответа
  15. Глава 1. Ты – непростое создание
  16. 5.10.2. Создание отправных пунктов