Xref: utzoo comp.lang.c:34496 comp.sys.sequent:771 comp.sys.sgi:7130 comp.sys.encore:817 Newsgroups: comp.lang.c,comp.sys.sequent,comp.sys.sgi,comp.sys.encore,uw.usystem Path: utzoo!utgpu!watserv1!watmath!watmsg!pabuhr From: pabuhr@watmsg.uwaterloo.ca (Peter A. Buhr) Subject: uSystem Version 4.3 Organization: University of Waterloo Distribution: comp Date: Tue, 4 Dec 90 22:37:54 GMT Message-ID: <1990Dec4.223754.12542@watmath.waterloo.edu> Sender: daemon@watmath.waterloo.edu (0000-Admin(0000)) Lines: 148 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). Brought to you by Super Global Mega Corp .com