Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
зачёт Сёмкин.docx
Скачиваний:
5
Добавлен:
19.12.2018
Размер:
196.86 Кб
Скачать

5.Передача сообщений в сетевых системах. Синхронизация процессов при передачи сообщений.

Практически всё взаимодействие между процессами осуществляется передачей сообщений.

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

В заголовке содержится следующая информация:

- адрес. Набор символов, уникально определяющий отправляющий и получающий процесс. Адрес состоит из двух частей: адрес отправителя и адрес получателя. Причём, в сетевых системах адрес уникален и имеет свою структуру;

- идентификатор сообщения. Некоторый последовательный номер сообщения.

Данные – некоторая структурированная информация:

- тип данных. Может быть указание на то, являются данные резидентными (непосредственно в сообщении) или нерезидентными (находятся где-то в другом месте, а тут только указатель на это место);

- поле длины данных (данные могут быть переменной длины);

- собственно данные.

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

Вопросы, решаемые при передаче сообщений и влияющие на её эффективность:

1) способ задания адреса получателя;

2) количество получателей;

3) требуется ли гарантированная доставка сообщений (нужно ли подтверждение получения);

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

5) нужна ли буферизация сообщений и как себя вести при переполнении буфера; 6) может ли приёмник менять порядок обработки сообщений.

От того, как протокол передачи сообщений отвечает на эти вопросы, зависит семантика протокола передачи.

Синхронизация процессов при передаче сообщений

Коммуникационные примитивы делятся на блокирующие (синхронные) и неблокирующие (асинхронные).

При использовании блокирующего примитива send процесс, выдавший запрос на его выполнение, приостанавливается до выдачи сообщения о том, что приёмник получил сообщение, а вызов блокирующего примитива receive приостанавливает выполнение процесса-получателя до получения сообщения. Вот так вот:

Если что-то произойдёт с коммуникационной сетью, то произойдёт бесконечная блокировка. Поэтому используют механизм time out.

При использовании неблокирующих примитивов, управление возвращается процессу немедленно. Для того, чтобы получить информацию о том, что процесс P1 получил сообщение, процесс P2 должен использовать примитив test, чтобы определить. Вот так:

Вместо примитивы test можно использовать систему прерывания.

6. Буферизация при синхронном и асинхронном взаимодействии процессов.

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

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

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