<<
>>

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

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

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

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

2. Исполнение запущенным процессом системного вызова создания процесса.

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

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

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

Другие процессы являются фоновыми: они не связаны с конкретными

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

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

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

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

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

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

Для создания нового процесса в MINIX 3 существует единственный системный вызов fork. Он создает точную копию вызывающего процесса.

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

Как в UNIX, так и в MINIX 3 родительский и дочерний процессы имеют собственные адресные пространства. Если какой-либо процесс изменит слово в своем адресном пространстве, это не затронет другой процесс. Адресное пространство дочернего процесса является копией адресного пространства родителя, однако не совпадает с ним; у двух процессов нет общей памяти для записи (как и некоторые реализации UNIX, MINIX 3 поддерживает возможность использования процессами общего кода, поскольку его невозможно модифицировать). Тем не менее процесс-потомок может совместно с родителем использовать другие ресурсы, например открытые файлы.

2.1.3.

<< | >>
Источник: Э. ТАНЕНБАУМ, А. ВУДХАЛЛ. ОПЕРАЦИОННЫЕ СИСТЕМЫ Разработка и реализация 3-е издание. 2007

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

  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. Ты – непростое создание