Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_ПСРВ.doc
Скачиваний:
26
Добавлен:
12.02.2016
Размер:
1.6 Mб
Скачать

2. Упражнения

Выполнить следующие задания и подготовить отчет по результатам выполнения.

УПРАЖНЕНИЕ 2.1.

Разработать приложение, состоящее из трех взаимодействующих процессов. Требуется написать три программных модуля: М1, М2, М3. На базе модуля М1 из shell запускается стартовый процесс Р1(М1).

Процесс Р1 создает канал и, используя функцию семейства spawn*(), запускает процессы Р2(М2) и Р3(М3), передавая им в качестве параметра chid созданного канала.

Процесс Р2 создает свой канал, устанавливает соединение с каналом процесса Р1, отправляет ему сообщение о chid своего канала и переходит в состояние приема сообщений по созданному каналу.

Процесс Р3 устанавливает соединение с каналом процесса Р1 и посылает ему запрос на получение pid процесса Р2 и chid его канала для присоединения к каналу процесса Р2. Получив ответ (pid и chid), присоединяется к каналу процесса Р2 и посылает сообщение "Р2 загружен".

Процесс Р2, приняв сообщение от процесса Р3, добавляет к нему информацию "Р1 принял сообщение от Р2" и отправляет сформированное таким образом сообщение процессу Р1.

Процесс Р1, получив сообщение от Р2, выдает его на экран терминала, посылает ответ "Р1 ОК" процессу Р2 и завершает работу (терминируется).

Процесс Р2, получив ответ от Р1, выдает его на экран терминала, посылает ответ " Р2 ОК" процессу Р3 и завершает работу (терминируется).

Процесс Р3, получив ответ от Р2, выдает его на экран терминала после чего выдает на терминал "Р3 ОК" и завершает работу (терминируется).

УПРАЖНЕНИЕ 2.2.

Разработать приложение, состоящее из трех взаимодействующих процессов. Требуется написать три программных модуля: М1, М2, М3. На базе модуля М1 из shell запускается стартовый процесс Р1(М1).

Процесс Р1 создает канал и, используя функцию семейства spawn*(), запускает процесс Р2(М2), передавая ему в качестве параметра chid созданного канала, и переходит в состояние приема сообщений от Р2 по своему каналу.

Процесс Р2 создает свой канал и, используя функцию семейства spawn*(), запускает процесс Р3(М3), передавая ему в качестве параметра chid созданного канала. Устанавливает соединение с каналом процесса Р1, отправляет ему сообщение о pid процесса Р3 и переходит в состояние приема сообщений по созданному каналу от Р3.

Процесс Р3 создает свой канал, устанавливает соединение с каналом процесса Р2 и посылает ему сообщение "Р3 загружен". Получив ответ, посылает ему chid своего канала и переходит в состояние приема сообщений по своему каналу.

Процесс Р2, приняв первое сообщение, отправляет его процессу Р1, получив ответ от Р1, принимает chid от процесса Р3, посылает ему ответ и передает chid процессу Р1. Далее выдает на терминал "Р2 загружен" и переходит в состояние приема сообщений по своему каналу от Р3.

Процесс Р1, получив первое сообщение от Р2, выдает его на экран терминала, посылает ответ процессу Р2 и принимает второе сообщение, устанавливает соединение с каналом процесса Р3 и посылает по нему сообщение "stop", после ответа переходит в ожидание сообщения по своему каналу.

Процесс Р3, получив "stop", отправляет его процессу Р2, печатает "stop Р3" и терминируется.

Процесс Р2, получив "stop", отправляет его процессу Р1, печатает "stop Р2" и терминируется.

Процесс Р1, получив "stop", печатает "stop Р1" и терминируется.

УПРАЖНЕНИЕ 2.3.

Разработать приложение, состоящее из трех взаимодействующих процессов. Требуется написать три программных модуля: М1, М2, М3. На базе модуля М1 из shell запускается стартовый процесс Р1(М1).

Процесс Р1 создает канал и, используя функцию семейства spawn*(), запускает процессы Р2(М2) и Р3(М3), передавая им в качестве параметра chid созданного канала, и переходит в ожидание сообщений по своему каналу.

Процесс Р2 создает свой канал, устанавливает соединение с каналом процесса Р1, отправляет ему сообщение о chid своего канала и переходит в состояние приема сообщений по созданному каналу.

Процесс Р3 создает свой канал, устанавливает соединение с каналом процесса Р1, отправляет ему сообщение о chid своего канала и переходит в состояние приема сообщений по созданному каналу

Процесс Р1, приняв сообщение от процесса Р2 или Р3 о chid канала, устанавливает соединение и посылает по нему - "Р1 принял сообщение от Р?", принимает ответ и выдает его на терминал. После такого взаимодействия с Р2 и Р3, Р1 терминируется.

Процесс Р?, получив сообщение от Р1, выдает его на экран терминала, посылает ответ "Р? ОК" процессу Р1 и завершает работу (терминируется).

УПРАЖНЕНИЕ 2.4.

Разработать приложение, состоящее из пяти взаимодействующих процессов. Требуется написать три программных модуля: М1, М2, М3. На базе модуля М1 из shell запускается стартовый процесс Р1(М1).

Процесс Р1 используя функцию семейства spawn*(), запускает процесс Р2(М2) с флагом P_NOWAIT и Р3(М2) с флагом P_WAIT.

Процесс Р2 создает свой канал и, используя функцию семейства spawn*(), запускает процесс Р4(М3), передавая в качестве аргумента chid своего канала, и переходит в состояние приема сообщений по созданному каналу.

Процесс Р3 создает свой канал и, используя функцию семейства spawn*(), запускает процесс Р5(М3), передавая в качестве аргумента chid своего канала, и переходит в состояние приема сообщений по созданному каналу.

Процесс Р?(М3) устанавливает соединение c каналом родительского процесса Р?(М2) и посылает сообщение "Р?-ОК", получив ответ , выдает его на терминал и терминируется

Процесс Р?(М2), получив сообщение от Р?(М3), выдает его на экран терминала, посылает ответ "Р? ОК" процессу Р?(М3) и завершает работу (терминируется).

Процесс Р1, возобновив свою работу, выдает на терминал сообщение "STOP" и терминируется.

УПРАЖНЕНИЕ 2.5.

Разработать приложение, которое строится в виде цепочки процессов. Требуется написать два программных модуля: М1, М2. На базе модуля М1 из shell запускается стартовый процесс Р1(М1), которому передается в качестве параметра длина цепочки N (количество процессов).

Процесс Р1 создает свой канал и, используя функцию семейства spawn*(), запускает процесс Р2(М2), передавая в качестве аргумента длину цепочки N, chid своего канала и переходит в ожидание прихода по нему сообщения, после чего отвечает и терминируется.

Процесс Р2(М2) устанавливает соединение с каналом родительского процесса и, если N не равно 0, создает свой канал и, используя функцию семейства spawn*(), запускает следующий процесс Р?(М2), передавая ему в качестве аргумента N-1 и chid своего канала, и переходит в состояние приема сообщений по своему каналу. Если N=0, то посылает предыдущему процессу сообщение "Р2-ОК" и, получив ответ, выдает его на экран и терминируется.

Аналогично ведет себя каждый вновь запущенный процесс цепочки.