Path: sparky!uunet!zaphod.mps.ohio-state.edu!magnus.acs.ohio-state.edu!
usenet.ins.cwru.edu!agate!darkstar!osr
From: a...@cs.vu.nl (Andy Tanenbaum)
Newsgroups: comp.os.research
Subject: A challenge
Message-ID: <32507@darkstar.ucsc.edu>
Date: 9 Apr 92 19:09:12 GMT
Sender: use...@darkstar.ucsc.edu
Organization: Fac. Wiskunde & Informatica, Vrije Universiteit, Amsterdam
Lines: 106
Approved: comp-os-resea...@ftp.cse.ucsc.edu
Originator: osr@ftp


Gee, reading this newsgroup is more fun than whacking a hornet's nest with
a baseball bat.

I am quite unconvinced.  While I could go after each of the comments posted
here in the past couple of days, I will resist the temptation.  Instead,
for the second act, I hereby challenge all the people who have commented
on my list to do better.  List what YOU consider the five most important things
we have learned about distributed operating systems in the past 20 years.
If you don't think we have learned five things, a shorter list will have to do.
A short statement followed by a short explanation will do nicely.
If you don't think we have learned anything at all, be brave enough to
state that publicly, and hope NSF and DARPA don't read this newsgroup.

The challengees are:

Arindam Banerji
Ken Birman
Steve Chapin
Geoff Collyer
Crispin Cowan
Gary Craig
Mark Day
Fred Douglis
Dick Dunn
Amr El-Kadi
Martin Fouts
Glenn Kasten
Husam Kinawi
J.P.Knight
Ari Lemmke
Jacob Levy
Andy Lowry
Richard M. Mathews
Larry McVoy
Ronald G Minnich
Peter Moylan
Andrew Mullhaupt
Michael O'Dell
Thomas Page
Jehan-Francois Paris
Craig Partridge
Rob Pike
Boris Putanec
Marcus J.  Ranum
Dave Safford
Nirad Sharma
Niranjan G Shivarat
Charles Shub
Charles Bennett Smith
Stephen P Spackman
Henry Spencer
Dave Stow
Werner Vogels
Brent Welch
Phil Winterbottom
Brian Witt
Victor Yodaiken
(And of course, everyone else who has not yet put in his or her 2 cents worth.)

I'll be a sport and go first.

                              THE TOP FIVE

   1. Microkernels are the way to go.
         For the system to work, the kernel has to be reliable.  Putting the
      file system and other user services inside makes it harder to get right
      and less flexible.  The performance loss is (guess) less than a factor
      of two.  If you worry about factors of two, I humbly suggest you write 
      all your code in assembler henceforth.

   2. Synchronous (blocking) communication is easier to use than asynchronous.
         Starting a send, then going off to do something, followed by getting
      an interrupt when the send is done is a nightmare to program.  If you
      must do something while waiting for the reply, put that code in another
      (synchronous) thread.  The biggest problem in the computer industry is
      not slow machines, but hairy, unreliable software.  Using asynchronous
      communication just makes the problem worse.

   3. RPC is a good idea to base your system on.
         SEND/RECEIVE primitives make I/O your central paradigm.  RPC makes
      procedure call, an abstraction mechanism, your central paradigm.
      Abstraction is a key tool for mastering complexity.  We need all
      the help we can get.

   4. Atomic group communication (broadcast or multicast) is highly useful.
         Not all communication is two party.  For replicated servers and many
      other applications, being able to send a (synchronous) message to
      everyone and know they all get it in the same order without loss makes
      programming easier and programs more reliable.  A real win.

   5. Distributed shared memory in one form or another is a convenient model.
         Even better than communicating synchronously is not communicating
      explicitly at all.  Just let the programmer think there is shared
      memory, be it page-based, object-based, or other.  Let the system
      do the work.  There is an obvious analogy with virtual memory.


As you can see, all of my points relate to one theme: making it easier to
build and use distributed systems. I think this is the real issue of the coming
decade, not squeezing another factor of two out of the hardware.  Improvements
in technology will take care of that.

