
Section 0.  Distributed Programming 
 Q0.1  What is a multi-computer?
 Q0.2  What is Distributed Shared Memory?
   
Section 1.  Introduction to DIPC
 Q1.1  What is DIPC?
 Q1.2  What software is needed to use it?
 Q1.3  What hardware is needed to use it?
 Q1.4  Does DIPC need a kernel re-compile?
 Q1.5  What is a DIPC cluster?
 Q1.6  Is DIPC a heterogeneous distributed system?
 Q1.7  Can DIPC be used on a WAN?
 Q1.8  Are there any ports to other operating systems?
 Q1.9  What is DIPC's Copyright status?
 
Section 2.  DIPC on the Internet
 Q2.1  Where can I get DIPC's sources and documents?
 Q2.2  Are there any web pages for DIPC?
 Q2.3  What mailing lists are there for DIPC?
 Q2.4  Are the postings to the mailing list archived anywhere?

Section 3.  Setting up DIPC
 Q3.1  How do I install DIPC?
 Q3.2  Are there any utility programs for DIPC?
 Q3.3  Can I use UDP and TCP in different computers of the same cluster?
 Q3.4  Can different DIPC page sizes be used in the same cluster?
 Q3.5  Can I use the page mode and the segment mode in the same clsuter?
 Q3.6  Is it possible to use different versions of DIPC on different computers?
 Q3.7  Can dipcd work with a kernel compiled with a different version of DIPC? 

Section 4.  Developing distributed applications 
 Q4.1  What is System V IPC? 
 Q4.2  How a distributed program is written?

Section 5.  Common problems
 Q5.1  After installing DIPC, the kernel does not compile.
 Q5.2  DIPC does not work properly.

Section 6. Getting help, reporting problems, and offering help.
 Q6.1  Where can I find help about DIPC or report a problem?
 Q6.2  Can I help in DIPC's development?



Section 0.  Distributed Programming 
----------
 Q0.1  What are multi-computers?
  These are also called distributed systems. Here the system consists of 
 a number of autonomous computers connected by a network. There is no shared
 memory or clock. Any exchange of information between these computers 
 is done be via the network, and each computer should have all the data
 needed for its processings in its local memory. The programmer of such a
 system should distribute the data at the proper time among the computers.
 It is rather easy to build a multi-computers. The much harder thing is 
 to program them! 


 Q0.2  What is Distributed Shared Memory (DSM)?   
  The lack of shared memory makes distributed programming very different from
 ordinary systems with shared memory. DSM is an effort to ease the programming 
 of multi-computers by simulating some shared memory that is accessable in a 
 distributed environment.

  DSM allows programmers to use familiar algorithms in multi-computers, with 
 very little change. However, due to the relative slowness of computer 
 networks, care should be taken that the resulting distributed program 
 does not spend a lot of time transferring data over the network.


Section 1.  Introduction to DIPC
----------
 Q1.1  What is DIPC?
  DIPC stands for Distributed Inter-Process Communication. It enables
 you to build and program multi-computers very easily. It provides,
 among other things, Transparent Distributed Shared Memory (DSM). All
 the hardware that you need are some personal computers connected to a
 TCP/IP network. The machines could be side by side and use a a null
 modem, low speed serial line for data transfer, they could also be
 connected by an Ethernet network, or even be in different continents
 and connected to the Internet. The current implementation requires an
 i386 or better machine. The software is a modified version of the
 Linux operating system.

 Q1.2  What software is needed to use it?
  You need the Linux operating system sources, and a C compiler. TCP/IP support 
 should also be present.

 Q1.3  What hardware is needed to use it?
  No special hardware is required. Any computer running Linux can be used.
 Just make sure DIPC supports the CPU.

  For actually using DIPC in a distributed environment, you also need a
 functioning network. 
 
 Q1.4  Does DIPC need a kernel re-compile?
  Yes. DIPC works by changing some of the kernel parts, so the kernel 
 should be compiled and re-installed.
 
 Q1.5  What is a DIPC cluster?
  All the computers that can communicate under DIPC form a cluster. The
 thing that places these machines in the same cluster is that they use the
 same name server, called the "referee" in DIPC. Refer to the theory file for
 more information. 

 Q1.6  Is DIPC a heterogeneous distributed system?
  DIPC is currently available for i386 and m68k processors. Parts of the same
 distributed application can run in incompatible machines, meaning that DIPC
 is a heterogeneous system.

  Miguel Parreira Paz is currently working on a port of DIPC to DEC ALPHA
 processors.

 Q1.7  Can DIPC be used on a WAN?
  Yes. DIPC has been successfully tested on an inter-continental WAN by
 Tim Bynum, Klaus Thielking Riechert, and Michael Schmitz.

 Q1.8  Are there any ports to other operating systems?
  Brian Hechinger (wonko@blackhole.arkham.net) is currently porting DIPC to the 
 NetBSD operating system. Any help in this project is appreciated.

 Q1.9  What is DIPC's Copyright status?
  DIPC is copyrighted by Kamran Karimi, but is freely usable and
 distributable. You can use and modify its sources as you like. However,
 it would be a good idea to inform Kamran Karimi of your work.


Section 2.  DIPC on the Internet
----------
 Q2.1  Where can I get DIPC's sources and documents?
  You can get DIPC by anonymous FTP from either of these addresses:

  1) sunsite.unc.edu/pub/Linux/system/network/distrib/dipc

  2) wallybox.cei.net/pub/dipc

 Q2.2  Are there any web pages for DIPC?
  Target your browser at http://wallybox.cei.net/dipc

 Q2.3  What mailing lists are there for DIPC?
  The linux-dipc mailing list can be used for all sorts of discussions 
 about DIPC.

  Postings to: linux-dipc@wallybox.cei.net

  Subscribe by sending an email with the body "subscribe linux-dipc" to
 majordomo@wallybox.cei.net

 Q2.4  Are the postings to the mailing list archived?
  Yes. You can use a browser to access the postings at
 http://wallybox.cei.net/dipc/ml_archive.


Section 3.  Setting up DIPC
----------
 Q3.1  How do I install DIPC?
  Installing DIPC involves changing, compiling, and re-installing the kernel, 
 as well as compiling and installing some user-space programs. Some scripts
 (/etc/dipc.conf and /etc/dipc.allow) need to be edited.

  There is a script, "dipc.install", which does most of the work of installing
 DIPC. The file "quick.start" also has some information about installing the
 system.

 Q3.2  Are there any utility programs for DIPC?
  There are a number of tools to make working with DIPC easier. 

  *) dipcker is for inspecting and cleaning the IPC structures in the kernel.

  *) dipcref is for inspecting and cleaning the IPC structures registered in
     the referee process (see the theory file in the DIPC documentation for 
     more information about the referee).

  *) dipcshm is for inspecting the information about a distributed shared 
     memory segment, and also killing the shm_man process (see the theory 
     file in the DIPC documentation for more information about the referee).

  *) dipcx is an XView program to do all the above works, plus allowing you
     to edit the dipc configuration file (/etc/dipc.allow).  

 Q3.3  Can I use UDP and TCP in the same cluster?
  No. All the computers in the same cluster should either use TCP/IP, or
 UDP/IP. Changing the protocol requires killing dipcd and restaring with
 the proper options.

 Q3.4  Can I use different DIPC page sizes in the same cluster?
  No. The page sizes should be the same. Changing the page size requires 
 killing dipcd and editing the file /etc/dipc.conf. After that you can
 restart dipcd.

 Q3.5  Can I use the page mode and the segment mode in the same clsuter?
  Yes. Some of the computers can use the segment mode while others use the
 page mode. However, all these computers should have the same DIPC page size
 in /etc/dipc.conf.

 Q3.6  Is it possible to use different versions of DIPC on different computers?
  No. Unless mentioned in the doc files, DIPC versions are not backward
 compatible.

 Q3.7  Can dipcd work with a kernel compiled with a different version of DIPC? 
  No. The kernel and dipcd should be from the same DIPC version.


Section 4.  Developing distributed applications 
----------
 Q4.1  What is System V IPC?
  System V IPC is a set of facilities to enable processes in a single
 computer to exchange data and synchronize between themselves. These
 facilities include Shared Memories (for sharing address spaces between
 processes), Message Queues (for sending arrays of data bytes from one
 process to another), and Semaphores (for synchronization). Creating and 
 accessing an IPC structure is done by using a numerical key.

  Using System V IPC structures is rather like working with files:

  *) First you create a structure by providing a numerical key and get an ID
     value in return. This is like creating a file by giving its name, and
     getting a file handle in return.

  *) Then You can use the structure by using the ID in a number of system
     calls, which is a close reminder of using a handle to read or write to 
     a file.

  *) When there is no more need for the IPC structure, you should remove it
     by using a system call. The same is done for files which are no longer
     needed.

  Please refer to books on UNIX programming for more information.

  System V IPC was originally designed for AT&T UNIX, but now is available
 for many other UNIX variants.
 
 Q4.2  How a distributed program is written?
  To write a distributed program using DIPC, you have to develop your software 
 by using independent processes that exchange data through System V IPC 
 mechanisms. 

  By specifying a flag (IPC_DIPC) when creating an IPC structure, you inform
 the system that the resulting structure should be known and accessable in 
 other computers.

  One of the processes is usually designated as the main one. It initializes 
 data structures used in the program, so that other processes can assume a 
 certain state is present in the system when they start executing. Using
 the same key as the one used for creating the IPC structures, all the
 processes will be able to exchange data and synchronize.

  It is important to note that the speed of a network is usually less than
 the speed of an internal computer bus, so care should be taken that the
 program does not become to slow due to a lot of network access. This means
 that compared to the amount of computations, there should be as little
 communication as possible. 


Section 5.  Common problems
----------
 Q5.1  After installing DIPC, the kernel does not compile.
  Most probably the problem is that of an incompatible kernel version. The 
 DIPC kernel patch could not be applied to your current kernel. You can try to 
 use a kernel version number near the one used for creating the DIPC kernel
 patch.

 Q5.2  DIPC does not work properly.
  Possible sources are:

  *) A problem in patching and compiling the kernel after adding DIPC. 
     Look at the boot log to see if you can find the string printed by DIPC 
     at the boot time. It says: Distributed System V IPC. Version x.y.z

     If you don't see this, then DIPC is not present in the kernel.

  *) A problem in DIPC's configuration files.
     DIPC uses two configuration files: /etc/dipc.conf and /etc/dipc.allow.
     These _should_ be modified after the installation. Refer to the dipcd.doc
     file in the DIPC documentation for more info about these files.

  *) A problem in the network you are using.
     Try running some example DIPC programs in the same computer. If things
     work, then you are encountering a network problem.


Section 6. Getting help, reporting problems, and offering help.
----------
 Q6.1  Where can I find help about DIPC or report a problem?
  Simply send an email to DIPC's mailing list at linux-dipc@wallybox.cei.net.

 Q6.2 Can I help in DIPC's development?
  Most probably you can, and any help is welcome. Contact the mailing list 
 about this.

