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

Взаимодействие процессов

Сразу после обработки системного вызова fork() происходит установление двусторонней связи между порождающим и порожденным. Порожденный ("сын"). при этом наследует все свойства порождающего ("отца"). Однако существование нового, порожденного процесса как точной копии другого не имеет никакого смысла. Поэтому почти всегда "сын" заменяет программный код "отца" на свой собственный программный код. Это возможно с помощью системного вызова ехес. Процесс-«отец» ожидает окончания исполнения процесса-«сына», используя системный вызов wait.

Что происходит в случае завершения процесса? Если процесс выдает системный вызов exit, то он, выражаясь языком пользователей UNIX, становится процессом-«самоубийцей» и порождает в связи с этим ряд проблем.

При искусственном завершении процесса возникает несколько типов проблемных ситуаций, которые необходимо решать, так как каждый процесс, завершившийся искусственно, имеет своего «родителя», но одновременно он может быть «родителем» других процессов. Поэтому могут остаться процессы-«сироты», судьбу которых надо решать.

Возможны три варианта:

1. Нормальное окончание.

Порождающий процесс выдает wait и ждет, когда порожденный завершит свое выполнение по exit. Однако, если у «сына» были свои «процессы-дети», то, чтобы они не остались «сиротами», происходит их переназначение («усыновление») прародителем всех процессов init. Главная работа ядра UNIX при этом заключается в переустановлении PPID у процессов-«сыновей». Он становится для них равным единице. Кроме того, всем процессам - членам группы посылается соответствующий сигнал.

2. «Ненормальное» окончание.

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

3. Преждевременный выход.

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

Процессы-«демоны»

Если классифицировать процессы в UNIX, то можно выделить пользе вательские и системные процессы, а также процессы, образно называемые «демонами» (daemons).

Большинство процессов имеют статус пользовательских.

Системные процессы выполняются в режиме суперпользователя и ориентированы на выполнение системных функций.

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

«Процессы-демоны» - это определенная разновидность системных процессов. «Демоны» отличаются от обыкновенных процессов тем, что они выполняют специфические системные действия, например администрирование и управление в сетях. Так, типичным процессом-«демоном» является обработчик входящих вызовов (incoming calls) на UNIX-сервере, который обрабатывает все поступающие заявки на соединение (connect) с удаленного входа для машины в сети.

Способы порождения и запуска «демонов» могут быть различны:

1. В процессе старта системы из файла /etc/rc. Такие «демоны» будут работать в статусе суперпользователя во все время работы ОС.

2. Используя либо системный файл /usr/lib/crontab, либо пользовательский cronlab. Обыкновенно стандартный системный процесс cron течение дня выполняет определенные задачи, периодически выбирая свои команды для таких исполнений из файла /usr/lib/crontab,

3. С помощью команды at «демон» ждет наступления заданного времени и выдает определенное задание.

4. Запуск фонового процесса с помощью пользовательского терминала.

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