Скачиваний:
90
Добавлен:
12.05.2015
Размер:
913.92 Кб
Скачать

12.6. Комментарии к примерам ipc

Чаще всего для иллюстрации различных функций используются три шаблона (модели) взаимодействия:

  1. Сервер файлов: приложение клиент-сервер, причем клиент посылает серверу запрос с именем файла, а сервер возвращает клиенту его содержимое.

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

  3. Увеличение последовательного номера: один или несколько потоков или процессов увеличивают общий для всех индекс. Число это может храниться в файле с общим доступом или в совместно используемой области памяти.

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

12.7. Выводы по главе 12

Взаимодействие процессов традиционно является одной из проблемных областей в Unix. По мере развития системы предлагались различные решения, и ни одно из них не является совершенным. Мы выделяем три главных формы IPC.

  1. Передача сообщений (каналы, FIFO, очереди сообщений).

  2. Синхронизация (взаимные исключения, условные переменные, блокировки чтения-записи, блокировка файлов, семафоры).

  3. Разделяемая память (неименованная и именованная).

Мы рассматриваем взаимодействие как отдельных потоков одного процесса, так и нескольких независимых процессов. Живучесть (продолжительность существования) объектов IPC различных типов определяется либо процессом, либо ядром, либо файловой системой. Этот фактор необходимо учитывать при выборе формы IPC для конкретного приложения.

Другим свойством объекта IPC любого типа является пространство имен, определяющее способ идентификации объекта IPC процессами и потоками, использующими его. Некоторые объекты не имеют имен (каналы, взаимные исключения, условные переменные, блокировки чтения-записи), другие обладают именами в рамках файловой системы (FIFO), третьи для идентификации используют ключи IPC стандарта System V (очереди сообщений, семафоры, разделяемая память). Обычно сервер создает объект IPC с некоторым именем, а клиенты используют это имя при доступе к объекту.

12.8. Упражнения по главе 12

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

12.2. Изучите заголовочный файл <errno.h> в вашей системе и выясните, как определена переменная errno.

Глава 13. Именованные и неименованные каналы

13.1. Введение

Неименованные каналы – это самая первая форма IPC в Unix, появившаяся еще в 1973 году в третьей версии. Несмотря на полезность во многих случаях, главным недостатком неименованных каналов является отсутствие имени, вследствие чего они могут использоваться для взаимодействия только родственными процессами. Это было исправлено в Unix System III (1982) добавлением каналов FIFO, которые иногда называются именованными каналами. Доступ и к именованным каналам, и к именованным организуется с помощью обычных функций read и write.

В этой главе описываются детали, касающиеся создания и использования программных каналов и каналов FIFO. Мы рассмотрим пример простейшего сервера файлов, а также обратим внимание на некоторые детали модели клиент-сервер, в частности, постараемся определить количество требуемых каналов IPC, сравним последовательные серверы с параллельными и неструктурированные потоки байтов с сообщениями.

Соседние файлы в папке Chapter.4