uSystem Version 4.3

Peter A. Buhr pabuhr at watmsg.uwaterloo.ca
Sun Dec 9 09:07:00 AEST 1990


I would like to announce, to any interested parties, the availability of
Version 4.3 of the uSystem (pronounced micro-system), a light-weight
tasking facility and a companion monitor preprocessor for use in C on UNIX
systems.

Version 4.3 has several fixes and extensions from version 4.2, which was
made available on May 22, 1990.

Fixes:

1. Fixed an error message in uReply, which printed out an incorrect task
   id.

2. Changed the concc command so that GNU C specific compilation flags were
   not used if the compiler name is not gcc or g++.

3. Time slicing was NOT turned on as the default. It was turned off during
   some debugging and not turned on again. Time slicing is now turned on when
   the uSystem starts, which is what the documentation states is true.  Sorry
   for any inconvenience this might have caused.

4. There was a bug in the multiprocessor MIPS version of the uSystem that
   caused applications to hang. The assembler was interchanging store
   instructions to fill the pipeline. This caused locks to be released
   prematurely.  This is a fundamental problem for any application that tries
   to do its own synchronization, for example, Dekker's or G.L.  Peterson's
   algorithms may not work because the assembler could reorder stores
   regardless of what you specify in the C code.  After having worked on the
   MIPS machine for several months, it is clear to us that it was not
   designed with concurrency in mind. It is a very difficult machine to work
   on from a concurrency standpoint. We are discovering the same to be true
   of the Sparc.  So much for RISC architectures. :-)

5. Added routines to name a task with a character string name and this
   name is used when printing an error message.

6. The port to the Encore Multimax/UMAX 4.3 is complete. However, we had
   to modify GNU C so that it supports the -fshared-data option on the
   Encore.  The modification has been sent to GNU land and *will be* included
   in the next distribution. We also found a code generation bug for NS32K
   machines.  We have included an RMS patch for this, as well. The necessary
   patches are included with the uSystem distribution.  The difficult part is
   convincing your local administrator to patch the existing compiler or
   build you a special one.  Good luck. We would like to thank the people at
   Buffalo for letting us use their Multimax to do the port. BTW, the uSystem
   runs twice as fast as the Encore/Brown EPT system, according to the
   uSystem benchmark.  All benchmark programs are in
   {uSystem-home-directory}/examples/Benchmark/, so you can see for yourself
   if we are comparing apples and ballpeen hammers.

7. Synchronous exception handling is working. This includes hierarchical
   exception definitions, catching exceptions on an object and exception
   basis or generically on an exception basis, and a predefined hierarchy of
   exceptions for all uKernel errors and a large number of UNIX I/O and
   memory allocation errors.  It's great stuff, unfortunately the syntax is a
   little baroque. Even if you don't care about concurrency, you might like
   to use the exception handling facilities.  We decided to provide 2 forms
   of access to the uSystem UNIX I/O routines: one works identically to the
   normal UNIX routines, returning lots of special values that indicate
   errors, and the other form generates exceptions. The default is to use
   UNIX return codes.  To get exceptions from I/O routines, compile with the
   "-nounixrc" flag.  Because this work is preliminary, it could change in
   the next version. See the documentation.  (May I never have to test
   another return code as long as I live.)

8. Fixed a bug in uLongCocall. It was passing the argument length as the
   first parameter. (Seems nobody was using uLongCocall. :-))

9. The uSystem is now built with dmake, which is distributed with the
   uSystem. We highly recommend it.

10. Added socket routines uSsend, uSendto, uSendmsg, uRecv, uRecvfrom, and
    uRecvmsg to the unformatted I/O library.

11. The port to the Sparc is complete. It has *not* been tested
    extensively so there might still be problems. Please report any problems.
    (Who designs these things anyway?)

12. Added documentation to the reference manual about using the uSystem
    with C++. The uSystem does not integrate well with C++, but if you want
    concurrency and are using C++, you can at least get started. (Like my
    granny used to say "its better than a hit on the head with a frozen
    haggis".)

13. Changed uResumeDie so that it does not change the implicit resumer
    field of the resumed coroutine to point back to the dead coroutine.
    Pointing back to a dead coroutine does not seem to make sense. This should
    not affect existing coroutine programs because the old semantics could not
    be taken advantage of.

14. Added formatted routines uFeof, uFerror, uClearerr, uFileno.

The next release of the uSystem should have asynchronous exception
handling facilities. We also want to port the uSystem to the Mach OS.
Finally, we are putting together a simple graphics interface for the
Silicon Graphics computer to provide controlled access to the graphics
device from multiple light weight tasks.

BTW, if you like the uSystem, then you're going to love what we have
running in C++. We have augmented C++ with support for concurrency. But
that's another project ...

Version 4.3 of the uSystem can be obtained by anonymous ftp from the
following location:

   watmsg.waterloo.edu (129.97.129.9)   pub/uSystem/uSystem.tar.Z

The distribution file is in compressed tar format. Execute the following
commands to unpack the source:

   uncompress uSystem.tar.Z
   tar -xf uSystem.tar

The README file contains all the installation instructions. Good luck and
happy concurrency.

The uSystem runs on the following processors: M68000 series, NS32000
series, VAX, MIPS, Intel 386, Sparc, and the following UNIX operating
systems:

- generic BSD 4.{2,3}
- UNIX System V that has BSD system calls "setitimer" and a "sigcontext"
  passed to signal handlers which contains the location of the interrupted
  program
- Apollo SR10 BSD
- Sun OS 4.0
- Tahoe BSD 4.3
- Ultrix 3.0
- DYNIX
- Umax 4.3
- IRIX 3.3

The uSystem requires at least GNU C 1.37.1. For the Encore and Sequent
Balance, GNU C version 1.37.1 must be patched with the supplied patches.
The uSystem will NOT compile using other compilers. (Don't even think
about it!)

There is an SP&E paper about version 4.1 of the uSystem in the Sept 1990
issue.

The uSystem is being used to build a highly concurrent post-relational
database here at Waterloo. It is also being used for teaching purposes
here and at the University of Sydney, Australia (contact Michael Wise,
michaelw at cs.su.oz.au).



More information about the Comp.sys.sun mailing list