Программные каналы (pipe)

Это другое средство передачи сообщения от одного процесса к другому. Иногда называют конверторами. Они характеризуются следующим:

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

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

3. Программный канал всегда работает только по дисциплине FIFO. Один указатель показывает на первый байт, а второй - на последний. Поэтому программный канал, несмотря на то, что использует файл на диске рассматривается как некоторый поток данных.

 

Лекция 6.

1. CREAT PIPE (WRITE HANDLE, READ HANDLE, PIPE SIZE)

Описатель канала, чтение канала и размер канала (как правило, размер небольшой, не более 64 килобайт). Если канал забит, то записать в него уже невозможно и процесс становится в режим ожидания. Первые два параметра- основные необходимые параметры, которые должны быть известны двум процессам.

2. READ (READ HANDLE, BYTESREAD)

Оператор чтения из канала указывает число байт, которое намереваются прочесть.

3. WRITE (WRITE HANDLE, BYTE WRITE)

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

 

Это механизм, предназначенный для передачи информации от одного процесса к другому.

 

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

С точки зрения реализации очередь и каналы различаются.

  1. В отличие от канала, в котором обмениваются сообщениями только 2 процесса, в очереди обмен может происходить между многими процессами.
  2. Если для организации канала используется файл PIPE, то в очередях выделяется сегмент оперативной памяти.
  3. Любой процесс «Читатель» может читать сообщения выборочно, т.е. не в том порядке в каком они стоят в очереди, при этом если канал работает по принципу FIFO, то очередь использует 4 разных принципа (FIFO, LIFO, приоритетной выборки, произвольная выборка)
  4. После того как сообщения, каким- либо процессом- читателем прочитано, оно не удаляется из очереди и может читаться этим процессом или другим.
  5. Если в каналах непосредственно передаются данные, т.е. сообщения, то в очереди в действительности передаются не сообщения, а только адреса местоположения этих сообщений, с указанием размеров, т. е. Длин сообщений.

 

Число и синтаксис операторов управления очередью резко отличаются в разных ОС. Перечислим возможные функции операторов:

  1. Создание новой очереди.
  2. Открыть существующую очередь (такой оператор используется «читателем» для установления связи с очередью).
  3. Читать без удаления.
  4. Читать с удалением из очереди.
  5. Добавление сообщений в очередь.
  6. Завершение использования очереди.
  7. Определение числа сообщений в очереди. И др. различные операторы.

В качестве параметров может быть большое разнообразие:

 

  1. Идентификатор процесса
  2. Адрес и длина переданного сообщения.
  3. Отметка о том, что должен ли процесс читатель ждать пока очередь пуста.
  4. Приоритет сообщения или семафора.

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: