Конвейеры (программные каналы)

Почтовые ящики

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

Основные достоинства почтовых ящиков:

· процессу не нужно знать о существовании других процессов до тех пор, пока он не получит сообщения от них;

· два процесса могут обмениваться более чем одним сообщением за один раз;

· операционная система может гарантировать, что никакой процесс не вмешается в «беседу» других процессов:

· очереди буферов позволяют процессу-отправителю продолжать работу, обращая внимания на получателя.

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

Конвейер (pipe –программный канал, транспортер) является средством, с помощью которого можно производить обмен данными между процессами. Принцип работы конвейера основан на механизме ввода/вывода, который используется с файлами в UNIX – задача, передающая информацию, действует так, как будто она записывает данные в файл, в то время как задача, для которой предназначается эта информация, читает ее из этого файла. Операции записи и чтения осуществляются не записями, как это делается в обычных файлах, а потоком байтов, как это делается в UNIX-системах. Функции, с помощью которых выполняется запись в канал и чтение из него, являются теми же самыми, что и при работе с файлами. На самом деле конвейеры являются не файлами на диске, а представляют собой буферную память, работающую по принципу обычной очереди (FIFO – first input, first output)

Конвейер имеет максимальный размер 64 Кбайт и работает циклически.

Рис. 2. Организация очереди на массиве.

Имеется некий массив и два указателя, равные нулю в начальный момент:

· один показывает на первый элемент – Head (Голова);

· второй – на последний – Tail (Хвост).

Запись (добавление) одного элемента в пустую очередь делает оба указателя, равными единице. В последующем при добавлении нового элемента увеличивается указатель Tail. Чтение (удаление) элемента производится, начиная с первого элемента созданной очереди. При этом, следовательно, будет увеличиваться указатель Head. Таким образом, в результате операций записи и чтения указатели будут перемещаться от начала массива к его концу. При достижении указателем значения индекса последнего элемента, значение указателя вновь становится равным единице. Массив как бы замыкается в кольцо, организуя круговое перемещение указателей. Сказанное проиллюстрировано на рис. 2.

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


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



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