Распределенные системы обладают принципиальными отличиями от систем, использующих общую память. Если для локального взаимодействия процессы имеют возможность непосредственно обратиться к разделяемой памяти, как следствие имеет возможность использовать соответствующие механизмы синхронизации, основанные на разделяемых переменных, в распределенных системах каждый процесс использует свою собственную локальную память.
П1 <=> П2
| |
ЛП1 ЛП2
В распределенных системах для построения механизмов синхронизации вместо разделяемых переменных используются средства передачи сообщений. Для поддержки механизма обмена сообщениями узлы распределённой системы «соединяются» с помощью специальных аппаратно-программных средств, называемых каналами. Каналы бывают разные...;)
Передача сообщений:
Обмен сообщениями может быть осуществлён в 2 режимах: синхронная передача сообщений и асинхронная передача сообщений.
Под синхронизацией: очередное сообщение отправляется от источника к получателю при условии подтверждении последним прочтения предыдущего сообщения.
|
|
При асинхронной передаче такое подтверждение не требуется.
Соответственно для отправки сообщения используется примитив SEND, для получения сообщения RECIEVE.
SEND — поддерживает асинхронный режим передачи и является неблокирующим примитивом. Для синхронной передачи применяется SYNCH_SEND.
При блокировке — приостановка процесса.
Сообщения в общем случае состоят из служебного заголовка и порции данных. В случае пустого сообщения можно провести аналогию с семафорными механизмами синхронизации.
Каналы и передача сообщений
Канал
Для описания каналов используется следующая нотация:
chan ch(type1id1,...,typeNidN)
В скобках описываем имена полей и их типы
chan input(char)
chan disk_a(int cyl, int block, int count, char* buf)
chan result[n](int)
Процесс управляет сигналами используя send ch (expr1,...,expr n) //поле сообщ.
Recieve ch (var1,...,varn)
empty(ch)
Так как recieve является блокир. Вводится режим проверки в случае если сообщение в канале отсутствует.
Каналы являются глобальными для всех процессов, тоесть канал можнт и читать и писать данные в V канал.
Если канал используется как для передачи так и отправления сообщения его называют почтовым ящиком. Если у канала 1 получатель и несколько отправителей используется порт.