Andy Tanenbaum (a...@cs.vu.nl)

Path: sparky!uunet!elroy.jpl.nasa.gov!swrinde!zaphod.mps.ohio-state.edu!
magnus.acs.ohio-state.edu!usenet.ins.cwru.edu!agate!darkstar!osr
From: yodai...@chelm.cs.umass.edu (victor yodaiken)
Newsgroups: comp.os.research
Subject: Re: A challenge
Message-ID: <32548@darkstar.ucsc.edu>
Date: 10 Apr 92 14:25:27 GMT
Sender: use...@darkstar.ucsc.edu
Organization: University of Massachusetts, Amherst
Lines: 39
Approved: comp-os-resea...@ftp.cse.ucsc.edu
Originator: osr@ftp


In article <32...@darkstar.ucsc.edu> a...@cs.vu.nl (Andy Tanenbaum) writes:
>
>Gee, reading this newsgroup is more fun than whacking a hornet's nest with
>a baseball bat.
>
>I am quite unconvinced.  While I could go after each of the comments posted
>here in the past couple of days, I will resist the temptation.  Instead,
>for the second act, I hereby challenge all the people who have commented
>on my list to do better.  List what YOU consider the five most important things
>we have learned about distributed operating systems in the past 20 years.

Here's four. Two are negative, but that's the breaks.

1. The "fast, clean, communication system" as a foundation for
constructing a distributed o.s. is a mythical object. Distributed o.s's
require different communication mechanisms for different purposes and there
is no single abstraction which can be used as a building block for all others
without a significant cost in performance and ease of use.

2. The UNIX "everything is a file" paradigm extends to networks pretty
well.

3. It is possible to perform significant, on line, "compilation" of
multi-layered o.s. code. The use of this method by Massalin, seems to me to
be one of the most significant advances in the state of the art in
recent years.

4. Current system design methodologies are serious impediments to advance.
Our inability to quickly prototype ideas, to concisely describe (in detail)
the workings of distributed algorithms, and to perform any kind of
verification of algorithms short of testing make o.s. research overly 
tedious. 
 

-- 


yodai...@chelm.cs.umass.edu

Path: sparky!uunet!think.com!ames!agate!darkstar!osr
From: w...@rodos1.adfa.oz.au (Warren Toomey)
Newsgroups: comp.os.research
Subject: Re: A challenge
Message-ID: <32644@darkstar.ucsc.edu>
Date: 11 Apr 92 01:56:21 GMT
Sender: use...@darkstar.ucsc.edu
Organization: Australian Defence Force Academy, Canberra, Australia
Lines: 89
Approved: comp-os-resea...@ftp.cse.ucsc.edu
Originator: osr@ftp

In article <32...@darkstar.ucsc.edu>, by a...@cs.vu.nl (Andy Tanenbaum):

	[ who asks us what have we learned in the last 20 yrs ]

My 2 cents worth, but first background: young programmer who has spent the
last 3 years helping design and build a distributed OS frm the ground up.
Young enough not to have played on Version 7 Unix.

> 1. Microkernels are the way to go.

Very much agreed. Putting as much hardware/dependent code in one layer
make the whole thing easier to port, and gives the OS proper an abstract
machine to support.

>       The performance loss is (guess) less than a factor
>       of two.  If you worry about factors of two, I humbly suggest you write 
>       all your code in assembler henceforth.

