Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / СПО1.doc
Скачиваний:
115
Добавлен:
11.02.2014
Размер:
472.06 Кб
Скачать

3. Межпроцессные коммуникации

Цель: изучить средства обмена информацией между процессами.

Задачи:

  1. Изучить механизм сигналов.

  2. Рассмотреть виды сигналов.

  3. Рассмотреть понятие очереди сообщений.

Если задуматься над вопросом, что в наши дни является ключевой компонентой в области передовых компьютерных технологий, то без сомнения можно было бы ответить, что такой технологией в наши дни является технология "клиент-сервер". Действительно, эта универсальная модель служит основой построения любых сколь угодно сложных систем, в том числе и сетевых. Пользуясь известным выражением, можно было бы сказать, что технология "клиент-сервер" является ключевым звеном в цепи, ухватившись за которое можно вытащить всю цепь. Разработчики СУБД, коммуникационных систем, систем электронной почты, банковских систем и т.д. во всем мире используют эту технологию. В этом смысле ОС UNIX является для разработчиков системного и прикладного программного обеспечения идеальным средством, потому что в своей основе наиболее полно отвечает требованиям технологии "клиент-сервер", далеко опережая при этом своих основных конкурентов. Для построения моделей типа "клиент-сервер" в UNIX существуют великолепные возможности:

  • сигналы;

  • семафоры;

  • программные каналы;

  • именованные программные каналы;

  • очереди сообщений;

  • сегменты разделяемой памяти;

  • специальные команды (write, cu, mail);

  • средства межмашинного взаимодействия (uucp, tcp/ip, nfs, rfs).

Сигналы

Если рассматривать процесс как некую виртуальную машину, то в такой системе должна существовать система прерываний, отвечающая стандартным требованиям:

  • обработка исключительных ситуаций;

  • средства обработки внешних и внутренних прерываний;

  • средства управления системой прерываний (маскирование и демаскирование).

Всем этим требованиям в UNIX отвечает механика сигналов, которая может не только воспринимать и обрабатывать сигналы, но и порождать их и посылать на другие машины (процессы). Сигналы могут быть синхронными, когда инициатор сигнала - сам процесс, и асинхронными, когда инициатор возникновения сигнала - интерактивный пользователь за терминалом. Источником асинхронных сигналов может быть также ядро, когда оно контролирует определенные состояния аппаратуры рассматриваемые как ошибочные. Для удобства использования каждый сигнал закодирован и цифровое значение сигнала с использованием мнемонической формы записи хранится в файле signal.h

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

ИМЯ СОДЕРЖАНИЕ РЕАКЦИЯ

SIGHUP(1) Вырабатывается при отключении связи с Закончить процесс,

терминалом. Рассылается всем процессам принявший сигнал.

TGID

SIGINT(2) При нажатии определенной клавиши. Закончить процесс

Всем процессам TGID

SIGQUIT(3) При нажатии клавиши quit. Всем Здесь и далее

процессам TGID закончить процесс

SIGILL(4) При возникновении аппаратных некон-

тролируемых состояний. Текущему PID

SIGTRAP(5) При трассировке. Текущему PID

SIGIOT(6) При неисправности в аппаратуре.

Текущему PID

SIGTEMT(7) При выполнении команды EMT. Текущему

PID

SIGFPE(8) При обработке чисел с плавающей

точкой. Текущему PID

SIGKILL(9) При выдаче системного вызова kill.

Адресуемому PID

SIGBUS(10) При ошибке в косвенной адресации.

Текущему PID

SIGSEGV(11) При выходе за пределы сегмента.

Текущему PID

SIGSYS(12) При неверном системном вызове.

Текущему PID

SIGPIPE(13) При записи в Pipe, когда нет читающего

процесса. Текущему PID записи в канал

SIGALARM(14) При окончании временной установки.

Посылается к PID установки

SIGTERM(15) При выполнении команды kill в команд-

ном режиме. К адресуемому PID

SIGUSR1(16) При системном вызове kill.

SIGUSR2(17) К адресуемому PID

SIGCLD(18) При окончании "процесса-сына". Сброс сигнала

К "процессу-отцу"

SIGPWR(19) При уменьшении напряжения в сети. В зависимости от

В зависимости от реализации реализации.

SIGPOOL(22) При регистрации события в Stream- Закончить процесс.

устройстве. К процессу, работающему

с потоком.

---------------------------------------------------------------------------

Возможности системного вызова signal позволяют обрабатывать сигналы следующими способами:

  • Реакция по умолчанию

  • Замаскировать сигнал (т.е. проигнорировать его). Для указания указания возможности маскирования второму аргументу присваивается специальное значение SIG_IGN.

  • Перехватить посланный процессу сигнал и написать собственную программу обработки прерывания по асинхронно посланному сигналу.

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

Очереди сообщений

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

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

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

Ядро никак не интерпретирует содержания сообщений, а только лишь обеспечивает размещение и выборку в соответствии с указанным типом. Шаблон сообщения хранится в файле sys/msg.h.

Для работы с очередями в UNIX System V существуют следующие системные вызовы:

msgget - создание очереди;

msgctl - установка параметров;

msgsnd - посылка сообщений в очередь;

msgrcv - получение сообщений из очереди;

Очереди имеют свои преимущества по сравнению, скажем, с программными каналами. Например, чтобы осуществлять полнодуплексную связь между двумя процессами, очевидно, что нужно создать два канала: один для записи, а другой для чтения. В случае использования очередей можно обойтись одной очередью, если различать сообщения по типу: от клиента к серверу и наоборот. Кроме того, имеется возможность извлекать сообщения из очереди не только по дисциплине FIFO, но и в произвольном порядке. Эта особенность открывает перспективу построения систем с приоритетным обслуживанием клиентов.

Вопросы для самопроверки.

  1. Что такое синхронный и асинхронный сигнал?

  2. Назовите виды сигналов.

  3. Что такое очередь сообщений?

  4. Назовите системные вызовы для работы с очередями в UNIX System V.

Соседние файлы в папке лекции