Operating System - Inter-Process Communication – Message Passing System
In a multiprogramming operating system, multiple processes run concurrently. These processes often need to communicate with each other — for coordination, data sharing, or synchronization.
One of the most common methods of IPC is the Message Passing System.
What is Message Passing in IPC?
Message Passing is a method where processes communicate by sending and receiving messages. Unlike shared memory, they do not share memory space — instead, all data is exchanged explicitly via messages.
Basic Concepts:
| Term | Description |
|---|---|
| Sending | A process sends a message to another process. |
| Receiving | A process receives a message sent by another process. |
| Message | A data unit that may include a sender ID, receiver ID, message content, etc. |
| Communication Link | A logical or physical path for message transfer. |
Types of Message Passing:
| Type | Explanation |
|---|---|
| Direct Communication | Processes must name each other explicitly (e.g., send(P2, message)). |
| Indirect Communication | Messages go through mailboxes (message queues) — no need to name the other process. |
| Synchronous (Blocking) | Sender waits until the receiver gets the message (tight coordination). |
| Asynchronous (Non-blocking) | Sender continues execution immediately after sending the message. |
Diagram: Message Passing Between Two Processes
+------------+ Message +------------+
| Process A | -----------------> | Process B |
| (Sender) | (send msg) | (Receiver) |
+------------+ +------------+
In case of bidirectional communication:
+------------+ Message 1 +------------+
| Process A | -----------------> | Process B |
| | <----------------- | |
+------------+ Message 2 +------------+
Ex:2
Imagine two friends texting:
-
Friend A sends a message: “Meet at 5.”
-
Friend B receives it and replies: “Okay!”
This is asynchronous message passing — no shared memory, just passing data via messages.
Advantages:
-
No need for shared memory (good for distributed systems).
-
Safer communication (less risk of memory corruption).
Disadvantages:
-
Slower than shared memory for large data.
-
More overhead in context switching and kernel involvement.