Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OS.DOC
Скачиваний:
21
Добавлен:
28.10.2018
Размер:
653.82 Кб
Скачать

Иерархия процессов

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

Рис.5 Граф процессов

К примеру, рис. 5 показывает отношения процессов Р1, Р2, РЗ, Р4, Р5. В этом графе существуют следующие отношения:

• Р1 порождает два процесса: Р2 и Р4: При этом Р1 является "отцом' а Р2 и Р4 являются его "сыновьями".

• Р2 создает РЗ. При этом Р2 является "родителем" РЗ, а РЗ - соответственно его "сыном" и "потомком" Р1.

• Р4 является "родителем" Р5 и Рб; Р5 и Р6 - соответственно "детьми" Р4.

• Р1 является "дедушкой" РЗ, Р5 и Р6.

• РЗ, Р5 и Р6 - "внуки" Р1.

• РЗ, Р5 и Р6 не имеют порожденных процессов.

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

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

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

старшем байте - статус завершения.

Любой процесс может завершиться по собственной

инициативе с помощью системного вызова exit

(status). Аргумент status передается порождающему процессу, если тот ожидает завершения порожденного процесса.

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

Идентификаторы процесса

Каждому созданному процессу в UNIX назначается уникальный идентификатор, известный как процесс ID (или PID). Этот PID идентифицирует процесс и для самой ОС, и для множества команд и системных вызовов. В добавление к этому каждый процесс имеет также

parent process ID (или PPID), который представляет собой идентификатор породившего его процесса.

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

Группы процессов

Техника идентификаторов используется также при группировании процессов. Каждый процесс (за исключением системных процессов, таких, как init и swapper) является членом группы (process group). При создании задания (JOB) оболочка (Shell) назначает всем процессам в задании идентификатор группы процессов (GID - process group ID). Сигналы (это специальные системные вызовы UNIX) могут распространяться по всем процессам в данной группе. Это очень важная особенность в управлении заданиями, когда все родственные процессы в задании могут получать посылаемые им сигналы.

Еще один способ группирования - объединение процессов в терминальную группу. Члены группы получают в качестве атрибута идентификатор терминальной группы TGID, который равен значению PID лидера этой группы. В качестве лидера выступает процесс, который открыл терминал. Управляющий терминал используется для передачи через управляющий процесс (т. е. процесс-лидер) сигналов для всех процессов - членов группы. Сигналы вырабатываются при нажатии определенных клавиш на клавиатуре. Следует отметить, что каждый пользователь, входящий в систему по login, обязательно порождает новые процессы. При этом каждый процесс в контексте пользователя имеет один и тот же идентификатор пользователя (user ID) UID. Соответствие между UID и login-именем пользователя фиксируется в файле /etc/passwd. Пользователи получают различные привилегии. Имеются суперпользователи с неограниченными возможностями. Процесс суперпользователя (superuser) имеет UID, равный нулю, а остальные - целые положительные числа, отличные от девяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]