Операционные системы. Курс лекций




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


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

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

Для систем обмена сообщениями так же важен вопрос названия процессов, необходимо однозначно определить процесс, указанный в запросе send или receive.

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

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

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

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


Содержание  Назад  Вперед