Well, if you `hand tune' your ukernel, then you can achieve good performance
on all platforms and still keep the same abstract machine for the real OS.

[ And a question from a naive OS weenie. Why does Mach call itself a
  ukernel when it's HUGE? It should really be a millikernel or something]

> 3. RPC is a good idea to base your system on.
>          SEND/RECEIVE primitives make I/O your central paradigm.

Hell, make RPC your central paradigm for everything. The OS I've been working
on (RHODOS BTW) has exactly _seven_ system calls: send,call,receive plus
comms endpoint manipulation ones. Everything else is done by server processes.
Makes the OS more modular and flexible, and easier to debug.

However, make your message passing FAST & EFFICIENT. Copying more than twice
is right out. BTW, with shared memory, message passing can be used for
token passing/semaphores while the bulk of the information is passed through
shared buffers.

> 2. Synchronous (blocking) communication is easier to use than asynchronous.

Sometimes avoiding a bottleneck by using async comms is more important. But
as Andy points out, it isn't as clean, so the reasons have to be good. We
provide both types in RHODOS, at least for flexibility.

> 4. Atomic group communication (broadcast or multicast) is highly useful.

The provision of several types of multicast is even better, because each
has a different purpose:

	0 or more receive - non-blocking, no guarantee anyone will receive
		 	    it. Useful for transport protocols that want to
			    avoid state & can afford to retransmit a bit more.

	At least 1 receive - blocking. Useful where there may be N servers,
			     and a client only needs to get one answer back.

	All receive - as per the reasons Andy stated.

> 5. Distributed shared memory in one form or another is a convenient model.

I'll agree on the shared bit. Synchronising memory updates & access over
a network is a real headache.

In RHODOS we decided that threads were just too troublesome to do in the
kernel. Let the user process do the work itself, by using a library of
thread routines that form part of the user process.

Instead, we use a MEDIUMWEIGHT process model, where processes have their
own stack spaces but share a common data space read/write. This means that
we do normal context scheduling on all processes, but they can access each
other's memory - a flag in our fork() equivalent makes the parent/child a
mediumweight process pair.


I'll add another lesson to the list: file mapping. This is great! It gets
rid of multiple data copying (disk->buffer->user buffer), and means the
whole of physical memory can be used as a disk cache. Moreover, if you
use the paradigm of file-memory object equivalence, you can use the whole
of the disk for paging, instead of just one partition. And the migration
of processes and their memory can be done through a common file server,
allowing the moving of the dirty pages only.

	I expect flames from the elders. Go ahead, educate me :-)


    Warren Toomey VK1XWT, on the path to insanity
    No longer in the bowels of ADFA Comp Science.
 `I wants virtual memory! I wants it now, precious.'

Path: sparky!uunet!spool.mu.edu!agate!darkstar!osr
From: he...@zoo.toronto.edu (Henry Spencer)
Newsgroups: comp.os.research
Subject: Re: A challenge
Message-ID: <32708@darkstar.ucsc.edu>
Date: 12 Apr 92 00:18:19 GMT
Article-I.D.: darkstar.32708
Sender: use...@darkstar.ucsc.edu
Organization: U of Toronto Zoology
Lines: 34
Approved: comp-os-resea...@ftp.cse.ucsc.edu
Originator: osr@ftp

In article <32...@darkstar.ucsc.edu> a...@cs.vu.nl (Andy Tanenbaum) writes:
>for the second act, I hereby challenge all the people who have commented
>on my list to do better.  List what YOU consider the five most important
>things we have learned about distributed operating systems in the past
>20 years.

1. A distributed operating system should look, to the customer, just like
a non-distributed operating system, apart from the possibility of more
creative failure modes.  Cleverness should go into hiding its distributed
nature, not exposing it.

2. Unix filesystem semantics -- resources organized in a tree structure
named by ASCII names, and operated on by open/close/read/write -- work
just as well in a distributed system as in a non-distributed one, unlike
most of their competitors.

3. Most resources are used by only one customer at a time, so it is
important to streamline the *un*shared case while handling the shared
case gracefully.

4. Pipes are an excellent interprocess-communication method, superior
to most of their competitors in flexibility and distributability (is
that a word? :-))... provided you have some way of establishing them
between unrelated processes, and preferably some way of passing them
between processes dynamically.

5. Most distributed-OS designers would rather design something new and
weird, in hopes that everyone will say "oh, how wonderful, we must
rewrite all our programs to use this at once", than observe point #1
above and build a distributed implementation of the same old thing,
on which all that software will run without change.
-- 
GCC 2.0 is to C as SVR4 is to Unix.     | Henry Spencer @ U of Toronto Zoology
                             -Dick Dunn |  he...@zoo.toronto.edu  utzoo!henry