Program Development using Unix Generic IPC Operations
Contents
Introduction
Shared memory
Pipeline
Streams
Sockets
Signals
Processes do not run in isolation from each other.
Generally they need to communicate
with each other.
Example:
Any two processes in a Unix or MSDOS pipeline are communicating.
One sends a stream of bytes
to the other.
Example:
Access to the lineprinter is controlled by a single process called ``lpd''
(the lineprinter daemon). Each time a user runs ``lpr'' this has to communicate
with ``lpd'' and send it the file to print.
Example:
Your home directories are stored on the machine ``willow''.
Each time you access
a file the O/S has to make a connection to willow, request the file from a
suitable process on willow and accept responses from it.
Example:
When a spreadsheet is embedded within a word-processor document
there needs to be communication of window sizes, etc, between them.
There are many models of IPC, with different advantages and problems.
If two processes share the same piece of memory then they can use this to communicate.
For example, one may write information in this shared area and the other may
read it.
This can be a very fast method of information transfer because RAM can be used.
Synchronisation is a major problem - if the first process keeps writing data,
how can it ensure that the second one reads it?
A pipe acts like a channel betwen two processes. When one process writes into
the pipe the other process can read from it. A pipe can usually buffer information
so that the writer can place a lot of information in the pipe before the child
has to read it. When the pipe becomes full the writer has to suspend.
Pipes can be un-named. This is the norm in Unix where a process creates a pipe
and then forks, so that the two processes share the pipe between them.
If the processes do not come from a common ancestor then they can only share
a pipe if they can both name it (otherwise they could not find it). Named pipes
usually appear as though they were files in the file system.
Pipes carry unstructured data - you put bytes in one end and get the same bytes
out the other. Streams are designed to carry record information - you put records
in at one end and get the same records out the other. Each record must contain
a field saying how large it is.
Sockets are more like ports that you can send data to. A process will be ``listening''
at a port and will accept data sent to it.
Signals are a fairly crude method if IPC. A process may send a signal to another
such as ``wake up'' or ``die''. The other process can respond to these signals
in various ways.
Program Development using Unix Home
Jan Newmarch (http://jan.newmarch.name)
jan@newmarch.name
Copyright © Jan Newmarch
Last modified: Wed Nov 19 18:22:45 EST 1997