Средства межпроцессорного взаимодействия

Страницы работы

Содержание работы

Санкт–Петербургский Государственный Политехнический Университет

Факультет Технической Кибернетики

Кафедра Автоматики и Вычислительной Техники

ОТЧЕТ

О лабораторной работе

Дисциплина: СПО

Тема: Средства межпроцессорного взаимодействия

Выполнил студент группы 4081/1

Журавлев А.В.

Руководитель:

Душутина Е.В.

Санкт-Петербург

2009


Содержание:

1)  Цель работы                                                                                        3

2)  Ненадежные сигналы                                                                         3

3)  Надежные сигналы                                                                              7

4)  Надежные сигналы. Модификация                                                  9

5)  Неименованные каналы                                                                    10

6)  Именованные каналы                                                                         12


1.  Цель работы:

Изучить следующие средства межпроцессорного взаимодействия (IPC) в ОС QNX:

1)  надежные и ненадежные сигналы

2)  именованные и неименованные каналы

3)  очереди сообщений

4)  семафоры и разделяемая память

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

2.  Ненадежные сигналы

Целью данного пункта является изучение ненадежного принципа обмена сигналами между процессами и запускающим их терминалом. Для этого были разработаны 2 программы: son.c и father.c (текст приведен в листингах ниже).

#ifndef _head_er_h_

#define _head_er_h_

#include <signal.h>

#include <stdio.h>

struct i_info {

            int pid_father;

            int ppid_father;

            int pid_son;

} si;

#endif

Листинг 2.1. Файл Header.h

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

#include "header.h"

void hndl_usr1_son(int nomer) {

            printf("Son: I caught #%i\n\nSon: sending a signal to father\n",nomer);

            kill(si.pid_father,SIGUSR2);

};

void hndl_usr2_son(int nomer) {

            printf("Son: kawai family ^^\n");

};

int main( void )

 {

            int i;

            si.pid_son = getpid();

            printf("Son: My PID is %i\n",si.pid_son);

            signal(SIGUSR1,hndl_usr1_son);

            signal(SIGUSR2,hndl_usr2_son);

            int flag = kill(si.pid_father,SIGUSR1);

            if(flag == -1) {

                        printf("Son: I can't send a signal\n");

                        exit(1);

            } else {

                        printf("SON: Signal was successfully send!\n");

            };

            pause();

            pause();

            printf("Son: end\n");

            si.pid_son = -1;

            return 0;

}

Похожие материалы

Информация о работе