This chapter
The UNIX operating system is one of the older of the widely used operating
systems, with a history of more than 30 years. UNIX has changed over the
time, and many of its most distinctive and useful facilities are relatively
recent developments [Leff88]. The design of the UNIX operating system
had a major impact on nearly all operating systems developed later.
UNIX supports multiple processes to be
(virtually) executed at the same time. Processes ``live'' and sometimes
need to communicate to exchange data or to synchronize their work.
Originally UNIX had very poor ``interprocess'' communication facilities.
Today many different approaches are available. Some are restricted
to work only for processes which are executed on the same computer, and
some make it possible for communication between processes on different
computers via a network.
The aim of this Individual Project is to
It is assumed that the reader has a good knowledge of
C/C++, as no programming language features are described. If this is
not the case, [Strou91] is a good starting point for learning C++.
The reader should also be familiar with the UNIX operating system and
normal UNIX programming. This does not include network programming.
This document does not describe how to invoke a C/C++ compiler, how to use
'make' or other UNIX standard commands.
There now follows an outline of the purpose of subsequent chapters.
Chapter 2 summarizes what was done to achieve the
aims stated above, discusses some design decisions (with reasons why certain
decisions were taken) and gives important background information.
This includes: the history of the UNIX operating system; important UNIX
standards; communication principles; the principles of client/server
communication and the aim of interprocess communication.
Chapter 3 describes the interprocess communication (IPC)
facilities which are only available if the processes which want to
communicate run on the same computer.
Communication between processes on different computers adds additional
complexity. Therefore the principles of networking in general are described
in Chapter 4.
As theory is nice, but useless without practice, the successful TCP/IP
protocol suite is summarized in Chapter 5 as an example of
an existing network protocol.
This information is then used in Chapter 6 to cover two different
Application Protocol Interfaces (APIs) for networking: BSD sockets and the
System V Transport Layer Interface (TLI). These two interfaces
are used to demonstrate how to write client and server applications
that use the TCP/IP protocol suite.
In Chapters 3 and 6 example programs
demonstrate how to use the described interprocess communication facilities.
To choose the right IPC facility for a specific purpose the performance
is often important. Therefore the
performance of all described IPC facilities are measured, compared and
discussed in Chapter 7.
The overheads of making communication reliable in spite of using an
unreliable communication service are discussed in Chapter 8.
Functions are developed which use an unreliable protocol (e.g. UDP),
but enable reliable communication between two or more processes.
Chapter 9 covers the conclusions of this Individual Project,
describes shortcomings, possible improvements and gives a short overview about
new developments.
The annotated references chapter Chapter 10 contains the
books and other information sources that were used to write
this document.
The Appendix contains