Process Addressing Techniques
Another important issue in message-based communication is addressing (or naming) of the parties involved in an interaction. For greater flexibility a message-passing system usually supports two types of process addressing:
- Explicit addressing. The process with which communication is desired is explicitly named as a parameter in the communication primitive used.
- Implicit addressing. The process willing to communicate does not explicitly name a process for communication (the sender names a server instead of a process). This type of process addressing is also known as functional addressing.
Methods to Identify a Process (naming)
A simple method to identify a process is by a combination of machine_id and local_id. The local_id part is a process identifier, or a port identifier of a receiving process, or something else that can by used to uniquely identify a process on a machine. The machine_id part of the address is used by the sending machine’s kernel to send the message to the receiving process’s machine, and the local_id part of the address is then used by the kernel of the receiving process’s machine to forward the message to the process for which it is intended.
A drawback of this method is that it does not allow a process to migrate from one machine to another if such a need arises.
To overcome the limitation of the above method, process can be identified by a combination of the following three fields: machine_id, local_id and machine_id.
- The first field identifies the node on which the process was created.
- The second field is the local identifier generated by the node on which the process was created.
- The third field identifies the last known location (node) of the process.
Another method to achieve the goal of location transparency in process addressing is to use a two-level naming scheme for processes. In this method each process has two identifiers: a high-level name that is machine independent (an ASCII string) and the low-level name that is machine dependent (such as pair (machine_id, local_id). A name server is used to maintain a mapping table that maps high-level names of processes to their low-level names.