Message-passing

Introduction

Processes can communicate exchanging messages.

  • A general communication mechanism, not requiring explicit shared memory, that includes both communication and synchronization.

  • Valid for uniprocessor and multiprocessor systems.

Two operations are required:

  • send and receive.

A communication link is required.

  • That can be categorized in different ways:

    • Direct or indirect communication.

    • Synchronous or asynchronous communication.

    • Type of buffering.

Direct and indirect communication

Symmetric direct communication.

A process that wants to communicate must explicitly name the receiver or sender.

  • send(P, msg)– send message msg to process P

  • receive(P, msg) – receive message msg from process P

A communication link in this scheme has the following properties:

  • it is established automatically between a pair of communicating processes.

  • it is associated with exactly two processes.

  • between a pair of communicating processes there exist exactly one link.

Asymetric direct communication.

  • Only the sender must explicitly name the receiver.

    • send(P, msg)– send message msg to process P

    • receive(id, msg) – receive message msg from process P

Indirect communication

The messages are sent to and received from mailboxes, or ports.

  • send(M, msg)– send message msg to mailbox M

  • receive(M, msg) – receive message msg from mailbox M

A communication link in this scheme has the following properties:

  • it is only established if the pair of communicating processes has a shared mailbox.

  • it may be associated with more than two processes.

  • between a pair of processes there may exist more than one link (a mailbox per each).

The problem of two or more processes trying to receive a message from the same mailbox.

  • Is it allowed?

  • If allowed, which one will succeed?

Synchronization

From a synchronization point of view, there are different design options for implementing send and receive.

  • Blocking send – the sending process blocks until the message is received by the receiving process or by the mailbox.

  • Nonblocking send – the sending process sends the message and resumes operation.

  • Blocking receive – the receiver blocks until a message is available.

  • Nonblocking receive – the receiver retrieves either a valid message or the indication that no one exits.

Different combinations of send and receive are possible.

Buffering

There are different design options for implementing the link supporting the communication.

  • Zero capacity – there is no queue.

    • the sender must block until the recipient receives the message.

  • Bounded capacity – the queue has finite length.

    • if the queue is full, the sender must block until space is available.

  • Unbounded capacity – the queue has (potentially) infinite length.

Bounded-buffer problem

There is no need to deal with mutual exclusion and synchronization explicitly.

  • the send and receive primitives take care of it.

Last updated