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

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

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

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

 

Возможно стоит прочитать: