home *** CD-ROM | disk | FTP | other *** search
/ Unix System Administration Handbook 1997 October / usah_oct97.iso / rfc / 00s / rfc62.txt < prev    next >
Text File  |  1997-09-19  |  56KB  |  1,123 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                       D. C. Walden
  8. Request for Comments: 62                                        BBN Inc.
  9. Supercedes NWG/RFC #61                                     3 August 1970
  10.  
  11.  
  12.                 A System for Interprocess Communication
  13.                                  in a
  14.                    Resource Sharing Computer Network
  15.  
  16. 1.  Introduction
  17.  
  18.    If you are working to develop methods of communications within a
  19.    computer network, you can engage in one of two activities.  You can
  20.    work with others, actually constructing a computer network, being
  21.    influenced, perhaps influencing your colleagues.  Or you can
  22.    construct an intellectual position of how things should be done in an
  23.    ideal network, one better than the one you are helping to construct,
  24.    and then present this position for the designers of future networks
  25.    to study.  The author has spent the past two years engaged in the
  26.    first activity.  This paper results from recent engagement in the
  27.    second activity.
  28.  
  29.    "A resource sharing computer network is defined to be a set of
  30.    autonomous, independent computer systems, interconnected so as to
  31.    permit each computer system to utilize all of the resources of the
  32.    other computer systems much as it would normally call a subroutine."
  33.    This definition of a network and the desirability of such a network
  34.    is expounded upon by Roberts and Wessler in [9].
  35.  
  36.    The actual act of resource sharing can be performed in two ways:  in
  37.    an ad hoc manner between all pairs of computer systems in the
  38.    network; or according to a systematic network-wide standard.  This
  39.    paper develops one possible network-wide system for resource sharing.
  40.  
  41.    I believe it is natural to think of resources as being associated
  42.    with processes<1> and available only through communication with these
  43.    processes.  Therefore, I view the fundamental problem of resource
  44.    sharing to be the problem of interprocess communication.  I also
  45.    share with Carr, Crocker, and Cerf [2] the view that interprocess
  46.    communication over a network is a subcase of general interprocess
  47.    communication in a multi-programmed environment.
  48.  
  49.    These views have led me to perform a two-part study.  First, a set of
  50.    operations enabling interprocess communication within a single time-
  51.    sharing system is constructed.  This set of operations eschews many
  52.    of the interprocess communications techniques currently in use within
  53.    time-sharing systems -- such as communication through shared memory
  54.    -- and relies instead on techniques that can be easily generalized to
  55.  
  56.  
  57.  
  58. Walden                                                         [Page 1]
  59.  
  60. RFC 62                  IPC for Resource Sharing          3 August 1970
  61.  
  62.  
  63.    permit communication between remote processes.  The second part of
  64.    the study presents such a generalization.  The application of this
  65.    generalized system to the ARPA Computer Network [9] is also
  66.    discussed.
  67.  
  68.    The ideas enlarged upon in this paper came from many sources.
  69.    Particularly influential were -- 1) an early sketch of a Host
  70.    protocol for the ARPA Network by S. Crocker of UCLA and W. Crowther
  71.    of Bolt Beranek and Newman Inc. (BBN); 2) Ackerman and Plummer's
  72.    paper on the MIT PDP-1 time-sharing system [1]; and 3) discussions
  73.    with W. Crowther and R. Kahn of BBN about Host protocol, flow
  74.    control, and message routing for the ARPA Network.  Hopefully, there
  75.    are also some original ideas in this note.  I alone am responsible
  76.    for the collection of all of these ideas into the system described
  77.    herein, and I am therefore responsible for any inconsistencies or
  78.    bugs in the system.
  79.  
  80.    It must be emphasized that this paper does not represent an official
  81.    BBN position on Host protocol for the ARPA Computer Network.
  82.  
  83.  
  84. 2.  A System for Interprocess Communication within a Time-Sharing System
  85.  
  86.    This section describes a set of operations enabling interprocess
  87.    communication within a time-sharing system.  Following the notation
  88.    of [10], I call this interprocess communication facility an IPC.  As
  89.    an aid to the presentation of this IPC, a model for a time-sharing
  90.    system is described; this model is then used to illustrate the use of
  91.    the interprocess communication operations.
  92.  
  93.    The model time-sharing has two pieces: the monitor and the processes.
  94.    The monitor performs such functions as switching control from one
  95.    process to another process when a process has used "enough" time,
  96.    fielding hardware interrupts, managing core and the swapping medium,
  97.    controlling the passing of control from one process to another (i.e.,
  98.    protection mechanisms), creating processes,caring for sleeping
  99.    processes, and providing to the processes a set of machine extending
  100.    operations (often called Supervisor or Monitor Calls).  The processes
  101.    perform the normal user functions (user processes) as well as the
  102.    functions usually thought of as being supervisor functions in a
  103.    time-sharing system (systems processes) but not performed by the
  104.    monitor in the current model.  A typical system process is the disc
  105.    handler or the file system.  System processes is the disc handler or
  106.    the file system.  System processes are probably allowed to execute in
  107.    supervisor mode, and they actually execute I/O instructions and
  108.    perform other privileged operations that user processes are not
  109.    allowed to perform.  In all other ways, user and system processes are
  110.    identical.  For reasons of efficiency, it may be useful to think of
  111.  
  112.  
  113.  
  114. Walden                                                         [Page 2]
  115.  
  116. RFC 62                  IPC for Resource Sharing          3 August 1970
  117.  
  118.  
  119.    system processes as being locked in core.
  120.  
  121.    Although they will be of concern later in this study, protection
  122.    considerations are not my concern here: instead I will assume that
  123.    all of the processes are "good" processes which never made any
  124.    mistakes.  If the reader needs a protection structure to keep in mind
  125.    while he reads this note, the capability system developed in
  126.    [1][3][7][8] should be satisfying.
  127.  
  128.    Of the operations a process can call on the monitor to perform, six
  129.    are of particular interest for providing a capability for
  130.    interprocess communication.
  131.  
  132.    RECEIVE. This operation allows a specified process to send a message
  133.    to the process executing the RECEIVE. The operation has four
  134.    parameters: the port (defined below) awaiting the message -- the
  135.    RECEIVE port; the port a message will be accepted from -- the SEND
  136.    port; a specification of the buffer available to receive the message;
  137.    and a location to transfer to when the transmission is complete --
  138.    the restart location.
  139.  
  140.    SEND.  This operation sends a message from the process executing the
  141.    SEND to a specified process.  It has four parameters: a port to send
  142.    the message to -- the RECEIVE port; the port the message is being
  143.    sent from -- the SEND port; a specification of the buffer containing
  144.    the message to be sent; and the restart location.
  145.  
  146.    RECEIVE ANY.  This operations allows any process to send a message to
  147.    the process executing the RECEIVE ANY.  The operation has four
  148.    parameters: the port awaiting the message -- the RECEIVE port; a
  149.    specification of the buffer available to receive the message; a
  150.    restart location; and a location where the port which sent the
  151.    message may be noted.
  152.  
  153.    SEND FROM ANY.  This operation allows a process to send a message to
  154.    a process able to receive a message from any process.  It has the
  155.    same four parameters as SEND.  (The necessity for this operation will
  156.    be explained much later).
  157.  
  158.    SLEEP.  This operation allows the currently running process to put
  159.    itself to sleep pending the completion of an event.  The operation
  160.    has one optional parameter, an event to be waited for.  An example
  161.    event is the arrival of a hardware interrupt.  The monitor never
  162.    unilaterally puts a process to sleep as a result of the process
  163.    executing one of the above four operations; however, if a process is
  164.    asleep when one of the above four operations is satisfied, the
  165.    process is awakened.
  166.  
  167.  
  168.  
  169.  
  170. Walden                                                         [Page 3]
  171.  
  172. RFC 62                  IPC for Resource Sharing          3 August 1970
  173.  
  174.  
  175.    UNIQUE.  This operation obtains a unique number from the monitor.
  176.  
  177.    A port is a particular data path to a process (a RECEIVE port) or
  178.    from a process (a SEND port), and all ports have an associated unique
  179.    port number which is used to identify the port.  Ports are used in
  180.    transmitting messages from one process to another in the following
  181.    manner.  Consider two processes, A and B, that wish to communicate.
  182.    Process A executes a RECEIVE to port N from port M.  Process B
  183.    executes a SEND to port N from port M.  The monitor matches up the
  184.    port numbers and transfers the message from process B to process A.
  185.    As soon as the buffer has been fully transmitted out of process B,
  186.    process B is restarted at the location specified in the SEND
  187.    operation.  As soon as the message is fully received at process A,
  188.    process A is restarted at the location specified in the RECEIVE
  189.    operation.  Just how the processes come by the correct port numbers
  190.    with which to communicate with other processes is not the concern of
  191.    the monitor -- this problem is left to the processes.
  192.  
  193.    When a SEND is executed, nothing happens until a matching RECEIVE is
  194.    executed.  Somewhere in the monitor there must be a table of port
  195.    numbers associated with processes and restart locations.  The table
  196.    entries are cleared after each SEND/RECEIVE match is made.  If a
  197.    proper RECEIVE is not executed for some time, the SEND is timed out
  198.    after a while and the SENDing process is notified.  If a RECEIVE is
  199.    executed but the matching SEND does not happen for a long time, the
  200.    RECEIVE is timed out and the RECEIVing process is notified.
  201.  
  202.    The mechanism of timing out "unused" table entries is of little
  203.    fundamental importance, merely providing a convenient method of
  204.    garbage collecting the table.  There is no problem if an entry is
  205.    timed out prematurely, because the process can always re-execute the
  206.    operation.  However, the timeout interval should be long enough so
  207.    that continual re-execution of an operation will cause little
  208.    overhead.
  209.  
  210.    A RECEIVE ANY never times out, but may be taken back using a
  211.    supervisor call.  A message resultant from a SEND FROM ANY is always
  212.    sent immediately and will be discarded if a proper receiver does not
  213.    exist.  An error message is not returned and acknowledgment, if any,
  214.    is up to the processes.  If the table where the SEND and RECEIVE are
  215.    matched up ever overflows, a process originating a further SEND and
  216.    RECEIVE is notified just as if the SEND or RECEIVE timed out.
  217.  
  218.    The restart location is an interrupt entrance associated with a
  219.    pseudo interrupt local to the process executing the operation
  220.    specifying the restart location.  If the process is running when then
  221.    event causing the pseudo interrupt occurs (for example, a message
  222.    arrives satisfying a pending RECEIVE), the effect is exactly as if
  223.  
  224.  
  225.  
  226. Walden                                                         [Page 4]
  227.  
  228. RFC 62                  IPC for Resource Sharing          3 August 1970
  229.  
  230.  
  231.    the hardware interrupted the process and transferred control to the
  232.    restart location.  Enough information is saved for the process to
  233.    continue execution at the point it was interrupted after the
  234.    interrupt is serviced.  If the process is asleep, it is readied and
  235.    the pseudo interrupt is saved until the process runs again and the
  236.    interrupt is then allowed.  Any RECEIVE or RECEIVE ANY message port
  237.    may thus be used to provide process interrupts, event channels,
  238.    process synchronization, message transfers, etc.  The user programs
  239.    what he wants.
  240.  
  241.    It is left as an exercise to the reader to convince himself that the
  242.    monitor he is saddled with can be made to provide the six operations
  243.    described above -- most monitors can since these are only additional
  244.    supervisor calls.
  245.  
  246.    An example.  Suppose that our model time-sharing system is
  247.    initialized to have several processes always running.  Additionally,
  248.    these permanent processes have some universally known and permanently
  249.    assigned ports<2>.  Suppose that two of the permanently running
  250.    processes are the logger-process and the teletype-scanner-process.
  251.    When the teletype-scanner-process first starts running, it puts
  252.    itself to sleep awaiting an interrupt from the hardware teletype
  253.    scanner.  The logger-process initially puts itself to sleep awaiting
  254.    a message from the teletype-scanner-process via well-known permanent
  255.    SEND and RECEIVE ports.  The teleype-scanner-process keeps a table
  256.    indexed by teletype number, containing in each entry a pair of port
  257.    numbers to use to send characters from that teletype to a process and
  258.    a pair of port numbers to use to receive characters for that teletype
  259.    from a process.  If a character arrives (waking up the teletype-
  260.    scanner- process) and the process does not have any entry for that
  261.    teletype, it gets a pair of unique numbers from the monitor (via
  262.    UNIQUE) and sends a message containing this pair of numbers to the
  263.    logger-process using the ports for which the logger-process is known
  264.    to have a RECEIVE pending.  The scanner-process also enters the pair
  265.    of numbers in the teletype table, and sends the character and all
  266.    future characters from this teletype to the port with the first
  267.    number from the port with the second number.  The scanner-process
  268.    must also pass a second pair of unique numbers to the logger-process
  269.    for it to use for teletype output and do a RECEIVE using these port
  270.    numbers.  When the logger-process receives the message from the
  271.    scanner-process, it starts up a copy of what SDS 940 TSS [6] users
  272.    call the executive<3>, and passes the port numbers to this copy of
  273.    the executive, so that this executive-process can also do its inputs
  274.    and outputs to the teletype using these ports.  If the logger-process
  275.    wants to get a job number and password from the user, it can
  276.    temporarily use the port numbers to communicate with the user before
  277.    it passes them on to the executive.  The scanner-process could always
  278.    use the same port numbers for a particular teletype as long as the
  279.  
  280.  
  281.  
  282. Walden                                                         [Page 5]
  283.  
  284. RFC 62                  IPC for Resource Sharing          3 August 1970
  285.  
  286.  
  287.    numbers were passed on to only one copy of the executive at a time.
  288.  
  289.    It is important to distinguish between the act of passing a port from
  290.    one process to another and the act of passing a port number from one
  291.    process to another.  In the previous example, where characters from a
  292.    particular teletype are sent either to the logger-process or an
  293.    executive-process by the teletype-scanner-process, the SEND port
  294.    always remains in the teletype-scanner-process while the RECEIVE port
  295.    moves from the logger-process to the executive process.  On the other
  296.    hand, the SEND port number is passed between the logger-process and
  297.    the executive-process to enable the RECEIVE process to do a RECEIVE
  298.    from the correct SEND port.  It is crucial that, once a process
  299.    transfers a port to some other process, the first process no longer
  300.    use the port.  We could add a mechanism that enforces this.  The
  301.    protected object system of [9] is one such mechanism.  Using this
  302.    mechanism, a process executing a SEND would need a capability for the
  303.    SEND port and only one capability for this SEND port would exist in
  304.    the system at any given time.  A process executing a RECEIVE would be
  305.    required to have a capability for the RECEIVE port, and only one
  306.    capability for this RECEIVE port would exist at a given time.
  307.    Without such a protection mechanism, a port implicitly moves from one
  308.    process to another by the processes merely using the port at disjoint
  309.    times even if the port's number is never explicitly passed.
  310.  
  311.    Of course, if the protected object system is available to us, there
  312.    is really no need for two port numbers to be specified before a
  313.    transmission can take place.  The fact that a process knows an
  314.    existing RECEIVE port number could be considered prima facie evidence
  315.    of the process' right to send to that port.  The difference between
  316.    RECEIVE and RECEIVE ANY ports then depends solely on the number of
  317.    copies of a particular port number that have been passed out.  A
  318.    system based on this approach would clearly be preferable to the one
  319.    described here if it was possible to assume that all autonomous
  320.    time-sharing systems in a network would adopt this protection
  321.    mechanism.  If this assumption cannot be made, it seems more
  322.    practical to require both port numbers.
  323.  
  324.    Note that in the interprocess communication system (IPC) being
  325.    described here, when two processes wish to communicate they set up
  326.    the connection themselves, and they are free to do it in a mutually
  327.    convenient manner.  For instance, they can exchange port numbers or
  328.    one process can pick all the port numbers and instruct the other
  329.    process which to use.  However, in a particular implementation of a
  330.    time-sharing system, the builders of the system might choose to
  331.    restrict the processes' execution of SENDs and RECEIVEs and might
  332.    forbid arbitrary passing around of ports and port numbers, requiring
  333.    instead that the monitor be called (or some other special program) to
  334.    perform these functions.
  335.  
  336.  
  337.  
  338. Walden                                                         [Page 6]
  339.  
  340. RFC 62                  IPC for Resource Sharing          3 August 1970
  341.  
  342.  
  343.    Flow control is provided in this IPC by the simple method of never
  344.    starting data transmission resultant from a SEND from one process
  345.    until a RECEIVE is executed by the receiver.  Of course, interprocess
  346.    messages may also be sent back and forth suggesting that a process
  347.    stop sending or that space be allocated.
  348.  
  349.    Generally, well-known permanently-assigned ports are used via RECEIVE
  350.    ANY and SEND FROM ANY.  The permanent ports will most often be used
  351.    for starting processes and, consequently, little data will be sent
  352.    via them.  If a process if running (perhaps asleep), and has a
  353.    RECEIVE ANY pending, then any process knowing the receive port number
  354.    can talk to that process without going through loggers.  This is
  355.    obviously essential within a local time-sharing system and seems very
  356.    useful in a more general network if the ideal of resource sharing is
  357.    to be reached.  For instance, in a resource sharing network, the
  358.    programs in the subroutine libraries at all sites might have RECEIVE
  359.    ANYs always pending over permanently assigned ports with well-known
  360.    port numbers.  Thus, to use a particular network resource such as a
  361.    matrix manipulation hardware, a process running anywhere in the
  362.    network can send a message to the matrix inversion subroutine
  363.    containing the matrix to be inverted and the port numbers to be used
  364.    for returning the results.
  365.  
  366.    An additional example demonstrates the use of the FORTRAN compiler.
  367.    We have already explained how a user sits down at his teletype and
  368.    gets connected to an executive.  We go on from there.  The user is
  369.    typing in and out of the executive which is doing SENDs and RECEIVEs.
  370.    Eventually the user types RUN FORTRAN, and executive asks the monitor
  371.    to start up a copy of the FORTRAN compiler and passes to FORTRAN as
  372.    start up parameters the port numbers the executive was using to talk
  373.    to the teletype.  (This, at least conceptually, FORTRAN is passed a
  374.    port at which to RECEIVE characters from the teletype and a port from
  375.    which to SEND characters to the teletype.)  FORTRAN is, of course,
  376.    expecting these parameters and does SENDs and RECEIVEs via the
  377.    indicated ports to discover from the user what input and output files
  378.    the user wants to use.  FORTRAN types INPUT FILE? to the user, who
  379.    responds F001.  FORTRAN then sends a message to the file-system-
  380.    process, which is asleep waiting for something to do.  The message is
  381.    sent via well-known ports and it asks the file system to open F001
  382.    for input. The message also contains a pair of port numbers that the
  383.    file-system process can use to send its reply.  The file-system looks
  384.    up F001, opens it for input, make some entries in its open file
  385.    tables, and sends back to FORTRAN a message containing the port
  386.    numbers that FORTRAN can use to read the file.  The same procedure is
  387.    followed for the output file.  When the compilation is complete,
  388.    FORTRAN returns the teletype port numbers (and the ports) back to the
  389.    executive that has been asleep waiting for a message from FORTRAN,
  390.    and then FORTRAN halts itself.  The file-system-process goes back to
  391.  
  392.  
  393.  
  394. Walden                                                         [Page 7]
  395.  
  396. RFC 62                  IPC for Resource Sharing          3 August 1970
  397.  
  398.  
  399.    sleep when it has nothing else to do<4>.
  400.  
  401.    Again, the file-system process can keep a small collection of port
  402.    numbers which it uses over and over if it can get file system users
  403.    to return the port numbers when they have finished with them.  Of
  404.    course, when this collection of port numbers has eventually dribbled
  405.    away, the file system can get some new unique numbers from the
  406.    monitor.
  407.  
  408.  
  409. 3. A System for Interprocess Communication Between Remote Processes
  410.  
  411.    The IPC described in the previous section easily generalizes to allow
  412.    interprocess communication between processes at geographically
  413.    different locations as, for example, within a computer network.
  414.  
  415.    Consider first a simple configuration of processes distributed around
  416.    the points of a star.  At each point of the star there is an
  417.    autonomous operating system<5>.  A rather large, smart computer
  418.    system, called the Network Controller, exists at the center of the
  419.    star.  No processes can run in this center system, but rather it
  420.    should be thought of as an extension of the monitor of each of the
  421.    operating systems in the network.
  422.  
  423.    If the Network Controller is able to perform the operations SEND,
  424.    RECEIVE, SEND FROM ANY, RECEIVE ANY, and UNIQUE and if all of the
  425.    monitors in all of the time-sharing systems in the network do not
  426.    perform these operations themselves but rather ask the Network
  427.    Controller to perform these operations for them, then the problem of
  428.    interprocess communication between remote processes if solved.  No
  429.    further changes are necessary since the Network Controller can keep
  430.    track of which RECEIVEs have been executed and which SENDs have been
  431.    executed and match them up just as the monitor did in the model
  432.    time-sharing system.  A networkwide port numbering scheme is also
  433.    possible with the Network Controller knowing where (i.e., at which
  434.    site) a particular port is at a particular time.
  435.  
  436.    Next, consider a more complex network in which there is no common
  437.    center point, making it necessary to distribute the functions
  438.    performed by the Network Controller among the network nodes.  In the
  439.    rest of this section I will show that it is possible to efficiently
  440.    and conveniently distribute the functions performed by the star
  441.    Network Controller among the many network sites and still enable
  442.    general interprocess communication between remote processes.
  443.  
  444.    Some changes must be made to each of the four SEND/RECEIVE operations
  445.    described above to adapt them for use in a distributed Network
  446.    Controller.  To RECEIVE is added a parameter specifying a site to
  447.  
  448.  
  449.  
  450. Walden                                                         [Page 8]
  451.  
  452. RFC 62                  IPC for Resource Sharing          3 August 1970
  453.  
  454.  
  455.    which the RECEIVE is to be sent.  To the SEND FROM ANY and SEND
  456.    messages is added a site to send the SEND to although this is
  457.    normally the local site.  Both RECEIVE and RECEIVE ANY have added the
  458.    provision for obtaining the source site of any received message.
  459.    Thus, when a RECEIVE is executed, the RECEIVE is sent to the site
  460.    specified, possibly a remote site.  Concurrently a SEND is sent to
  461.    the same site, normally the local site of the process executing the
  462.    SEND.  At this site, called the rendezvous site, the RECEIVE is
  463.    matched with the proper SEND and the message transmission is allowed
  464.    to take place from the SEND site to the site from whence the RECEIVE
  465.    came.
  466.  
  467.    A RECEIVE ANY never leaves its originating site and therein lies the
  468.    necessity for SEND FROM ANY, since it must be possible to send a
  469.    message to a RECEIVE ANY port and not have the message blocked
  470.    waiting for a RECEIVE at the sending site.  It is possible to
  471.    construct a system so the SEND/RECEIVE rendezvous takes place at the
  472.    RECEIVE site and eliminates the SEND FROM ANY operation, but in my
  473.    judgment the ability to block a normal SEND transmission at the
  474.    source site more than makes up for the added complexity.
  475.  
  476.    At each site a rendezvous table is kept.  This table contains an
  477.    entry for each unmatched SEND or RECEIVE received at that site and
  478.    also an entry for all RECEIVE ANYs given at that site.  A matching
  479.    SEND/RECEIVE pair is cleared from the table as soon as the match
  480.    takes place.  As in the similar table kept in the model time-sharing,
  481.    SEND and RECEIVE entries are timed out if unmatched for too long and
  482.    the originator is notified.  RECEIVE ANY entries are cleared from the
  483.    table when a fulfilling message arrives.
  484.  
  485.    The final change necessary to distribute the Network Controller
  486.    functions is to give each site a portion of the unique numbers to
  487.    distribute via its UNIQUE operation.  I'll discuss this topic further
  488.    below.
  489.  
  490.    To make it clear to the reader how the distributed Network Controller
  491.    works, an example follows.  The details of what process picks port
  492.    numbers, etc., are only exemplary and are not a standard specified as
  493.    part of the IPC.
  494.  
  495.    Suppose that, for two sites in the network, K and L, process A at
  496.    site K wishes to communicate with process B at site L.  Process B has
  497.    a RECEIVE ANY pending at port M.
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506. Walden                                                         [Page 9]
  507.  
  508. RFC 62                  IPC for Resource Sharing          3 August 1970
  509.  
  510.  
  511.                         SITE K                        SITE L
  512.  
  513.                         ______                        ______
  514.                        /      \                      /      \
  515.                       /        \                    /        \
  516.                      /          \                  /          \
  517.                     /            \                /            \
  518.                    |              |              |              |
  519.                    |   Process A  |              |   Process B  |
  520.                    |              |              |              |
  521.                     \            /                \            /
  522.                      \          /      RECEIVE--> port M      /
  523.                       \        /       ANY          \        /
  524.                        \______/                      \______/
  525.  
  526.  
  527.    Process A, fortunately, knows of the existence of port M at site L and
  528.    sends a message using the SEND FROM ANY operation from port N to port
  529.    M.  The message contains two port numbers and instructions for process
  530.    B to SEND messages for process A to port P from port Q.  Site K's site
  531.    number is appended to this message along with the message's SEND port N.
  532.  
  533.                         SITE K                        SITE L
  534.  
  535.                         ______                        ______
  536.                        /      \                      /      \
  537.                       /        \                    /        \
  538.                      /          \                  /          \
  539.                     /            \                /            \
  540.                    |              |              |              |
  541.                    |   Process A  |              |   Process B  |
  542.                    |              |              |              |
  543.                     \   port N   /                \   port M   /
  544.                      \          /--->SEND FROM --->\          /
  545.                       \        /        ANY         \        /
  546.                        \______/                      \______/
  547.  
  548.                                    to port M, site L
  549.  
  550.                                    containing K,N,P, & Q
  551.  
  552.    Process A now executes a RECEIVE at port P from port Q.  Process A
  553.    specifies the rendezvous site to be site L.
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562. Walden                                                        [Page 10]
  563.  
  564. RFC 62                  IPC for Resource Sharing          3 August 1970
  565.  
  566.  
  567.                         SITE K                        SITE L
  568.  
  569.                         ______                        ______
  570.                        /      \                      /      \
  571.                       /        \                    /        \
  572.                      /          \        Rendezvous/          \
  573.                     /            \            table            \
  574.                    |              |              |              |
  575.                    |   Process A  |           ^  |   Process B  |
  576.                    |              |           |  |              |
  577.                     \   port P   /            |   \            /
  578.                      \          /             |    \          /
  579.                       \        / <--RECEIVE __/     \        /
  580.                        \______/     MESSAGE          \______/
  581.  
  582.                                     to site L
  583.  
  584.                                     containing P, Q, & K
  585.  
  586.  
  587.    A RECEIVE message is sent from site K to site L and is entered in the
  588.    rendezvous table at site L.  At some other time, process B executes a
  589.    SEND to port P from port Q specifying site L as the rendezvous site.
  590.  
  591.  
  592.                         SITE K                        SITE L
  593.  
  594.                         ______                       ______
  595.                        /      \                     /      \
  596.                       /        \                   /        \
  597.                      /          \       Rendezvous/          \
  598.                     /            \           table            \
  599.                    |              |             |              |
  600.                    |   Process A  |             |   Process B  |
  601.                    |              |             |              |
  602.                     \   port P   /        <--------- port Q   /
  603.                      \          /                 \          /
  604.                       \        /        SEND       \        /
  605.                        \______/                     \______/
  606.                                         to site L
  607.  
  608.                                         containing P & Q
  609.  
  610.    A rendezvous is made, the rendezvous table is cleared, and the
  611.    transmission to port P at site K takes place.  The SEND site number
  612.    (and conceivably the SEND port number) is appended to the messages of
  613.    the transmission for the edification of the receiving process.
  614.  
  615.  
  616.  
  617.  
  618. Walden                                                        [Page 11]
  619.  
  620. RFC 62                  IPC for Resource Sharing          3 August 1970
  621.  
  622.  
  623.                         SITE K                         SITE L
  624.  
  625.                         ______                        ______
  626.                        /      \                      /      \
  627.                       /        \                    /        \
  628.                      /          \                  /          \
  629.                     /            \                /            \
  630.                    |              |              |              |
  631.                    |   Process A  |              |   Process B  |
  632.                    |              |              |              |
  633.                     \   port P   /                \   port Q   /
  634.                      \          /<--transmission<--\          /
  635.                       \        /                    \        /
  636.                        \______/   to port P, site K  \______/
  637.  
  638.                                   containing data and L
  639.  
  640.    Process B may simultaneously wish to execute a RECEIVE from port N at
  641.    port M.
  642.  
  643.    Note that there is only one important control message in this system
  644.    which moves between sites, the type of message that is called a
  645.    Host/Host protocol message in [2].  This control message is the
  646.    RECEIVE message.  There are two other possible intersite control
  647.    messages: an error message to the originating site when a RECEIVE or
  648.    SEND is timed out, and the SEND message in the rare case when the
  649.    rendezvous site is not the SEND site.  There must also be a standard
  650.    format for messages between ports.  For example, the following:
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674. Walden                                                        [Page 12]
  675.  
  676. RFC 62                  IPC for Resource Sharing          3 August 1970
  677.  
  678.  
  679.          _________________           __________________      _____________
  680.         | rendezvous site |  <6>    | destination site |    | source site |
  681.         |-----------------|         |------------------|    |-------------|
  682.         |    RECEIVE port |         |   RECEIVE port   |    | RECEIVE port|
  683.         |-----------------|         |------------------|    |-------------|
  684.         |    SEND port    |         |   SEND port      |    | SEND port   |
  685.         |-----------------|         |------------------|    |-------------|
  686.         |                 |         |   source site    |    |             |
  687.         |                 |         |------------------|    |             |
  688.         |                 |         |                  |    |             |
  689.         |                 |         |                  |    |             |
  690.         |                 |         |                  |    |             |
  691.         |                 |         |                  |    |             |
  692.         |     data        |         |     data         |    |   data      |
  693.         |                 |         |                  |    |             |
  694.         |                 |         |                  |    |             |
  695.         |                 |         |                  |    |             |
  696.         |                 |         |                  |    |             |
  697.         |_________________|         |__________________|    |_____________|
  698.          transmitted                 transmitted             received
  699.          by SEND                     by Network              by RECEIVE
  700.          process                     Controller              process
  701.  
  702.    In the model time-sharing system it was possible to pass a port form
  703.    process to process.  This is still possible with a distributed Network
  704.    Controller.
  705.  
  706.    Remember that, for a message to be sent from one process to another, a
  707.    SEND to port M from port N and a RECEIVE at port M from port N must
  708.    rendezvous, normally at the SEND site.  Both processes keep track of
  709.    where they think the rendezvous site is and supply this site as a
  710.    parameter of appropriate operations.  The RECEIVE process thinks it is
  711.    the SEND site also.  Since once a SEND and a RECEIVE rendezvous the
  712.    transmission is sent to the source of the RECEIVE and the entry in the
  713.    rendezvous table is cleared and must be set up again for each further
  714.    transmission from N to M, it is easy for a RECEIVE port to be moved.
  715.    If a process sends both the port numbers and the rendezvous site
  716.    number to a new process at some other site which executes a RECEIVE
  717.    using these same old port numbers and rendezvous site specification,
  718.    the SENDer never knows the RECEIVEr has moved.  It is slightly harder
  719.    for a send port to move.  However, if it does, the pair of port
  720.    numbers that has been being used for a SEND and the original
  721.    rendezvous site number are passed to the new site.  The process at the
  722.    new SEND site specifies the old rendezvous site with the first SEND
  723.    from the new site.  The RECEIVE process will also still think the
  724.    rendezvous site is the old site, so the SEND and RECEIVE will meet at
  725.    the old site.  When they meet, the entry in the table at that site is
  726.    cleared, and both the SEND and RECEIVE messages are sent to the new
  727.  
  728.  
  729.  
  730. Walden                                                        [Page 13]
  731.  
  732. RFC 62                  IPC for Resource Sharing          3 August 1970
  733.  
  734.  
  735.    SEND site just as if they had been destined for there in the first
  736.    place.  The SEND and RECEIVE then meet again at the new rendezvous
  737.    site and transmission may continue as if the port had never moved.
  738.    Since all transmissions contain the source site number, further
  739.    RECEIVEs will be sent to the new rendezvous site.  It is possible to
  740.    discover that this special manipulation must take place because a SEND
  741.    message is received at a site that did not originate the SEND
  742.    message<7>.  Note that the SEND port and the RECEIVE port can move
  743.    concurrently.
  744.  
  745.    Of course, all of this could have also been done if the processes had
  746.    sent messages back and forth announcing any potential moves and the
  747.    new site numbers.
  748.  
  749.    A problem that may have occurred to the reader is how the SEND and
  750.    RECEIVE buffers get matched for size.  The easiest solution would be
  751.    to require that all buffers have a common size but this is
  752.    unacceptable since it does not easily extend to a situation where
  753.    processes in autonomous operating systems are attempting to
  754.    communicate.  A second solution is for the processes to pass messages
  755.    specifying buffer sizes.  If this solution is adopted, excessive data
  756.    sent from the SEND process and unable to fix into the RECEIVE buffer
  757.    is discarded and the RECEIVE process notified.  The solution has great
  758.    appeal on account of its simplicity.  A third solution would be for
  759.    the RECEIVE buffer size to be passed to the SEND site with RECEIVE
  760.    message and to notify the SEND process when too much data is sent or
  761.    even to pass the RECEIVE buffer size on to the SEND process.  This
  762.    last method would also permit the Network Controller at the SEND site
  763.    to make two or more SENDs out of one, if that was necessary to match a
  764.    smaller RECEIVE buffer size.
  765.  
  766.    The maintenance of unique numbers is also a problem when the processes
  767.    are geographically distributed.  Three solutions to this problem are
  768.    presented here.  The first possibility is for the autonomous operating
  769.    systems to ask the Network Controller for the unique numbers
  770.    originally and then guarantee the integrity of any unique numbers
  771.    currently owned by local processes and programs using whatever means
  772.    are at the operating system's disposal.  In this case, the Network
  773.    Controller would provide a method for a unique number to be sent from
  774.    one site to another and would vouch for the number's identity at the
  775.    new site.  The second method is simply to give the unique numbers to
  776.    the processes that are using them, depending on the non-malicious
  777.    behavior of the processes to preserve the unique numbers, or if an
  778.    accident should happen, the two passwords (SEND and RECEIVE port
  779.    numbers) that are required to initiate a transmission.  If the unique
  780.    numbers are given out in a non-sequential manner and are reasonably
  781.    long (say 32 bits), there is little danger.  In the final method, a
  782.    user identification is included in the port numbers and the individual
  783.  
  784.  
  785.  
  786. Walden                                                        [Page 14]
  787.  
  788. RFC 62                  IPC for Resource Sharing          3 August 1970
  789.  
  790.  
  791.    operating systems guarantee the integrity of these identification
  792.    bits.  Thus a process, while not able to be sure that the correct port
  793.    is transmitting to him, can be sure that some port of the correct user
  794.    is transmitting.  This is the so-called virtual net concept suggested
  795.    by W. Crowther [2].<8>
  796.  
  797.    A third difficult problem arises when remote processes wish to
  798.    communicate, the problem of maintaining high bandwidth connections
  799.    between the remote processes.  The solution to this problem lies in
  800.    allowing the processes considerable information about the state of an
  801.    on-going transmission.  First, we examine a SEND process in detail.
  802.    When a process executes a SEND, the local portion of the Network
  803.    Controller passes the SEND on to the rendezvous site, normally the
  804.    local site.  When a RECEIVE arrives matching a pending SEND, the
  805.    Network Controller notifies the SEND process by causing an interrupt
  806.    to the specified restart location.  Simultaneously the Network
  807.    Controller starts shipping the SEND buffer to the RECEIVE site.  When
  808.    transmission is complete, a flag is set which the SEND process can
  809.    test.  While a transmission is taking place, the process may ask the
  810.    Network Controller to perform other operations, including other SENDs.
  811.    A second SEND over a pair of ports already in the act of transmission
  812.    is noted and the SEND becomes active as soon as the first transmission
  813.    is complete.  A third identical SEND results in an error message to
  814.    the SENDing process.  Next, we examine a RECEIVE process in detail.
  815.    When a process executes a RECEIVE, the RECEIVE is sent to the
  816.    rendezvous site.  When data resultant from this RECEIVE starts to
  817.    arrive at the RECEIVE site, the RECEIVE process is notified via an
  818.    interrupt to the specified restart location.  When the transmission is
  819.    complete, a flag is set which the RECEIVE process can test.  A second
  820.    RECEIVE over the same port pair is allowed.  A third results in an
  821.    error message to the RECEIVE process.  Thus, there is sufficient
  822.    machinery to allow a pair of processes always to have both a
  823.    transmission in progress and the next one pending.  Therefore, no
  824.    efficiency is lost.  On the other hand, each transmission must be
  825.    preceded by a RECEIVE into a specified buffer, thus continuing to
  826.    provide complete flow control.
  827.  
  828.  
  829. 4. A Potential Application
  830.  
  831.    Only one  resource sharing computer network currently exists, the
  832.    ARPA Computer Network.  In this section, I discuss application of the
  833.    system described in this paper to the ARPA Network [2][5][9].
  834.  
  835.    The ARPA Network currently incorporates ten sites spread across the
  836.    United States.  Each site consists of one to three (potentially four)
  837.    independent computer systems called Hosts and one communications
  838.    computer system called an IMP.  All of the Hosts at a site are
  839.  
  840.  
  841.  
  842. Walden                                                        [Page 15]
  843.  
  844. RFC 62                  IPC for Resource Sharing          3 August 1970
  845.  
  846.  
  847.    directly connected to the IMP.  The IMPs themselves are connected
  848.    together by 50-kilobit phone lines (much higher rate lines are a
  849.    potential), although each IMP is connected to only one to five other
  850.    IMPs.  The IMPs provide a communications subnet through which the
  851.    Hosts communicate.  Data is sent through the communications subnet in
  852.    messages of arbitrary size (currently about 8000 bits) called network
  853.    messages.  When a network message is received by the IMP at the
  854.    destination site, that IMP sends an acknowledgment, called a RFNM, to
  855.    the source site.
  856.  
  857.    A system for interprocess communication for the ARPA Network (let us
  858.    call this IPC for ARPA) is currently being designed by the Network
  859.    Working Group, under the chairmanship of S. Crocker of UCLA.  Their
  860.    design is somewhat constrained by the communications subnet [5]<9>.
  861.    I would like to compare point-by-point IPC for ARPA with the one
  862.    developed in this paper; however, such a comparison would first
  863.    require description here, almost from scratch, of the current state
  864.    of IPC for ARPA since very little up-to-date information about IPC
  865.    for ARPA appears in the open literature [2].  Also, IPC for ARPA is
  866.    quite complex and the working documents describing it now run to many
  867.    hundred pages, making any description lengthy and inappropriate for
  868.    this paper.<10> Therefore, I shall make only a few scattered
  869.    comparisons of the two systems, the first of which are implicit in
  870.    this paragraph.
  871.  
  872.    The interprocess communication system being developed for the ARPA
  873.    Network comes in several almost distinct pieces: The Host/IMP
  874.    protocol, IMP/IMP protocol, and the Host/Host protocol.  The IMPs
  875.    have sole responsibility for correctly transmitting bits from one
  876.    site to another.  The Hosts have sole responsibility for making
  877.    interprocess connections.  Both the Host and IMP are concerned and
  878.    take a little responsibility for flow control and message sequencing.
  879.    Applications of the interprocess communication system described in
  880.    this paper leads me to make a different allocation of responsibility.
  881.    The IMP still continues to move bits from on site to another
  882.    correctly but the Network Controller also resides in the IMP, and
  883.    flow control is completely in the hands of the processes running in
  884.    the Hosts, although using the mechanisms provided by the IMPs.
  885.  
  886.    The IMPs provide the SEND, RECEIVE, SEND FROM ANY, RECEIVE ANY, and
  887.    UNIQUE operations in slightly altered forms for the Hosts and also
  888.    maintain the rendezvous tables, including moving of SEND ports when
  889.    necessary.  Putting these operations in the IMP requires the
  890.    Host/Host protocol program to be written only once, rather than many
  891.    times as is currently being done in the ARPA Network.  It is perhaps
  892.    useful to step through the five operations again.
  893.  
  894.    SEND.  The Host gives the IMP a SEND port number, a RECEIVE port
  895.  
  896.  
  897.  
  898. Walden                                                        [Page 16]
  899.  
  900. RFC 62                  IPC for Resource Sharing          3 August 1970
  901.  
  902.  
  903.    number, the rendezvous site, and a buffer specification (e.g., start
  904.    and end, or beginning and length).  The SEND is sent to the
  905.    rendezvous site IMP, normally the local IMP.  When a matching RECEIVE
  906.    arrives at the local IMP, the Host is notified of the RECEIVE port of
  907.    the just arrived message.  This port number is sufficient to identify
  908.    the SENDing process, although a given operating system may have to
  909.    keep internal tables mapping this port number into a useful internal
  910.    process identifier.  Simultaneously, the IMP begins to ask the Host
  911.    for specific pieces of the SEND buffer, sending these pieces as
  912.    network messages to the destination site.  If a RFNM is not received
  913.    for too long, implying a network message has been lost in the
  914.    network, the Host is asked for the same data again and it is
  915.    retransmitted.<11> Except for the last piece of a buffer, the IMP
  916.    requests pieces from the Host which are common multiplies of the word
  917.    size of the source Host, IMP, and destination Host.  This avoids
  918.    mid-transmission word alignment problems.
  919.  
  920.    RECEIVE.  The Host gives the IMP a SEND port, a RECEIVE port, a
  921.    rendezvous site, and a buffer description.  The RECEIVE message is
  922.    sent to the rendezvous site.  As the network messages making up a
  923.    transmission arrive for the RECEIVE port, they are passed to the Host
  924.    along with RECEIVE port number (and perhaps the SEND port number),
  925.    and an indication to the Host where to put this data in its input
  926.    buffer.  When the last network message of the SEND buffer is passed
  927.    into the Host, it is marked accordingly and the Host can then detect
  928.    this.  (It is conceivable that the RECEIVE message could also
  929.    allocate a piece of network bandwidth while making its network
  930.    traverse to the rendezvous site.)
  931.  
  932.    RECEIVE ANY.  The Host gives the IMP a RECEIVE port and a buffer
  933.    descriptor.  This works the same as RECEIVE but assumes the local
  934.    site to be the rendezvous site.
  935.  
  936.    SEND FROM ANY.  The Host gives the IMP RECEIVE and SEND ports, the
  937.    destination site, and a buffer descriptor.  The IMP requests and
  938.    transmits the buffer as fast as possible.  A SEND FROM ANY for a
  939.    non-existent port is discarded at the destination site.
  940.  
  941.    In the ARPA Network, the Hosts are required by the IMPs to physically
  942.    break their transmissions into network messages, and successive
  943.    messages of a single transmission must be delayed until the RFNM is
  944.    received for the previous message.  In the system described here,
  945.    since RFNMs are tied to the transmission of a particular piece of
  946.    buffer and since the Hosts allow the IMPs to reassemble buffers in
  947.    the Hosts by the IMP telling the Host where to put each buffer piece
  948.    then pieces of a single buffer can be transmitted in parallel network
  949.    messages and several RFNMs can be outstanding simultaneously.  This
  950.    enables The Hosts to deal with transmissions of more natural sizes
  951.  
  952.  
  953.  
  954. Walden                                                        [Page 17]
  955.  
  956. RFC 62                  IPC for Resource Sharing          3 August 1970
  957.  
  958.  
  959.    and higher bandwidth for a single transmission.
  960.  
  961.    For additional efficiency, the IMP might know the approximate time it
  962.    takes for a RECEIVE to get to a particular other site and warn the
  963.    Host to wake up a process shortly before the arrival of a message for
  964.    that process is imminent.
  965.  
  966.  
  967.    5. Conclusion
  968.  
  969.    Since the system described in this paper has not been implemented, I
  970.    have no clearly demonstrable conclusions nor any performance reports.
  971.    Instead, I conclude with four openly subjective claims.
  972.  
  973.    1) The interprocess communication system described in Section 2 is
  974.    simpler and more general than most existing systems of equivalent
  975.    power and is more powerful than most intra time-sharing system
  976.    communication systems currently available.
  977.  
  978.    2) Time-sharing systems structured like the model in Section 2 should
  979.    be studied by designers of time-sharing systems who may see a
  980.    computer network in their future, as structure seems to enable
  981.    joining a computer network with a minimum of difficulty.
  982.  
  983.    3) As computer networks become more common, remote interprocess
  984.    communication systems like the one described in Section 3 should be
  985.    studied.  The system currently being developed for ARPA is a step in
  986.    the wrong direction, being addressed, in my opinion, more to
  987.    communication between monitors than to communication between
  988.    processes and consequently subverting convenient resource sharing.
  989.  
  990.    4) The application of the system as described in Section 4 is much
  991.    simpler to implement and more powerful than the system currently
  992.    being constructed for the ARPA Network, and I suggest that
  993.    implementation of my method be seriously considered for adoption by
  994.    the ARPA Network.
  995.  
  996.  
  997.  <Footnotes>
  998.  
  999.     1. Almost any of the common definitions of a process would suit the
  1000.        needs of this paper.
  1001.  
  1002.     2. Or perhaps there is only one permanently known port, which
  1003.        belongs to a directory-process that keeps a table of
  1004.        permanent-process/well-know-port associations.
  1005.  
  1006.     3. That program which prints file directories, tells who is on other
  1007.  
  1008.  
  1009.  
  1010. Walden                                                        [Page 18]
  1011.  
  1012. RFC 62                  IPC for Resource Sharing          3 August 1970
  1013.  
  1014.  
  1015.        teletypes, runs subsystems, etc.
  1016.  
  1017.     4. The reader should have noticed by now that I do not like to think
  1018.        of a new process (consisting of a new conceptual copy of a
  1019.        program) being started up each time another user wishes to use
  1020.        the program.  Rather, I like to think of the program as a single
  1021.        process which knows it is being used simultaneously by many other
  1022.        processes and consciously multiplexes among the users or delays
  1023.        service to users until it can get around to them.
  1024.  
  1025.     5. I use operating system rather than time-sharing system in this
  1026.        section to point up the fact that the autonomous systems at the
  1027.        network nodes may be either full blown time-sharing systems in
  1028.        their own right, and individual process in a larger
  1029.        geographically distributed time-sharing system, or merely
  1030.        autonomous sites wishing to communicate.
  1031.  
  1032.     6. For a SEND FROM ANY message, the rendezvous site is the
  1033.        destination site.
  1034.  
  1035.     7. For readers familiar with the once-proposed re-connection scheme
  1036.        for the ARPA Network, the above system is simple, comparatively,
  1037.        because there are no permanent connections to break and move;
  1038.        that is, connections only exist fleetingly in the system
  1039.        described here and can therefore be remade between any pair of
  1040.        processes which at any time happen to know each other's port
  1041.        numbers and have some clue where they each are.
  1042.  
  1043.     8. Crowther says this is not the virtual net concept.
  1044.  
  1045.     9. As one of the builders of the ARPA communications subnet, I am
  1046.        partially responsible for these constraints.
  1047.  
  1048.    10. The reader having access to the ARPA working documents may want
  1049.        to read Specifications for the Interconnection of a Host to
  1050.        an IMP, BBN Report No. 1822; and ARPA Network Working Group
  1051.        Notes #36, 37, 38, 39, 42, 44, 46, 47, 48, 49, 50, 54, 55, 56,
  1052.        57, 58, 59, 60.
  1053.  
  1054.    11. This also allows messages to be completely thrown away by the IMP
  1055.        subnet it that should ever be useful.
  1056.  
  1057.  
  1058.  [REFERENCES]
  1059.  
  1060.     1.  Ackerman, W., and Plummer, W.  An implementation of a
  1061.             multi-processing computer system.  Proc. ACM Symp. on
  1062.             Operating System Principles, Gatlinsburg, Tenn.,
  1063.  
  1064.  
  1065.  
  1066. Walden                                                        [Page 19]
  1067.  
  1068. RFC 62                  IPC for Resource Sharing          3 August 1970
  1069.  
  1070.  
  1071.             Oct. 1-4, 1967.
  1072.  
  1073.     2.  Carr, C. Crocker, S., and Cerf, V.  Host/Host communication
  1074.             protocol in the ARPA network.  Proc. AFIPS 1970 Spring
  1075.             Joint Comput. Conf., Vol. 36, AFIPS Press, Montvale, N.J.,
  1076.             pp. 589-597.
  1077.  
  1078.     3.  Dennis, J., and VanHorn, E.  Programming semantics for
  1079.             multiprogrammed computations.  Comm. ACM 9, 3 (March,
  1080.             1966), 143-155.
  1081.  
  1082.     4.  Hansen, P.B.  The nucleus of a multiprogramming system.  Comm.
  1083.             ACM 13, 4 (April, 1970), 238-241, 250.
  1084.  
  1085.     5.  Heart, F., Kahn, R., Ornstein, S., Crowther, W., and Walden, D.
  1086.             The interface message processor for the ARPA computer
  1087.             network.  Proc. AFIPS 1970 Spring Joint Comput. Conf., Vol.
  1088.             36, AFIPS Press, Montvale, N.J., pp. 551-567.
  1089.  
  1090.     6.  Lampson, B.  SDS 940 Lectures, circulated informally.
  1091.  
  1092.     7.  _______.  An overview of the CAL time-sharing system.  Computer
  1093.             Center, University of California, Berkeley, Calif.
  1094.  
  1095.     8.  _______.  Dynamic protection structures.  Proc.  AFIPS 1969 Fall
  1096.             Joint Comput. Conf., Vol. 35, AFIPS Press, Montvale, N.J.,
  1097.             pp. 27-38.
  1098.  
  1099.     9.  Roberts, L., and Wessler, B.  Computer network development to
  1100.             achive resource sharing.  Proc.  AFIPS 1970 Spring Joint
  1101.             Comput. Conf., Vol. 36, AFIPS Press, Monvale, N.J., pp.
  1102.             543-549.
  1103.  
  1104.    10.  Spier, M., and Organick, E.  The MULTICS interprocess
  1105.             communication facility.  Proc. ACM Second Symp. on Operating
  1106.             Systems Principles, Princeton University, Oct. 20-22, 1969.
  1107.  
  1108.  
  1109.  
  1110. Author's Address
  1111.  
  1112.    D. C. Walden
  1113.    Bolt Bernakek and Newman, Inc.
  1114.    Cambridge, Massachusetts
  1115.  
  1116.  
  1117.         [ This RFC was put into machine readable form for entry ]
  1118.         [ into the online RFC archives by Adam Costello 3/97 ]
  1119.  
  1120.  
  1121. Walden                                                        [Page 20]
  1122.  
  1123.