Лекции по операционным системам, страница 10

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

Почтовые ящики могут использоваться отправителями и получателями по-разному. Может быть обеспечена связь между 1 отправителем и одним получателем – это простейший случай.

Правило работы с почтовыми ящиками могут различаться у ОС.

Некоторый процесс Р1 может передать, а Р2 может читать. При этом Р2 может читать, а может не читать.

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

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

Иногда используется и такой режим работы с почтовыми ящиками:

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

Реализация почтовых ящиков требует использования специальных операторов. Наиболее типовые операторы:

1.  SEND_MESSADGE (получатель, сообщение, буфер )

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

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

2.  WAIT_MESSADGE ([отправитель], [ сообщение ], [ буфер ])

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