[comp.lang.c] uSystem Version 4.3

pabuhr@watmsg.uwaterloo.ca (Peter A. Buhr) (12/05/90)

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@cs.su.oz.au).